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

238 lines
10 KiB

<template>
<view class="marketing-time-box" :class="mold == 'index' ? 'index' : ''">
<view class="seckill-item" :style="'color: ' + config.countColor" 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">距离{{typename}}结束还剩余</view>
<view class="tiem"><span class="num-item" :style="'background: ' + config.mainColor"> <p class="zero" v-if="endTime.hour < 10">0</p>{{endTime.hour}}</span> 时 <span
class="num-item" :style="'background: ' + config.mainColor"><p class="zero" v-if="endTime.minute < 10">0</p>{{endTime.minute}}</span> 分 <span
class="num-item" :style="'background: ' + config.mainColor"><p class="zero" v-if="endTime.second < 10">0</p>{{endTime.second}}</span> 秒
</view>
</view>
</view>
<view class="seckill-item" :style="'color: ' + config.countColor" v-else>
<view v-if="type == 0">
<!--<view class="no-starts">
未开始
</view>-->
<view class="time-text">
{{message}}
</view>
</view>
<view class="time-out" :style="'color: ' + config.countColor" v-if="type == 1">
<!--<i class="iconfont icon-shijian"></i>-->
<view class="text">距离{{typename}}开始还剩余</view>
<view class="tiem"><span class="num-item" :style="'background: ' + config.mainColor"> <p class="zero" v-if="startsTime.hour < 10">0</p>{{startsTime.hour}}</span> 时
<span class="num-item" :style="'background: ' + config.mainColor"> <p class="zero" v-if="startsTime.minute < 10">0</p>{{startsTime.minute}}</span> 分 <span
class="num-item" :style="'background: ' + config.mainColor"> <p class="zero" v-if="startsTime.second < 10">0</p>{{startsTime.second}}</span> 秒
</view>
</view>
</view>
</view>
</template>
<script>
// import { config, getUrl, weapp, this.$cookieStorage, connect, bindActionCreators, store, actions, sandBox } from '../../lib/myapp.js';
export default {
data() {
return {
message: '',
endmessage: '',
active: false,
type: 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
},
config: '',
serverTime: ''
};
},
options: {
addGlobalClass: true
},
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'
},
typename: {
type: String,
value: '秒杀'
}
},
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
});
clearInterval(this.endTime.interval); // 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 {
var month = arr[1] < 10 ? '0' + arr[1] : arr[1],
day = arr[2] < 10 ? '0' + arr[2] : arr[2],
time = arr[3] < 10 ? '0' + arr[3] : arr[3],
minute = arr[4] < 10 ? '0' + arr[4] : arr[4];
this.endmessage = `${month} 月 ${day} 日,${time} : ${minute} 结束`;
//console.log('这个是什么',this.endmessage);
}
},
// 活动未开始的倒计时
countStartsTime() {
var d = 86400000,
h = 3600000,
n = 60000,
sta = this.starts,
server = this.server,
arr = String(sta).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 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.type = 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 {
var month = arr[1] < 10 ? '0' + arr[1] : arr[1],
day = arr[2] < 10 ? '0' + arr[2] : arr[2],
time = arr[3] < 10 ? '0' + arr[3] : arr[3],
minute = arr[4] < 10 ? '0' + arr[4] : arr[4];
this.message = `${month} 月 ${day} 日,${time} : ${minute} 开始`
}
}
},
mounted() {
// 第三方平台配置颜色
var gbConfig = this.$cookieStorage.get('globalConfig') || '';
this.config = gbConfig;
var interval = setInterval(() => {
this.countStartsTime();
}, 1000);
this.startsTime.interval = interval;
}
};
</script>
<style rel="stylesheet/less" lang="less">
@import "seckill";
</style>