| | |
| | | price: number; |
| | | quantity: number; |
| | | image: string; |
| | | selected?: boolean; |
| | | selected: boolean; |
| | | } |
| | | |
| | | export const useCartStore = defineStore({ |
| | | id: 'cart', |
| | | state: () => ({ |
| | | cartItems: [] as CartItem[] |
| | | items: [] as CartItem[] |
| | | }), |
| | | |
| | | getters: { |
| | | // 获取购物车商品总数 |
| | | cartItemCount: (state) => state.cartItems.length, |
| | | cartItemCount: (state) => state.items.length, |
| | | |
| | | // 获取购物车商品总价 |
| | | cartTotalPrice: (state) => { |
| | | return state.cartItems.reduce((total, item) => { |
| | | return state.items.reduce((total, item) => { |
| | | return total + (item.price * item.quantity); |
| | | }, 0); |
| | | } |
| | |
| | | actions: { |
| | | // 设置购物车商品 |
| | | setCartItems(items: CartItem[]) { |
| | | this.cartItems = items; |
| | | this.items = items; |
| | | }, |
| | | |
| | | // 添加商品到购物车 |
| | | addToCart(item: CartItem) { |
| | | // 检查是否已存在相同商品 |
| | | const existingItem = this.cartItems.find(cartItem => cartItem.addID === item.addID); |
| | | addToCart(item: Omit<CartItem, 'selected'>) { |
| | | const existingItem = this.items.find(i => i.addID === item.addID); |
| | | if (existingItem) { |
| | | // 如果存在,增加数量 |
| | | existingItem.quantity += item.quantity; |
| | | } else { |
| | | // 如果不存在,添加新商品 |
| | | this.cartItems.push(item); |
| | | this.items.push({ ...item, selected: false }); |
| | | } |
| | | }, |
| | | |
| | | // 从购物车移除商品 |
| | | removeFromCart(addID: string) { |
| | | this.cartItems = this.cartItems.filter(item => item.addID !== addID); |
| | | const index = this.items.findIndex(item => item.addID === addID); |
| | | if (index > -1) { |
| | | this.items.splice(index, 1); |
| | | } |
| | | }, |
| | | |
| | | // 清空购物车 |
| | | clearCart() { |
| | | this.cartItems = []; |
| | | this.items = []; |
| | | }, |
| | | |
| | | // 更新商品数量 |
| | | updateItemQuantity(addID: string, quantity: number) { |
| | | const item = this.cartItems.find(item => item.addID === addID); |
| | | const item = this.items.find(item => item.addID === addID); |
| | | if (item) { |
| | | item.quantity = quantity; |
| | | } |
| | |
| | | |
| | | // 更新商品选中状态 |
| | | updateItemSelected(addID: string, selected: boolean) { |
| | | const item = this.cartItems.find(item => item.addID === addID); |
| | | const item = this.items.find(item => item.addID === addID); |
| | | if (item) { |
| | | item.selected = selected; |
| | | } |
| | |
| | | |
| | | // 全选/取消全选 |
| | | updateAllSelected(selected: boolean) { |
| | | this.cartItems.forEach(item => { |
| | | this.items.forEach(item => { |
| | | item.selected = selected; |
| | | }); |
| | | } |