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.
140 lines
3.6 KiB
140 lines
3.6 KiB
import api from '../../config/api'
|
|
import { funMixin } from '../../config/mixin'
|
|
|
|
export const commonMixin = {
|
|
name: 'spikeList',
|
|
mixins: [funMixin],
|
|
data() {
|
|
return {
|
|
productData: {
|
|
products: [],
|
|
},
|
|
count: [],
|
|
state: 0,
|
|
timer: null,
|
|
}
|
|
},
|
|
props: {
|
|
terminal: {
|
|
type: Number,
|
|
default: 4,
|
|
},
|
|
typeId: {
|
|
type: Number,
|
|
default: 1,
|
|
},
|
|
shopId: {
|
|
type: Number,
|
|
default: 0,
|
|
},
|
|
componentContent: {
|
|
type: Object,
|
|
},
|
|
},
|
|
watch: {
|
|
componentContent: {
|
|
handler(newVal, oldVal) {
|
|
this.getData()
|
|
},
|
|
deep: true,
|
|
},
|
|
},
|
|
created() {
|
|
this.getData()
|
|
},
|
|
methods: {
|
|
getData() {
|
|
const _ = this
|
|
if (_.componentContent.shopSeckillId) {
|
|
if (this.typeId === 1) {
|
|
const params = {
|
|
method: 'GET',
|
|
url: `${api.getPlatformSeckills}?ids=${_.componentContent.shopSeckillId}`,
|
|
}
|
|
this.sendReq(params, (res) => {
|
|
if (res.data.length > 0) {
|
|
_.productData = res.data[0]
|
|
_.productData.products.map(function (value) {
|
|
value.sliderVal = (
|
|
(value.stockNumber / value.total) *
|
|
100
|
|
).toFixed(2)
|
|
return value
|
|
})
|
|
// 只有进行中和未开始活动, 用倒计时
|
|
this.timer = setInterval(() => {
|
|
_.getTime(_.productData)
|
|
}, 1000)
|
|
}
|
|
})
|
|
}
|
|
if (this.typeId === 3) {
|
|
const params = {
|
|
method: 'GET',
|
|
url: `${api.getSeckills}?shopId=${_.shopId}&ids=${_.componentContent.shopSeckillId}`,
|
|
}
|
|
this.sendReq(params, (res) => {
|
|
if (res.data.length > 0) {
|
|
_.productData = res.data[0]
|
|
_.productData.products.map(function (value) {
|
|
value.sliderVal = (
|
|
(value.stockNumber / value.total) *
|
|
100
|
|
).toFixed(2)
|
|
return value
|
|
})
|
|
// 只有进行中和未开始活动, 用倒计时
|
|
if (_.productData.state !== 2) {
|
|
this.timer = setInterval(() => {
|
|
_.getTime(_.productData)
|
|
}, 1000)
|
|
}
|
|
} else {
|
|
_.productData = {
|
|
products: [],
|
|
}
|
|
}
|
|
})
|
|
}
|
|
} else {
|
|
_.productData = {
|
|
products: [],
|
|
}
|
|
}
|
|
},
|
|
getTime(info) {
|
|
const date = new Date().getTime()
|
|
let startTime = ''
|
|
let endTime = ''
|
|
if (this.typeId === 1) {
|
|
startTime = new Date(info.startTime.replace(/-/g, '/')).getTime()
|
|
endTime = new Date(info.endTime.replace(/-/g, '/')).getTime()
|
|
} else {
|
|
startTime = new Date(info.effectiveStart.replace(/-/g, '/')).getTime()
|
|
endTime = new Date(info.effectiveEnd.replace(/-/g, '/')).getTime()
|
|
}
|
|
if (date > endTime) {
|
|
this.state = 2
|
|
} else if (startTime > date) {
|
|
this.state = 0
|
|
this.countDown(startTime - date) // 未开始
|
|
} else {
|
|
this.state = 1
|
|
this.countDown(endTime - date) // 进行中
|
|
}
|
|
},
|
|
|
|
countDown(time) {
|
|
const fn = (v) => (v < 10 ? `0${v}` : v)
|
|
const t = parseInt(time / 1000)
|
|
const text = this.state == 0 ? '开始' : '结束'
|
|
const hour = parseInt(t / 3600)
|
|
const min = parseInt((t % 3600) / 60)
|
|
const s = t % 60
|
|
this.count = [text, fn(hour), fn(min), fn(s)]
|
|
},
|
|
},
|
|
beforeDestroy() {
|
|
clearInterval(this.timer)
|
|
},
|
|
}
|