目的:登录后需要把把本地购物车合并,且清空本地购物车。

大致步骤:
落地代码:
src/api/cart.js/*** 合并本地购物车* @param {Array
src/store/module/cart.js // 设置购物车列表setCartList (state, list) {state.list = list}
src/store/module/cart.js// 购物车状态
import { mergeCart } from '@/api/cart'
// 合并本地购物车async mergeLocalCart (ctx) {// 存储token后调用合并API接口函数进行购物合并const cartList = ctx.getters.validList.map(({ skuId, selected, count }) => {return { skuId, selected, count }})await mergeLocalCart(cartList)// 合并成功将本地购物车删除ctx.commit('setCartList', [])},
login/components/login-form.vue // 合并购物车操作store.dispatch('cart/mergeLocalCart').then(() => {// 2. 提示Message({ type: 'success', text: '登录成功' })// 3. 跳转router.push(route.query.redirectUrl || '/')})
login/components/login-bind.vue
// 合并购物车操作store.dispatch('cart/mergeLocalCart').then(() => {// 2. 提示Message({ type: 'success', text: '绑定成功' })// 3. 跳转router.push(store.state.user.redirectUrl || '/')})
login/components/login-path.vue
// 合并购物车操作store.dispatch('cart/mergeLocalCart').then(() => {// 2. 提示Message({ type: 'success', text: '完善信息成功' })// 3. 跳转router.push(store.state.user.redirectUrl || '/')})
login/callback.vue
store.dispatch('cart/mergeLocalCart').then(() => {// 2. 跳转到来源页或者首页router.push(store.state.user.redirectUrl)// 3. 成功提示Message({ type: 'success', text: 'QQ登录成功' })})
目标:实现登陆后获取购物车商品列表。
大致步骤:
落地代码:
src/api/cart.js/*** 获取登录后的购物车列表* @returns Promise*/
export const findCartList = () => {return request('/member/cart', 'get')
}
src/store/module/cart.js // 获取购物车列表findCartList (ctx) {return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {
+ // 登录 TODO
+ findCartList().then(data => {
+ ctx.commit('setCartList', data.result)
+ resolve()
+ })}
src/components/app-navbar.vue // 退出登录// 1. 清空本地存储信息和vuex的用户信息// 2. 跳转登录const router = useRouter()const logout = () => {store.commit('user/setUser', {})// 清空购物车
+ store.commit('cart/setCartList', [])router.push('/login')}
目标:实现登陆后加入购物车。
大致步骤:
落地代码:
src/api/cart.js/*** 加入购物车* @param {String} skuId - 商品SKUID* @param {Integer} count - 商品数量* @returns Promise*/
export const insertCart = ({ skuId, count }) => {return request('/member/cart', 'post', { skuId, count })
}
src/store/module/cart.js // 加入购物车insertCart (ctx, goods) {// ctx.state 当前模块状态 ctx.rootState 根状态对象return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {
+ // 登录 TODO
+ insertCart(goods).then(() => {
+ return findCartList()
+ }).then((data) => {
+ ctx.commit('setCartList', data.result)
+ resolve()
+ })}
目标:实现登陆后删除购物车商品操作(批量删除,清空无效)
大致步骤:
落地代码:
src/api/cart.js/*** 删除商品(支持批量删除)* @param {Array} ids - skuId集合* @returns Promise*/
export const deleteCart = (ids) => {return request('/member/cart', 'delete', {ids})
}
src/store/module/cart.js // 删除购物车商品deleteCart (ctx, skuId) {return new Promise((resolve, reject) => {if (ctx.rootState.user.profile.token) {
+ // 登录 TODO
+ deleteCart([skuId]).then(() => {
+ return findCartList()
+ }).then((data) => {
+ ctx.commit('setCartList', data.result)
+ resolve()
+ })}