普兆健康管家前端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

144 lines
3.4 KiB

<template>
<view class="card">
<image class="card-bg" :src="data.url" mode="scaleToFill"></image>
<view class="flex card-bar">
<view class="flex countdown" v-if="countdown">
距开始<text class="count">{{ countdown.day }}</text>
<text class="count">{{ countdown.hour }}</text>:<text class="count">{{ countdown.minute }}</text>:<text class="count">{{ countdown.second }}</text>
</view>
<button class="flex btn">进入直播间</button>
</view>
</view>
</template>
<script>
import dayjs from "dayjs";
import isSameOrBefore from 'dayjs/plugin/isSameOrBefore'
dayjs.extend(isSameOrBefore);
export default {
props: {
data: {
type: Object,
default() {
return {}
}
}
},
data() {
return {
timer: null,
countdown: null,
}
},
watch: {
data: {
handler() {
this.updateCountdown()
},
immediate: true,
deep: true,
}
},
methods: {
updateCountdown() {
this.timer && clearTimeout(this.timer)
let current = dayjs()
let startTime = dayjs(this.data.startTime)
if (startTime.isSameOrBefore(current)) {
this.countdown = null
return
}
let countdown = {
day: 0,
hour: 0,
minute: 0,
second: 0,
}
let day = Math.floor(startTime.diff(current, 'day', true))
countdown.day = day
let hour = Math.floor(startTime.diff(current, 'hour', true))
countdown.hour = hour - day * 24
countdown.hour = countdown.hour < 10 ? `0${countdown.hour}` : countdown.hour
let minute = Math.floor(startTime.diff(current, 'minute', true))
countdown.minute = minute - hour * 60
countdown.minute = countdown.minute < 10 ? `0${countdown.minute}` : countdown.minute
let second = startTime.diff(current, 'second')
countdown.second = second - minute * 60
countdown.second = countdown.second < 10 ? `0${countdown.second}` : countdown.second
this.countdown = countdown
this.timer = setTimeout(() => {
this.updateCountdown()
}, 1000)
},
},
}
</script>
<style scoped lang="scss">
.card {
position: relative;
width: 100%;
height: 316rpx;
border-radius: 40rpx;
overflow: hidden;
box-shadow: -5rpx -5rpx 10rpx 0 #FFFFFF,
10rpx 10rpx 20rpx 0 #AAAACC80,
4rpx 4rpx 10rpx 0 #AAAACC40,
-2rpx -2rpx 5rpx 0 #FFFFFF;
&-bg {
width: 100%;
height: 100%;
}
&-bar {
justify-content: space-between;
position: absolute;
left: 0;
bottom: 0;
width: 100%;
padding: 13rpx 32rpx;
background: #FFFFFF69;
box-sizing: border-box;
.countdown {
font-family: PingFang SC;
font-weight: 400;
font-size: 28rpx;
line-height: 1.4;
color: #252545;
.count {
margin: 0 8rpx;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 40rpx;
height: 40rpx;
background: #0000002B;
border-radius: 8rpx;
}
}
.btn {
font-family: PingFang SC;
font-weight: 600;
font-size: 24rpx;
line-height: 1.5;
color: #252545;
padding: 7rpx 16rpx;
border-radius: 24rpx;
background: #FFFFFF;
}
}
}
</style>