123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256 |
- <template>
- <view>
- <view class="wrapper flex-align-between" v-if="data">
- <image :src="resource.prince_bg" class="bg" mode="scaleToFill" />
- <view class="flex-column-around flex1 overflow-hidden">
- <view class="flex-align">
- <image v-if="data.status == 1" :src="resource.prince_ing" class="flag" />
- <image v-else-if="data.status == 0" :src="resource.prince_wait" class="flag" />
- </view>
- <view class="flex-align paddingY15">
- <image :src="resource.prince_fun1" class="item" @click="showRule" />
- <image :src="resource.prince_fun2" class="marginL5" style="width: 108rpx; height: 40rpx" @click="showRank" />
- </view>
- <view class="time-wrapper">
- <text v-if="data.status == 0">距开始:{{leftTimeStr}}</text>
- <text v-if="data.status == 1">距结束:{{leftTimeStr}}</text>
- </view>
- </view>
- <!-- <view class="goods-wrapper flex-shrink0">
- <image :src="data.spu.cover" class="cover" @click="showGoodsDetail(data.spu)" />
- </view> -->
- <view class="flex-column-align-center">
- <image :src="resource.prince_magic_current" style="height: 33rpx; width: 0" mode="heightFix"/>
- <view class="paddingT12 bold font10" style="color: #19F4FF">{{data.magicQuantity}}</view>
- </view>
- <prince-rule ref="ruleRef" v-if="data.luckKing" :luckKing="data.luckKing" />
- <prince-rank ref="rankRef" v-if="data.luckKing" :poolId="poolId" :luckKing="data.luckKing"/>
- <prince-goods ref="ruleGoods" :poolId="poolId" @showDetail="showGoodsDetail" />
- <goods-detail ref="goodsDetailRef" @close="goodsDetailColse" />
- </view>
- </view>
- </template>
- <script>
- import resource from '@/utils/resource'
- import princeRule from './prince_rule'
- import princeRank from './prince_rank'
- import princeGoods from './prince_goods'
- import goodsDetail from './../store/goods_detail'
- export default {
- components: { goodsDetail, princeRule, princeRank, princeGoods },
- props: {
- poolId: Number
- },
- data() {
- return {
- data: null,
- resource,
- leftTime: 0
- }
- },
- computed: {
- leftTimeStr() {
- if (!this.data || !this.leftTime) return ''
- return this.generaTimeStr(this.leftTime)
- }
- },
- mounted() {
- },
- beforeDestroy() {
- this.stopTimer()
- },
- methods: {
- refresh() {
- this.getData()
- },
- async getData() {
- const res = await this.$service.award.king(this.poolId)
- this.data = res
- if (res) {
- this.handleLeftTime()
- }
- },
- handleLeftTime() {
- if (!this.data || !this.data.leftTime) {
- this.stopTimer()
- return
- }
- this.leftTime = parseInt(this.data.leftTime / 1000)
- this.startTimer()
- },
- startTimer() {
- this.stopTimer()
- this.timer = setInterval(() => {
- this.leftTime -= 1
- if (this.leftTime <= -1) {
- this.stopTimer()
- this.$emit('refresh')
- }
- }, 1000)
- },
- stopTimer() {
- if (this.timer) {
- this.leftTime = 0
- clearInterval(this.timer)
- this.timer = null
- }
- },
- showRule() {
- this.$refs.ruleRef.show()
- },
- showRank() {
- this.$refs.rankRef.show()
- },
- showGoods() {
- this.$refs.ruleGoods.show()
- },
- showGoodsDetail(spu) {
- this.$parent.$parent.lock = true
- this.$refs.goodsDetailRef.show(spu)
- },
- goodsDetailColse() {
- this.$parent.$parent.lock = false
- },
- generaTimeStr(value) {
- let second = value
- let baseMin = 60
- let baseHour = baseMin * 60
- let baseDay = baseHour * 24
- let str = ''
- if (second >= baseHour) {
- let hours = parseInt(second / baseHour)
- str += (hours < 10 ? '0' + hours : hours) + ':'
- second = second % baseHour
- } else {
- str += '00:'
- }
- if (second >= baseMin) {
- let mins = parseInt(second / baseMin)
- str += (mins < 10 ? '0' + mins : mins) + ':'
- second = second % baseMin
- } else {
- str += '00:'
- }
- if (parseInt(second) > 0) {
- str += second < 10 ? '0' + second : second
- } else {
- str += '00'
- }
- return str
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- .wrapper {
- position: relative;
- margin: 0 28rpx;
- height: 228rpx;
- background: rgba(10, 10, 25, 0.6);
- box-shadow: 0px 0px 4px 2px rgba(147, 67, 255, 0.3),
- inset 0px 0px 20px 0px rgba(0, 131, 255, 0.8);
- border-radius: 10px;
- border: 1px solid #5b9cff;
- overflow: hidden;
- padding: 0 32rpx 0 200rpx;
- .bg {
- position: absolute;
- left: 0;
- top: 0;
- width: 100%;
- height: 100%;
- }
- .goods-wrapper {
- margin-left: 10px;
- position: relative;
- width: 74px;
- height: 88px;
- box-shadow: 0px 0px 10px 10px rgba(147, 67, 255, 0.3);
- border-radius: 4px;
- border: 1px solid #00a2e7;
- overflow: hidden;
- .mask {
- position: absolute;
- left: 0;
- right: 0;
- top: 0;
- bottom: 0;
- background: rgba($color: #000000, $alpha: 0.4);
- }
- .last-flag {
- position: absolute;
- top: 8rpx;
- width: 80rpx;
- height: 20rpx;
- text-align: center;
- }
- .nickname {
- position: absolute;
- left: 0;
- right: 0;
- bottom: 12rpx;
- height: 24rpx;
- background: linear-gradient(315deg, #2bebe8 0%, #3ba1ff 100%);
- text-align: center;
- font-size: 20rpx;
- line-height: 24rpx;
- color: #fff;
- }
- .cover {
- width: 100%;
- height: 100%;
- }
- .avatar {
- position: absolute;
- width: 56rpx;
- height: 56rpx;
- border-radius: 28rpx;
- }
- }
- .refresh {
- position: absolute;
- right: 0;
- top: 0;
- width: 50rpx;
- height: 36rpx;
- }
- .flag {
- width: 104rpx;
- height: 32rpx;
- }
- .schedule-wrapper {
- background: rgba($color: #85bbff, $alpha: 0.3);
- width: 230rpx;
- height: 20rpx;
- overflow: hidden;
- border-radius: 2rpx;
- }
- .num-wrapper {
- width: 12px;
- height: 16px;
- line-height: 16px;
- background: linear-gradient(315deg, #2bebe8 0%, #3ba1ff 100%);
- color: white;
- font-size: 13px;
- text-align: center;
- }
- .item {
- width: 88rpx;
- height: 40rpx;
- }
- .time-wrapper {
- height: 16px;
- background: linear-gradient(315deg, #2bebe8 0%, #3ba1ff 100%);
- color: #000;
- font-size: 12px;
- text-align: center;
- }
- }
- </style>
|