|
|
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) { 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;
|