金诚优选前端代码
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.
 
 
 
 
 

213 lines
6.8 KiB

<template>
<view class="seckill-time-box " :class="mold == 'index' ? 'index' : ''">
<view class="seckill seckill-item" v-if="active" >
<view v-if="endtype == 0">
<view class="no-starts">
进行中
</view>
<view class="time-text">
{{endmessage}}
</view>
</view>
<view class="time-out" v-if="endtype == 1">
<i class="iconfont icon-shijian"></i>
<view class="text my-class" >距离拼团结束还剩余</view>
<view class="tiem"><span class="num-item"> <p class="zero" v-if="endTime.hour < 10">0</p>{{endTime.hour}}</span> 时 <span class="num-item"><p class="zero" v-if="endTime.minute < 10">0</p>{{endTime.minute}}</span> 分 <span class="num-item"><p class="zero" v-if="endTime.second < 10">0</p>{{endTime.second}}</span> 秒</view>
</view>
</view>
<view class="seckill-item" v-else>
<view v-if="gotype == 0">
<view class="no-starts">
未开始
</view>
<view class="time-text">
{{message}}
</view>
</view>
<view class="time-out" v-if="gotype == 1">
<i class="iconfont icon-shijian"></i>
<view class="text">距离拼团开始还剩余</view>
<view class="tiem"><span class="num-item"> <p class="zero" v-if="startsTime.hour < 10">0</p>{{startsTime.hour}}</span> 时 <span class="num-item"> <p class="zero"v-if="startsTime.minute < 10">0</p>{{startsTime.minute}}</span> 分 <span class="num-item"> <p class="zero" v-if="startsTime.second < 10">0</p>{{startsTime.second}}</span> 秒</view>
</view>
</view>
</view>
</template>
<script>
export default {
data() {
return {
message: '',
endmessage: '',
active: false,
gotype: 0,
endtype: 0,
endTime: {
interval: '',
day: 0,
hour: 0,
minute: 0,
second: 0,
count: 0
},
startsTime: {
interval: '',
day: 0,
hour: 0,
minute: 0,
second: 0,
count: 0
}
};
},
props: {
end:{
type: String,
value: null
},
starts: {
type: String,
value: null
},
index: {
type: Number,
value: 0
},
findex: {
type: Number,
value: 0
},
server: {
type: String,
value: null
},
mold: {
type: String,
value: 'goods'
}
},
options: {
addGlobalClass: true
},
methods: {
// 活动开始的倒计时
countTime() {
var d = 86400000,
h = 3600000,
n = 60000,
end = this.end,
server = this.server,
arr = String(end).split(/\D/),
newArr = String(server).split(/\D/);
newArr = newArr.map(Number);
arr = arr.map(Number);
var serverTime = new Date(newArr[0], newArr[1] - 1, newArr[2], newArr[3], newArr[4], newArr[5]).getTime();
var endTime = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]).getTime(); // 组件才秒杀列表页使用时,没有重新请求列表,服务器时间应该加上未开始倒计时的时间
if (this.mold == 'list') {
this.serverTime = serverTime + this.startsTime.count;
} // 计算开始时间跟结束时间的差值
var timeDiff = endTime - serverTime; // 在本地计算倒计时
var allTime = this.endTime.count + 1000;
this.endTime.count = allTime;
var interval = timeDiff - this.endTime.count;
if (interval < d) {
this.endtype = 1;
if (interval < 0) {
// 活动结束
this.$emit('end', {
findex: this.findex,
index: this.index
}); // this.$emit('end',this.index)
} else {
var day = Math.floor(interval / d);
Math.floor(interval -= day * d);
var hour = Math.floor(interval / h);
Math.floor(interval -= hour * h);
var minute = Math.floor(interval / n);
var second = Math.floor(interval % n / 1000);
this.endTime.day = day;
this.endTime.hour = hour;
this.endTime.minute = minute;
this.endTime.second = second;
}
} else {
this.endmessage = `${arr[1]} 月 ${arr[2]} 日,${arr[3]} : ${arr[4]} 结束`;
}
},
// 活动未开始的倒计时
countStartsTime() {
var d = 86400000,
h = 3600000,
n = 60000,
sta = this.starts,
server = this.server,
arr = String(sta).split(/\D/),
newArr = String(server).split(/\D/);
console.log('jijiwawa');
newArr = newArr.map(Number);
arr = arr.map(Number);
var serverTime = new Date(newArr[0], newArr[1] - 1, newArr[2], newArr[3], newArr[4], newArr[5]).getTime();
var staTime = new Date(arr[0], arr[1] - 1, arr[2], arr[3], arr[4], arr[5]).getTime();
var timeDiff = staTime - serverTime;
var allTime = this.startsTime.count + 1000;
this.startsTime.count = allTime;
var interval = timeDiff - this.startsTime.count; // var interval = staTime - nowTime;
// 时间差小于一天
if (interval < d) {
this.gotype = 1
if (interval < 0) {
// 代表活动已经开始了,需要执行活动开始倒计时
var interval = setInterval(() => {
this.countTime();
}, 1000);
this.active = true;
this.endTime.interval = interval
this.$emit('starts', {
findex: this.findex,
index: this.index
}); // this.$emit('starts',this.index);
// 清除掉倒计时,以免重复分发事件
clearInterval(this.startsTime.interval);
} else {
var day = Math.floor(interval / d);
Math.floor(interval -= day * d);
var hour = Math.floor(interval / h);
Math.floor(interval -= hour * h);
var minute = Math.floor(interval / n);
var second = Math.floor(interval % n / 1000);
this.startsTime.day = day;
this.startsTime.hour = hour;
this.startsTime.minute = minute;
this.startsTime.second = second;
}
} else {
this.message = `${arr[1]} 月 ${arr[2]} 日,${arr[3]} : ${arr[4]} 开始`
}
}
},
mounted(){
var interval = setInterval(() => {
this.countStartsTime();
}, 1000);
this.startsTime.interval = interval
}
};
</script>
<style rel="stylesheet/less" lang="less">
@import "group";
</style>