122 lines
3.0 KiB
JavaScript
122 lines
3.0 KiB
JavaScript
import { defineStore } from 'pinia';
|
||
import CartApi from '@/sheep/api/trade/cart';
|
||
|
||
const cart = defineStore({
|
||
id: 'cart',
|
||
state: () => ({
|
||
list: [], // 购物车列表(invalidList + validList)
|
||
selectedIds: [], // 已选列表
|
||
isAllSelected: false, // 是否全选
|
||
totalPriceSelected: 0, // 选中项总金额
|
||
newList: [], // 除去已下架的购物车列表(validList)
|
||
editMode: false, // 是否是编辑模式
|
||
}),
|
||
actions: {
|
||
// 获取购物车列表
|
||
async getList() {
|
||
const { data, code } = await CartApi.getCartList();
|
||
if (code === 0) {
|
||
this.list = [...data.validList, ...data.invalidList];
|
||
this.newList = data.validList;
|
||
|
||
// 计算各种关联属性
|
||
this.selectedIds = [];
|
||
this.isAllSelected = true;
|
||
this.totalPriceSelected = 0;
|
||
(this.editMode ? this.list : this.newList).forEach((item) => {
|
||
if (item.selected) {
|
||
this.selectedIds.push(item.id);
|
||
this.totalPriceSelected += item.count * item.sku?.price;
|
||
} else {
|
||
this.isAllSelected = false;
|
||
}
|
||
});
|
||
}
|
||
},
|
||
|
||
onChangeEditMode(flag) {
|
||
this.editMode = flag;
|
||
this.selectedIds = [];
|
||
this.getList();
|
||
},
|
||
|
||
// 添加购物车
|
||
async add(goodsInfo) {
|
||
// 添加购物项
|
||
const { code } = await CartApi.addCart({
|
||
skuId: goodsInfo.id,
|
||
count: goodsInfo.goods_num,
|
||
});
|
||
// 刷新购物车列表
|
||
if (code === 0) {
|
||
await this.getList();
|
||
}
|
||
},
|
||
|
||
// 更新购物车
|
||
async update(goodsInfo) {
|
||
const { code } = await CartApi.updateCartCount({
|
||
id: goodsInfo.goods_id,
|
||
count: goodsInfo.goods_num,
|
||
});
|
||
if (code === 0) {
|
||
await this.getList();
|
||
}
|
||
},
|
||
|
||
// 移除购物车
|
||
async delete(ids) {
|
||
let idsTemp = '';
|
||
if (Array.isArray(ids)) {
|
||
idsTemp = ids.join(',');
|
||
} else {
|
||
idsTemp = ids;
|
||
}
|
||
const { code } = await CartApi.deleteCart(idsTemp);
|
||
if (code === 0) {
|
||
await this.getList();
|
||
}
|
||
},
|
||
|
||
// 单选购物车商品
|
||
async selectSingle(goodsId) {
|
||
const { code } = await CartApi.updateCartSelected({
|
||
ids: [goodsId],
|
||
selected: !this.selectedIds.includes(goodsId), // 取反
|
||
});
|
||
if (code === 0) {
|
||
await this.getList();
|
||
}
|
||
},
|
||
|
||
// 全选购物车商品
|
||
async selectAll(flag) {
|
||
const { code } = await CartApi.updateCartSelected({
|
||
ids: this.list.map((item) => item.id),
|
||
selected: flag,
|
||
});
|
||
if (code === 0) {
|
||
await this.getList();
|
||
}
|
||
},
|
||
|
||
// 清空购物车。注意,仅用于用户退出时,重置数据
|
||
emptyList() {
|
||
this.list = [];
|
||
this.selectedIds = [];
|
||
this.isAllSelected = true;
|
||
this.totalPriceSelected = 0;
|
||
},
|
||
},
|
||
persist: {
|
||
enabled: true,
|
||
strategies: [
|
||
{
|
||
key: 'cart-store',
|
||
},
|
||
],
|
||
},
|
||
});
|
||
|
||
export default cart;
|