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.

183 lines
3.4 KiB

2 years ago
// 购物车模块
import http from '@/shopro/request/index'
const state = {
cartList: [], //购物车列表
checkCart: {}, //检测是否是购物车数据的对象
allSelected: false, // 全选检测
cartNum: 0, //购物车,涉及到刷新数据丢失,所以存了本地,
}
const getters = {
cartList: state => state.cartList,
checkCart: state => state.checkCart,
allSelected: state => state.allSelected,
cartNum: state => state.cartNum,
// 购物车数量和总价
totalCount: state => {
let totalNum = 0;
let totalPrice = 0;
state.cartList.filter(item => {
if (item.checked) {
totalNum += 1;
totalPrice += item.goods_num * (item.sku_price ? item.sku_price.price : 0);
}
})
return {
totalNum,
totalPrice
}
},
// 是否选择了商品
isSel: state => {
let isSel = false;
state.cartList.map(item => {
if (item.checked) {
isSel = true
}
})
return isSel
},
// 活动商品唯一选中可以结算
isActivityPay() {
let num = 0
let activityNum = 0
state.cartList.map(item => {
if (item.checked) {
num += 1
if (item.cart_type === 'activity') {
activityNum += 1
}
}
})
if ((num === 1 && activityNum === 1) || activityNum === 0) {
return true
}
return false
}
}
const mutations = {
// cart数据获取变动。
CART_LIST(state, payload) {
state.cartList = payload;
let cartListNumber = payload.length;
if (Number(cartListNumber)) {
uni.setTabBarBadge({
index: 2,
text: String(cartListNumber)
})
} else {
uni.removeTabBarBadge({
index: 2
})
}
state.cartNum = cartListNumber;
},
// 切换全选。
changeAllSellect(state) {
state.allSelected = !state.allSelected;
},
// 全选设置
getAllSellectCartList(state, flag) {
state.cartList.map(item => {
item.checked = flag
})
},
// 全选检测
checkCartList(state) {
let all = true;
state.cartList.map(item => {
if (!item.checked) {
all = false
}
})
state.allSelected = all;
},
// 是否购物车数据检测
getCheckCart(state) {
let obj = {};
state.cartList.map(item => {
obj[item.goods_id] = {
num: item.goods_num,
cartOrderId: item.id
};
});
state.checkCart = obj;
},
}
const actions = {
// 购物车数据(查)
getCartList({
commit
}) {
return new Promise((resolve, reject) => {
http('cart.index').then(res => {
if (res.code === 1) {
let cartData = res.data;
cartData.length && cartData.map(item => {
item.checked = true;
})
commit('CART_LIST', cartData);
commit('checkCartList');
commit('getCheckCart')
}
}).catch(e => {
reject(e)
})
})
},
// 添加到购物车(增)
addCartGoods({
dispatch
}, data) {
return new Promise((resolve, reject) => {
http('cart.add', {
goods_list: data.list,
from: data.from
}).then(res => {
res.code === 1 && dispatch('getCartList');
resolve(res)
}).catch(e => {
reject(e)
})
})
},
// 修改购物车商品数量(改)|| 删除购物车商品(删)
changeCartList({
commit,
dispatch
}, param) {
return new Promise((resolve, reject) => {
http('cart.edit', {
cart_list: param.ids,
value: param.goodsNum || null,
act: param.art
}).then(res => {
if (param.art === 'delete' && res.code === 1) {
dispatch('getCartList');
}
commit('checkCartList');
resolve(res)
}).catch(e => {
reject(e)
})
})
},
}
export default {
state,
mutations,
actions,
getters
}