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.
		
		
		
		
		
			
		
			
				
					
					
						
							112 lines
						
					
					
						
							2.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							112 lines
						
					
					
						
							2.6 KiB
						
					
					
				
								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;
							 |