3 changed files with 243 additions and 0 deletions
@ -0,0 +1,100 @@ |
|||||
|
<template> |
||||
|
<view><slot :time="time" :remain="timeData.remain" :day="timeData.day" :hour="timeData.hour" :minute="timeData.minute" :second="timeData.second" /></view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
// https://ext.dcloud.net.cn/plugin?id=1687 |
||||
|
export default { |
||||
|
props: { |
||||
|
// 倒计时时长(单位:毫秒) |
||||
|
time: { |
||||
|
type: Number, |
||||
|
default: 0 |
||||
|
}, |
||||
|
|
||||
|
// 是否自动 |
||||
|
'autoStart': { |
||||
|
type: Boolean, |
||||
|
default: false |
||||
|
} |
||||
|
}, |
||||
|
data() { |
||||
|
return { |
||||
|
timer: null, |
||||
|
timeData: { |
||||
|
remain: 0, |
||||
|
day: 0, |
||||
|
hour: 0, |
||||
|
minute: 0, |
||||
|
second: 0 |
||||
|
} |
||||
|
}; |
||||
|
}, |
||||
|
watch: { |
||||
|
time() { |
||||
|
this.reset() |
||||
|
} |
||||
|
}, |
||||
|
methods: { |
||||
|
|
||||
|
// 设置timeData |
||||
|
updateTimeData() { |
||||
|
let t = this.timeData.remain; |
||||
|
this.timeData.day = Math.floor(t / 1000 / 60 / 60 / 24); |
||||
|
this.timeData.hour = Math.floor((t / 1000 / 60 / 60) % 24); |
||||
|
this.timeData.minute = Math.floor((t / 1000 / 60) % 60); |
||||
|
this.timeData.second = Math.floor((t / 1000) % 60); |
||||
|
}, |
||||
|
|
||||
|
// 开启倒计时 |
||||
|
startTimer() { |
||||
|
if (this.timer) { |
||||
|
clearInterval(this.timer); |
||||
|
} |
||||
|
if(this.timeData.remain < 1000) { |
||||
|
return |
||||
|
} |
||||
|
this.timer = setInterval(() => { |
||||
|
this.timeData.remain -= 1000; |
||||
|
this.updateTimeData() |
||||
|
if (this.timeData.remain < 1000) { |
||||
|
this.pause() |
||||
|
this.$emit('finish'); |
||||
|
} |
||||
|
}, 1000); |
||||
|
}, |
||||
|
|
||||
|
// 重置倒计时 |
||||
|
reset() { |
||||
|
this.timeData.remain = this.time; |
||||
|
this.updateTimeData(); |
||||
|
if(this.autoStart) { |
||||
|
this.start() |
||||
|
} |
||||
|
|
||||
|
}, |
||||
|
|
||||
|
// 暂停倒计时 |
||||
|
pause() { |
||||
|
if(this.timer) { |
||||
|
clearInterval(this.timer); |
||||
|
this.timer = null |
||||
|
} |
||||
|
}, |
||||
|
|
||||
|
// 开始倒计时 |
||||
|
start() { |
||||
|
if(this.timer) { |
||||
|
return |
||||
|
} |
||||
|
this.startTimer(); |
||||
|
} |
||||
|
}, |
||||
|
mounted() { |
||||
|
this.reset(); |
||||
|
}, |
||||
|
beforeDestroy() { |
||||
|
this.pause() |
||||
|
} |
||||
|
}; |
||||
|
</script> |
||||
@ -0,0 +1,136 @@ |
|||||
|
<template> |
||||
|
<view> |
||||
|
<lf-nav title="支付收银台" :showIcon="true" bgColor="#fff"></lf-nav> |
||||
|
<view class="content"> |
||||
|
<view class="card lf-flex-column lf-row-center"> |
||||
|
<view class="lf-font-28 lf-color-222">需要支付</view> |
||||
|
<view class="lf-m-t-10 lf-m-b-10"> |
||||
|
<text class="symbol">¥</text> |
||||
|
<text class="price">385</text> |
||||
|
</view> |
||||
|
<view class="tips"> |
||||
|
<view>剩余支付时间:</view> |
||||
|
<view> |
||||
|
<countdown-timer :time="time" :autoStart="true" @finish="dateFinish"> |
||||
|
<template v-slot="{minute, second}"> |
||||
|
<!-- <view>{{minute}}:{{second}}</view> --> |
||||
|
<view class="lf-flex"> |
||||
|
<view>{{ minute >= 10 ? minute : "0" + minute }}</view> |
||||
|
<view>:</view> |
||||
|
<view>{{ second >= 10 ? second : "0" + second }}</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
</countdown-timer> |
||||
|
</view> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="card lf-row-between" v-for="(item, index) in pay_list" :key="index"> |
||||
|
<view> |
||||
|
<text class="lf-iconfont" :class="item.icon"></text> |
||||
|
<text class="lf-m-l-10 lf-font-28 lf-color-222">{{ item.name }}</text> |
||||
|
</view> |
||||
|
<radio-group @change="checkChange($event, index)"> |
||||
|
<radio :checked="item.checked"></radio> |
||||
|
</radio-group> |
||||
|
</view> |
||||
|
</view> |
||||
|
<view class="fixed-btn" hover-class="lf-opacity" @click="confirm">立即支付</view> |
||||
|
</view> |
||||
|
</template> |
||||
|
|
||||
|
<script> |
||||
|
import countdownTimer from '@/components/countdown-timer/countdown-timer'; |
||||
|
export default { |
||||
|
components: { |
||||
|
countdownTimer |
||||
|
}, |
||||
|
data(){ |
||||
|
return { |
||||
|
pay_list: [{ |
||||
|
name: '余额支付', |
||||
|
icon: 'icon--', |
||||
|
checked: false |
||||
|
},{ |
||||
|
name: '微信支付', |
||||
|
icon: 'icon--1', |
||||
|
checked: true |
||||
|
}], |
||||
|
time: new Date('2021/09/8 14:15:00').getTime() - new Date('2021/09/8 14:10:00').getTime() |
||||
|
} |
||||
|
}, |
||||
|
onLoad(){ |
||||
|
|
||||
|
}, |
||||
|
methods: { |
||||
|
checkChange(event, current){ |
||||
|
let list = this.pay_list.map((item, index) => { |
||||
|
if(index == current){ |
||||
|
item.checked = true; |
||||
|
}else{ |
||||
|
item.checked = false; |
||||
|
} |
||||
|
return item; |
||||
|
}) |
||||
|
this.pay_list = list; |
||||
|
}, |
||||
|
dateFinish(){ |
||||
|
console.log("倒计时结束"); |
||||
|
}, |
||||
|
confirm(){ |
||||
|
this.$msg('支付成功') |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
</script> |
||||
|
|
||||
|
<style> |
||||
|
page{ |
||||
|
background-color: #F8F8F8; |
||||
|
} |
||||
|
</style> |
||||
|
<style lang="scss" scoped="scoped"> |
||||
|
.content{ |
||||
|
padding: 30rpx 32rpx; |
||||
|
width: 750rpx; |
||||
|
height: max-content; |
||||
|
box-sizing: border-box; |
||||
|
.card{ |
||||
|
width: 100%; |
||||
|
height: max-content; |
||||
|
padding: 30rpx 40rpx; |
||||
|
background-color: #FFFFFF; |
||||
|
border-radius: 20rpx; |
||||
|
&:nth-child(n+2){ |
||||
|
margin-top: 30rpx; |
||||
|
} |
||||
|
.symbol{ |
||||
|
color: #15716E; |
||||
|
font-size: 32rpx; |
||||
|
} |
||||
|
.price{ |
||||
|
font-size: 72rpx; |
||||
|
color: #15716E; |
||||
|
font-weight: bold; |
||||
|
} |
||||
|
.tips{ |
||||
|
font-size: 24rpx; |
||||
|
color: #FF9D9D; |
||||
|
display: flex; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
.fixed-btn{ |
||||
|
position: fixed; |
||||
|
bottom: 10vh; |
||||
|
left: calc(50% - 275rpx); |
||||
|
width: 550rpx; |
||||
|
height: 100rpx; |
||||
|
background-color: #15716E; |
||||
|
color: #FFFFFF; |
||||
|
text-align: center; |
||||
|
line-height: 100rpx; |
||||
|
font-size: 32rpx; |
||||
|
border-radius: 50rpx; |
||||
|
} |
||||
|
</style> |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue