|
|
import Toast from 'tdesign-miniprogram/toast/index';
|
|
|
|
|
|
const shortageImg =
|
|
|
'https://cdn-we-retail.ym.tencent.com/miniapp/cart/shortage.png';
|
|
|
|
|
|
Component({
|
|
|
isSpecsTap: false, // 标记本次点击事件是否因为点击specs触发(由于底层goods-card组件没有catch specs点击事件,只能在此处加状态来避免点击specs时触发跳转商品详情)
|
|
|
externalClasses: ['wr-class'],
|
|
|
properties: {
|
|
|
storeGoods: {
|
|
|
type: Array,
|
|
|
observer(storeGoods) {
|
|
|
for (const store of storeGoods) {
|
|
|
for (const activity of store.promotionGoodsList) {
|
|
|
for (const goods of activity.goodsPromotionList) {
|
|
|
goods.specs = goods.specInfo.map((item) => item.specValue); // 目前仅展示商品已选规格的值
|
|
|
}
|
|
|
}
|
|
|
for (const goods of store.shortageGoodsList) {
|
|
|
goods.specs = goods.specInfo.map((item) => item.specValue); // 目前仅展示商品已选规格的值
|
|
|
}
|
|
|
}
|
|
|
|
|
|
this.setData({ _storeGoods: storeGoods });
|
|
|
},
|
|
|
},
|
|
|
invalidGoodItems: {
|
|
|
type: Array,
|
|
|
observer(invalidGoodItems) {
|
|
|
invalidGoodItems.forEach((goods) => {
|
|
|
goods.specs = goods.specInfo.map((item) => item.specValue); // 目前仅展示商品已选规格的值
|
|
|
});
|
|
|
this.setData({ _invalidGoodItems: invalidGoodItems });
|
|
|
},
|
|
|
},
|
|
|
thumbWidth: { type: null },
|
|
|
thumbHeight: { type: null },
|
|
|
},
|
|
|
|
|
|
data: {
|
|
|
shortageImg,
|
|
|
isShowSpecs: false,
|
|
|
currentGoods: {},
|
|
|
isShowToggle: false,
|
|
|
_storeGoods: [],
|
|
|
_invalidGoodItems: [],
|
|
|
},
|
|
|
|
|
|
methods: {
|
|
|
// 删除商品
|
|
|
deleteGoods(e) {
|
|
|
const { goods } = e.currentTarget.dataset;
|
|
|
this.triggerEvent('delete', { goods });
|
|
|
},
|
|
|
|
|
|
// 清空失效商品
|
|
|
clearInvalidGoods() {
|
|
|
this.triggerEvent('clearinvalidgoods');
|
|
|
},
|
|
|
|
|
|
// 选中商品
|
|
|
selectGoods(e) {
|
|
|
const { goods } = e.currentTarget.dataset;
|
|
|
this.triggerEvent('selectgoods', {
|
|
|
goods,
|
|
|
isSelected: !goods.isSelected,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
changeQuantity(num, goods) {
|
|
|
this.triggerEvent('changequantity', {
|
|
|
goods,
|
|
|
quantity: num,
|
|
|
});
|
|
|
},
|
|
|
changeStepper(e) {
|
|
|
const { value } = e.detail;
|
|
|
const { goods } = e.currentTarget.dataset;
|
|
|
let num = value;
|
|
|
if (value > goods.stack) {
|
|
|
num = goods.stack;
|
|
|
}
|
|
|
this.changeQuantity(num, goods);
|
|
|
},
|
|
|
|
|
|
input(e) {
|
|
|
const { value } = e.detail;
|
|
|
const { goods } = e.currentTarget.dataset;
|
|
|
const num = value;
|
|
|
this.changeQuantity(num, goods);
|
|
|
},
|
|
|
|
|
|
overlimit(e) {
|
|
|
const text =
|
|
|
e.detail.type === 'minus'
|
|
|
? '该商品数量不能减少了哦'
|
|
|
: '同一商品最多购买999件';
|
|
|
Toast({
|
|
|
context: this,
|
|
|
selector: '#t-toast',
|
|
|
message: text,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 去凑单/再逛逛
|
|
|
gotoBuyMore(e) {
|
|
|
const { promotion, storeId = '' } = e.currentTarget.dataset;
|
|
|
this.triggerEvent('gocollect', { promotion, storeId });
|
|
|
},
|
|
|
|
|
|
// 选中门店
|
|
|
selectStore(e) {
|
|
|
const { storeIndex } = e.currentTarget.dataset;
|
|
|
const store = this.data.storeGoods[storeIndex];
|
|
|
const isSelected = !store.isSelected;
|
|
|
if (store.storeStockShortage && isSelected) {
|
|
|
Toast({
|
|
|
context: this,
|
|
|
selector: '#t-toast',
|
|
|
message: '部分商品库存不足',
|
|
|
});
|
|
|
return;
|
|
|
}
|
|
|
this.triggerEvent('selectstore', {
|
|
|
store,
|
|
|
isSelected,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 展开/收起切换
|
|
|
showToggle() {
|
|
|
this.setData({
|
|
|
isShowToggle: !this.data.isShowToggle,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
// 展示规格popup
|
|
|
specsTap(e) {
|
|
|
this.isSpecsTap = true;
|
|
|
const { goods } = e.currentTarget.dataset;
|
|
|
this.setData({
|
|
|
isShowSpecs: true,
|
|
|
currentGoods: goods,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
hideSpecsPopup() {
|
|
|
this.setData({
|
|
|
isShowSpecs: false,
|
|
|
});
|
|
|
},
|
|
|
|
|
|
goGoodsDetail(e) {
|
|
|
if (this.isSpecsTap) {
|
|
|
this.isSpecsTap = false;
|
|
|
return;
|
|
|
}
|
|
|
const { goods } = e.currentTarget.dataset;
|
|
|
this.triggerEvent('goodsclick', { goods });
|
|
|
},
|
|
|
|
|
|
gotoCoupons() {
|
|
|
wx.navigateTo({ url: '/pages/coupon/coupon-list/index' });
|
|
|
},
|
|
|
},
|
|
|
});
|