195 lines
6.2 KiB
JavaScript
Executable File
195 lines
6.2 KiB
JavaScript
Executable File
import {
|
|
getMemberCardList
|
|
} from '@/api/member'
|
|
import {mapGetters} from 'vuex';
|
|
|
|
export default {
|
|
data() {
|
|
return {
|
|
memberCardData: {
|
|
page: 0,
|
|
total: 1,
|
|
list: [],
|
|
index: 0,
|
|
currData: {},
|
|
selected: {}
|
|
},
|
|
itemNum: 1
|
|
}
|
|
},
|
|
computed: {
|
|
...mapGetters(['billingGoodsData'])
|
|
},
|
|
methods: {
|
|
open() {
|
|
this.$refs.memberCardPopup.open();
|
|
this.memberCardData.page = 0;
|
|
this.memberCardData.index = 0;
|
|
this.memberCardData.list = [];
|
|
this.memberCardData.currData = {};
|
|
this.memberCardData.selected = {};
|
|
this.getMemberCard()
|
|
},
|
|
// 获取会员项目
|
|
getMemberCard() {
|
|
if (this.memberCardData.page + 1 > this.memberCardData.total) return;
|
|
this.memberCardData.page += 1;
|
|
getMemberCardList({
|
|
status: 1,
|
|
page: this.memberCardData.page,
|
|
member_id: this.globalMemberInfo.member_id
|
|
}).then(res => {
|
|
if (res.code == 0) {
|
|
this.memberCardData.total = res.data.page_count || 1;
|
|
Object.values(this.billingGoodsData).forEach(data => {
|
|
if (data.card_id) {
|
|
res.data.list.forEach((card)=>{
|
|
if(card.card_id == data.card_id){
|
|
// 通用卡:选择商品,总数量发生变化
|
|
if (data.card_type == 'commoncard') {
|
|
card.total_use_num += data.num;
|
|
} else if (data.card_type == 'oncecard') {
|
|
// 限次卡:选择商品后,商品和总数量都要发生变化
|
|
card.total_use_num += data.num;
|
|
card.item_list.forEach((card_item)=>{
|
|
if(card_item.item_id == data.item_id){
|
|
card_item.use_num += data.num;
|
|
}
|
|
})
|
|
}
|
|
}
|
|
})
|
|
}
|
|
});
|
|
if (res.data.list.length) this.memberCardData.list = this.memberCardData.list.concat(res.data.list);
|
|
if (this.memberCardData.page == 1) {
|
|
// 默认展示第一个卡项信息
|
|
if (res.data.count) this.selectMemberCard(this.memberCardData.list[0], 0);
|
|
}
|
|
}
|
|
})
|
|
},
|
|
/**
|
|
* 选择会员套餐
|
|
* @param {Object} data
|
|
* @param {Object} index
|
|
*/
|
|
selectMemberCard(data, index) {
|
|
this.memberCardData.index = index;
|
|
this.memberCardData.currData = this.$util.deepClone(data);
|
|
this.memberCardData.selected = {};
|
|
},
|
|
/**
|
|
* 选择会员套餐商品项
|
|
* @param {Object} data
|
|
* @param {Object} index
|
|
*/
|
|
selectMemberCardItem(data, index) {
|
|
if (this.memberCardData.selected['item_' + data.item_id]) {
|
|
if (data.card_type == 'commoncard') {
|
|
this.memberCardData.currData.total_use_num -= this.memberCardData.selected['item_' + data.item_id].input_num;
|
|
}
|
|
delete this.memberCardData.selected['item_' + data.item_id];
|
|
} else {
|
|
if (!this.checkStatus(data)) return;
|
|
this.memberCardData.selected['item_' + data.item_id] = this.$util.deepClone(data);
|
|
this.memberCardData.selected['item_' + data.item_id].input_num = 1;
|
|
this.memberCardData.selected['item_' + data.item_id].index = index;
|
|
this.memberCardData.selected['item_' + data.item_id].card_name = this.memberCardData.currData.goods_name;
|
|
if (data.card_type == 'commoncard') {
|
|
this.memberCardData.currData.total_use_num += 1;
|
|
}
|
|
}
|
|
|
|
this.$forceUpdate();
|
|
},
|
|
/**
|
|
* 加入购物车
|
|
*/
|
|
selectGoods() {
|
|
if (!Object.keys(this.memberCardData.selected).length) {
|
|
this.$util.showToast({
|
|
title: '请选择服务/商品',
|
|
});
|
|
return;
|
|
}
|
|
|
|
let billingGoodsData = this.$util.deepClone(this.billingGoodsData);
|
|
let billingGoodsKeys = Object.keys(billingGoodsData);
|
|
Object.keys(this.memberCardData.selected).forEach((key) => {
|
|
|
|
let data = this.memberCardData.selected[key];
|
|
data.card_index = this.memberCardData.index;
|
|
this.memberCardData.list[this.memberCardData.index].total_use_num += data.input_num;
|
|
this.memberCardData.list[this.memberCardData.index].item_list[data.index].use_num += data.input_num;
|
|
this.memberCardData.currData.item_list[data.index].use_num += data.input_num;
|
|
//服务商品每个都是一个订单项,需要循环处理
|
|
if(data.goods_class == this.$util.goodsClassDict.service){
|
|
let addNum = 0;
|
|
Object.values(billingGoodsData).forEach((item)=>{
|
|
if(item.sku_id == data.sku_id){
|
|
addNum ++;
|
|
}
|
|
})
|
|
data.num = 1;
|
|
for(let num = 1;num <= data.input_num;num ++){
|
|
let skuKey = 'sku_' + data.sku_id + '_item_' + data.item_id + '_' + addNum;
|
|
billingGoodsData[skuKey] = this.$util.deepClone(data);
|
|
addNum ++;
|
|
}
|
|
}else{
|
|
data.num = data.input_num;
|
|
let skuKey = 'sku_' + data.sku_id + '_item_' + data.item_id;
|
|
if(billingGoodsData.hasOwnProperty(skuKey)){
|
|
data.num += billingGoodsData[skuKey].num;
|
|
}
|
|
billingGoodsData[skuKey] = this.$util.deepClone(data);
|
|
}
|
|
});
|
|
|
|
this.$store.commit('billing/setGoodsData', billingGoodsData);
|
|
|
|
this.memberCardData.selected = {};
|
|
},
|
|
/**
|
|
* 数量减
|
|
* @param {Object} data
|
|
*/
|
|
itemDec(data) {
|
|
let currData = this.memberCardData.currData;
|
|
if (this.memberCardData.selected['item_' + data.item_id].input_num > 1) {
|
|
this.memberCardData.selected['item_' + data.item_id].input_num -= 1;
|
|
if (data.card_type == 'commoncard') {
|
|
currData.total_use_num -= 1;
|
|
}
|
|
this.$forceUpdate();
|
|
}
|
|
},
|
|
/**
|
|
* 数量加
|
|
* @param {Object} data
|
|
*/
|
|
itemInc(data) {
|
|
let currData = this.memberCardData.currData;
|
|
if (data.card_type == 'commoncard') {
|
|
if ((currData.total_num - currData.total_use_num - 1) < 0) return;
|
|
} else if (data.card_type == 'oncecard') {
|
|
if ((data.num - data.use_num - this.memberCardData.selected['item_' + data.item_id].input_num - 1) < 0) return;
|
|
}
|
|
if (data.card_type == 'commoncard') {
|
|
currData.total_use_num += 1;
|
|
}
|
|
this.memberCardData.selected['item_' + data.item_id].input_num += 1;
|
|
this.$forceUpdate();
|
|
},
|
|
checkStatus(data) {
|
|
let currData = this.memberCardData.currData;
|
|
if (data.card_type == 'commoncard') {
|
|
return currData.total_num > currData.total_use_num;
|
|
} else if (data.card_type == 'oncecard') {
|
|
return data.num > data.use_num;
|
|
}
|
|
return true;
|
|
}
|
|
}
|
|
} |