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.
160 lines
4.2 KiB
160 lines
4.2 KiB
<template>
|
|
<view class="seckill-box" :style="{marginBottom: meta.margin_bottom + 'px',background: meta.background_color}" v-if="indexData && indexData.length">
|
|
<view class="title" data-src="/pages/store/seckill/seckill" @tap="_jumpImg">
|
|
<span>限时秒杀</span>
|
|
<span>
|
|
更多
|
|
<text class="iconfont icon-gengduo"></text>
|
|
</span>
|
|
</view>
|
|
<view v-for="(item, index) in indexData" :key="index" >
|
|
<view class="seckill-info" :data-id="item.associate.goods.id" @tap="_jumpToDetail">
|
|
<view class="left">
|
|
<image :src="item.image"></image>
|
|
</view>
|
|
<view class="right">
|
|
<view class="goods-name">
|
|
{{item.associate.goods.name}}
|
|
</view>
|
|
<view class="price-box">
|
|
<text>¥{{item.associate.seckill_price}}</text>
|
|
<text class="old">¥{{item.associate.goods.sell_price}}</text>
|
|
</view>
|
|
<view class="seckill-time">
|
|
<view>
|
|
<seckill :end="item.associate.ends_at" :starts="item.associate.starts_at" :server="server" mold="index" @starts="isStarts" @end="isEnd" :data-index="index" :data-idx="bigIndex"></seckill>
|
|
</view>
|
|
<view :style="'background: ' + config.mainColor" class="buy">
|
|
去抢购
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</view>
|
|
</template>
|
|
<script>
|
|
import seckill from "../seckill/seckill";
|
|
|
|
export default {
|
|
data() {
|
|
return {};
|
|
},
|
|
components: {
|
|
seckill
|
|
},
|
|
options: {
|
|
addGlobalClass: true
|
|
},
|
|
props: {
|
|
indexData: {
|
|
type: Array,
|
|
value: ''
|
|
},
|
|
config: {
|
|
type: null,
|
|
value: ''
|
|
},
|
|
server: {
|
|
type: String,
|
|
value: ''
|
|
},
|
|
bigIndex: {
|
|
type: Number,
|
|
value: ''
|
|
},
|
|
meta: {
|
|
type: Object,
|
|
value: ""
|
|
}
|
|
},
|
|
|
|
//组件的方法
|
|
methods: {
|
|
//
|
|
_jumpImg(e) {
|
|
var src = e.currentTarget.dataset.src;
|
|
if (!src || src == 'uto_miniprogram') return;
|
|
wx.navigateTo({
|
|
url: src
|
|
});
|
|
},
|
|
|
|
_jumpToDetail(e) {
|
|
var id = e.currentTarget.dataset.id;
|
|
wx.navigateTo({
|
|
url: `/pages/store/detail/detail?id=${id}`
|
|
});
|
|
},
|
|
|
|
// 秒杀结束
|
|
isEnd(e) {
|
|
var index = e.index;
|
|
var idx = e.idx;
|
|
var myEventDetail = {
|
|
index: index,
|
|
idx: idx
|
|
};
|
|
|
|
// this.setData({
|
|
// [`indexData[${index}].associate.seckill`]: null
|
|
// })
|
|
|
|
this.indexData[index]={associate:{seckill:null}};
|
|
|
|
this.$emit('endevent', myEventDetail);
|
|
},
|
|
|
|
// 秒杀开始
|
|
isStarts(e) {
|
|
var index = e.index;
|
|
var idx = e.idx;
|
|
var myEventDetail = {
|
|
index: index,
|
|
idx: idx
|
|
};
|
|
|
|
|
|
|
|
if(this.indexData[index]==undefined||
|
|
this.indexData[index].associate==undefined ||
|
|
this.indexData[index].associate.init_status==undefined ||
|
|
this.indexData[index].associate.init_status != 1){
|
|
// this.setData({
|
|
// [`indexData[${index}].associate.seckill.init_status`]:1
|
|
// })
|
|
this.indexData[index]={associate:{init_status:1}};
|
|
|
|
}
|
|
|
|
this.$emit('startevent', myEventDetail);
|
|
},
|
|
setData: function (obj) {
|
|
let that = this;
|
|
let keys = [];
|
|
let val, data;
|
|
Object.keys(obj).forEach(function (key) {
|
|
keys = key.split('.');
|
|
val = obj[key];
|
|
data = that.$data;
|
|
keys.forEach(function (key2, index) {
|
|
if (index + 1 == keys.length) {
|
|
that.$set(data, key2, val);
|
|
} else {
|
|
if (!data[key2]) {
|
|
that.$set(data, key2, {});
|
|
}
|
|
}
|
|
|
|
data = data[key2];
|
|
});
|
|
});
|
|
}
|
|
|
|
},
|
|
};
|
|
</script>
|
|
|
|
<style rel="stylesheet/less" lang="less">
|
|
@import "index-seckill";
|
|
</style>
|