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