107 lines
2.5 KiB
JavaScript
107 lines
2.5 KiB
JavaScript
import { defineStore } from 'pinia';
|
|
import CartApi from '@/sheep/api/trade/cart';
|
|
|
|
const cart = defineStore({
|
|
id: 'cart',
|
|
state: () => ({
|
|
list: [], // 购物车列表
|
|
selectedIds: [], // 已选列表
|
|
isAllSelected: false, // 是否全选
|
|
totalPriceSelected: 0, // 选中项总金额
|
|
}),
|
|
actions: {
|
|
// 获取购物车列表
|
|
async getList() {
|
|
const { data, code } = await CartApi.getCartList();
|
|
if (code === 0) {
|
|
this.list = data.validList;
|
|
|
|
// 计算各种关联属性
|
|
this.selectedIds = [];
|
|
this.isAllSelected = true;
|
|
this.totalPriceSelected = 0;
|
|
this.list.forEach((item) => {
|
|
if (item.selected) {
|
|
this.selectedIds.push(item.id);
|
|
this.totalPriceSelected += item.count * item.sku.price;
|
|
} else {
|
|
this.isAllSelected = false;
|
|
}
|
|
});
|
|
}
|
|
},
|
|
|
|
// 添加购物车
|
|
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) {
|
|
const { code } = await CartApi.deleteCart(ids.join(','));
|
|
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;
|