vb
This commit is contained in:
90
miniprogram/src/utils/cart.ts
Normal file
90
miniprogram/src/utils/cart.ts
Normal file
@@ -0,0 +1,90 @@
|
||||
import Taro from '@tarojs/taro'
|
||||
|
||||
const CART_KEY = 'MARKET_CART'
|
||||
|
||||
export interface CartItem {
|
||||
id: number
|
||||
name: string
|
||||
price: number
|
||||
image: string
|
||||
quantity: number
|
||||
selected: boolean
|
||||
stock: number
|
||||
description: string
|
||||
}
|
||||
|
||||
export const getCart = (): CartItem[] => {
|
||||
return Taro.getStorageSync(CART_KEY) || []
|
||||
}
|
||||
|
||||
export const setCart = (cart: CartItem[]) => {
|
||||
Taro.setStorageSync(CART_KEY, cart)
|
||||
}
|
||||
|
||||
export const addToCart = (product: any, quantity: number = 1) => {
|
||||
const cart = getCart()
|
||||
const existing = cart.find(item => item.id === product.id)
|
||||
|
||||
if (existing) {
|
||||
existing.quantity += quantity
|
||||
if (existing.quantity > product.stock) existing.quantity = product.stock
|
||||
} else {
|
||||
cart.push({
|
||||
id: product.id,
|
||||
name: product.name,
|
||||
price: product.price,
|
||||
image: product.static_image_url || product.detail_image_url,
|
||||
quantity: quantity,
|
||||
selected: true,
|
||||
stock: product.stock,
|
||||
description: product.description
|
||||
})
|
||||
}
|
||||
|
||||
setCart(cart)
|
||||
Taro.showToast({ title: '已加入购物车', icon: 'success' })
|
||||
}
|
||||
|
||||
export const updateQuantity = (id: number, quantity: number) => {
|
||||
const cart = getCart()
|
||||
const item = cart.find(i => i.id === id)
|
||||
if (item) {
|
||||
item.quantity = quantity
|
||||
if (item.quantity > item.stock) item.quantity = item.stock
|
||||
if (item.quantity < 1) item.quantity = 1
|
||||
setCart(cart)
|
||||
}
|
||||
return cart
|
||||
}
|
||||
|
||||
export const removeItem = (id: number) => {
|
||||
const cart = getCart()
|
||||
const newCart = cart.filter(i => i.id !== id)
|
||||
setCart(newCart)
|
||||
return newCart
|
||||
}
|
||||
|
||||
export const toggleSelect = (id: number) => {
|
||||
const cart = getCart()
|
||||
const item = cart.find(i => i.id === id)
|
||||
if (item) {
|
||||
item.selected = !item.selected
|
||||
setCart(cart)
|
||||
}
|
||||
return cart
|
||||
}
|
||||
|
||||
export const toggleSelectAll = (selected: boolean) => {
|
||||
const cart = getCart()
|
||||
cart.forEach(item => item.selected = selected)
|
||||
setCart(cart)
|
||||
return cart
|
||||
}
|
||||
|
||||
export const getSelectedItems = () => {
|
||||
return getCart().filter(item => item.selected)
|
||||
}
|
||||
|
||||
export const getCartCount = () => {
|
||||
return getCart().reduce((sum, item) => sum + item.quantity, 0)
|
||||
}
|
||||
Reference in New Issue
Block a user