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
| import { getCartList, updateCart, removeFromCart } from '@/api/cart'
const state = { cartList: [], selectedIds: [] }
const mutations = { SET_CART_LIST(state, list) { state.cartList = list }, UPDATE_CART_ITEM(state, { id, data }) { const index = state.cartList.findIndex(item => item.id === id) if (index > -1) { state.cartList[index] = { ...state.cartList[index], ...data } } }, REMOVE_CART_ITEM(state, id) { state.cartList = state.cartList.filter(item => item.id !== id) }, SET_SELECTED_IDS(state, ids) { state.selectedIds = ids } }
const actions = { async getCartList({ commit }) { try { const list = await getCartList() commit('SET_CART_LIST', list) return list } catch (err) { throw new Error('获取购物车列表失败') } }, async updateCartItem({ commit }, { id, data }) { try { await updateCart(id, data) commit('UPDATE_CART_ITEM', { id, data }) } catch (err) { throw new Error('更新购物车商品失败') } }, async removeCartItem({ commit }, id) { try { await removeFromCart(id) commit('REMOVE_CART_ITEM', id) } catch (err) { throw new Error('删除购物车商品失败') } } }
const getters = { cartCount: state => state.cartList.length, selectedCount: state => state.selectedIds.length, totalPrice: state => { return state.cartList .filter(item => state.selectedIds.includes(item.id)) .reduce((total, item) => total + item.price * item.quantity, 0) } }
export default { namespaced: true, state, mutations, actions, getters }
|