tanghaolin
2025-04-02 67d0fab0c684a911eb1c802d3063624d0e6ac02b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { defineStore } from 'pinia';
 
interface CartItem {
  addID: string;
  addTime: string;
  name: string;
  price: number;
  quantity: number;
  image: string;
  selected: boolean;
  companyName: string;
  model: string;
}
 
export const useCartStore = defineStore({
  id: 'cart',
  state: () => ({
    items: [] as CartItem[]
  }),
 
  getters: {
    // 获取购物车商品总数
    cartItemCount: (state) => state.items.length,
    
    // 获取购物车商品总价
    cartTotalPrice: (state) => {
      return state.items.reduce((total, item) => {
        return total + (item.price * item.quantity);
      }, 0);
    }
  },
 
  actions: {
    // 设置购物车商品
    setCartItems(items: CartItem[]) {
      this.items = items;
    },
 
    // 添加商品到购物车
    addToCart(item: Omit<CartItem, 'selected'>) {
      const existingItem = this.items.find(i => i.addID === item.addID);
      if (existingItem) {
        existingItem.quantity += item.quantity;
      } else {
        this.items.push({ ...item, selected: false });
      }
    },
 
    // 从购物车移除商品
    removeFromCart(addID: string) {
      const index = this.items.findIndex(item => item.addID === addID);
      if (index > -1) {
        this.items.splice(index, 1);
      }
    },
 
    // 清空购物车
    clearCart() {
      this.items = [];
    },
 
    // 更新商品数量
    updateItemQuantity(addID: string, quantity: number) {
      const item = this.items.find(item => item.addID === addID);
      if (item) {
        item.quantity = quantity;
      }
    },
 
    // 更新商品选中状态
    updateItemSelected(addID: string, selected: boolean) {
      const item = this.items.find(item => item.addID === addID);
      if (item) {
        item.selected = selected;
      }
    },
 
    // 全选/取消全选
    updateAllSelected(selected: boolean) {
      this.items.forEach(item => {
        item.selected = selected;
      });
    }
  },
 
  persist: true
});