目的:根据本地存储的商品获取最新的库存价格和有效状态。
大致步骤:
落的代码:
API src/api/cart.js
import request from '@/utils/request'/*** 获取新的商品信息* @param {String} skuId - 商品SKUID* @returns Promise*/
export const getNewCartGoods = (skuId) => {return request(`/goods/stock/${skuId}`, 'get')
}
定义修改购物车商品信息的mutations src/store/module/cart.js// 修改购物车商品updateCart (state, goods) {// goods中字段有可能不完整,goods有的信息才去修改。// 1. goods中必需又skuId,才能找到对应的商品信息const updateGoods = state.list.find(item => item.skuId === goods.skuId)for (const key in goods) {if (goods[key] !== null && goods[key] !== undefined && goods[key] !== '') {updateGoods[key] = goods[key]}}}
src/store/module/cart.js
// 获取购物车列表findCartList (ctx) {return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {// 登录 TODO} else {// 本地// Promise.all() 可以并列发送多个请求,等所有请求成功,调用then// Promise.race() 可以并列发送多个请求,等最快的请求成功,调用then// 传参事promise数组const promiseArr = ctx.state.list.map(item => {// 返回接口函数的调用return getNewCartGoods(item.skuId)})Promise.all(promiseArr).then(dataArr => {dataArr.forEach((data, i) => {ctx.commit('updateCart', { skuId: ctx.state.list[i].skuId, ...data.result })})resolve()}).catch(e => {reject(e)})}})},
src/components/app-header-cart.vue
setup () {const store = useStore()store.dispatch('cart/findCartList')}
目的:完成头部购物车删除操作,支持未登录状态。
大致步骤:
落的代码:
mutations: {// ... 省略// 删除购物车商品deleteCart (state, skuId) {const index = state.list.findIndex(item => item.skuId === skuId)state.list.splice(index, 1)}},
actions: {// ... 省略// 删除购物车商品deleteCart (ctx, skuId) {return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {// 登录 TODO} else {// 本地ctx.commit('deleteCart', skuId)resolve()}})},
src/components/app-header-cart.vue
+ 购物车无商品不显示弹出层,并且不是在购物车页面
+
+ 绑定点击事件传入skuId
+
setup () {// 删除const deleteCart = (skuId) => {store.dispatch('cart/deleteCart', skuId).then(() => {Message({ type: 'success', text: '删除成功' })}).catch(e => {Message({ type: 'error', text: '删除失败' })})}return { deleteCart }}
06-购物车页面-基础布局
目的:完成购物车组件基础布局和路由配置与跳转链接。

大致步骤:
- 完成头部组件,购物车图标,购物车结算按钮,点击跳转购物车路由。商品点击跳转详情的操作。
- 配置购物车路由和组件,完成基础布局。
落的代码:
- 跳转功能
src/components/app-header-cart.vue
+ {{$store.getters['cart/validTotal']}}
+
去购物车结算
- 组件与路由
src/views/cart/index.vue
上一篇:Vue项目中引入高德地图步骤详解
相关内容