123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- import { productService } from '@/services/index.js'
- import { msg as showMsg } from '@/common/util.js'
- import { navigateTo } from '@/common/utilsTools.js'
- // 计算价格
- function totalShopPeice(goodsList) {
- return goodsList.map((item, index) => {
- const priceObj = item.productList.reduce((price, pros, i) => {
- // 处理阶梯价
- if (pros.activeStatus == 1) {
- pros.ladderList.forEach((item, index) => {
- if (pros.productCount >= item.buyNum) pros.price = item.buyPrice
- })
- } else {
- pros.price = pros.price
- }
- // 计算每个商品下商品的价格
- let _price = pros.price * pros.productCount
- price.totalOriginalPrice += _price
- if (pros.promotion && pros.promotion.type != 2 && pros.promotion.mode == 2) {
- if (_price >= pros.promotion.touchPrice) {
- _price = _price - pros.promotion.reducedPrice
- price.reducedPrice += pros.promotion.reducedPrice
- }
- price.totalPrice += _price
- } else {
- price.reducedPrice = 0
- price.totalPrice += pros.price * pros.productCount
- }
- return price
- }, {
- totalPrice: 0,
- reducedPrice: 0,
- totalOriginalPrice: 0
- })
- item.totalPrice = priceObj.totalPrice
- item.reducedPrice = priceObj.reducedPrice
- item.totalOriginalPrice = priceObj.totalOriginalPrice
- return item
- })
- }
- const state = {
- isEmpty: true,
- goodsList: [], //购物车的商品
- failureList: [], //失效商品列表
- cartIds: [], // 已勾选商品cartId列表
- kindCount: 0,
- }
- const mutations = {
- // 设置购物车商品数量
- setKindCount(state, count) {
- state.kindCount = count
- },
- // 设置购物车有效商品
- setGoodsList(state, list) {
- state.goodsList = list
- },
- // 设置购物车失效商品
- setFailureList(state, list) {
- state.failureList = list
- },
- // 设置购物车是否为空
- setEmptyType(state, flag) {
- state.isEmpty = flag
- },
- saveCartIds(state, ids) {
- state.cartIds = ids
- },
- // 勾选/不勾选 失效商品
- selectFailure(state, { productId, checked }) {
- state.failureList.forEach(prod => {
- if (prod.productId === productId) prod.productsChecked = checked
- })
- },
- // 勾选/取消勾选所有失效商品
- selectAllFailure(state, checked) {
- state.failureList.forEach(prod => {
- prod.productsChecked = checked
- })
- },
- // 重选商品
- resetSelectProducts(state, cartIds = []) {
- state.goodsList.forEach((shop) => {
- shop.productList.forEach(prod => {
- if (cartIds.includes(prod.cartId)) prod.productsChecked = true
- })
- shop.checked = shop.productList.every((prod) => prod.productsChecked === true)
- })
- },
- // 勾选商品
- selectProduct(state, { shopId, productId, checked }) {
- state.goodsList.forEach((shop) => {
- if (shop.shopId !== shopId) return
- shop.productList.forEach(prod => {
- if (prod.productId !== productId) return
- prod.productsChecked = checked
- })
- shop.checked = shop.productList.every((prod) => prod.productsChecked === true)
- })
- },
- // 全选/全不选 供应商下所有商品
- selectAllShopProduct(state, { shopId, checked }) {
- state.goodsList.forEach((shop) => {
- if (shop.shopId !== shopId) return
- shop.checked = checked
- shop.productList.forEach(prod => {
- prod.productsChecked = checked
- })
- })
- },
- // 全选/全不选 部商品
- selectAllProduct(state, checked) {
- state.goodsList.forEach((shop) => {
- shop.checked = checked
- shop.productList.forEach(prod => {
- prod.productsChecked = checked
- })
- })
- },
- // 设置购物车商品数量角标
- setTabBarBadge(state, num) {
- if (num >= 100) {
- uni.setTabBarBadge({
- index: 1,
- text: '99+'
- })
- } else if (num > 0) {
- uni.setTabBarBadge({
- index: 1,
- text: String(num)
- })
- } else {
- uni.removeTabBarBadge({
- index: 1,
- })
- }
- },
- }
- const actions = {
- // 初始化购物车
- initCart({ rootGetters, commit, state }) {
- return productService.QueryShoppingCartList({ userId: rootGetters.userId })
- .then(response => {
- let data = response.data
- commit('setTabBarBadge', data.cartQuantity)
- commit('setKindCount', data.cartQuantity)
- if (data.shopList.length > 0 || data.products.length > 0) {
- commit('setEmptyType', false)
- } else {
- commit('setEmptyType', true)
- }
- if (data.shopList && data.shopList.length > 0) {
- commit('setGoodsList', totalShopPeice(data.shopList))
- commit('resetSelectProducts', state.cartIds) // 勾选已选商品
- } else {
- commit('setGoodsList', [])
- }
- if (data.products && data.products.length > 0) {
- commit('setFailureList', data.products)
- } else {
- commit('setFailureList', [])
- }
- })
- .catch(error => {
- showMsg(error.msg, 2000)
- })
- },
- // 获取购物车商品数量
- getCartNumber({ commit, rootGetters }) {
- productService.QueryShoppingQuantity({ userId: rootGetters.userId })
- .then(response => {
- commit('setTabBarBadge', response.data)
- commit('setKindCount', response.data)
- })
- .catch(error => {
- console.log('查询购物车数量错误信息', error)
- })
- },
- // 添加购物车
- addToCart({ dispatch, rootGetters }, { productId, productCount = 1 }) {
- if (!rootGetters.hasLogin) return navigateTo('/pages/login/login')
- productService.shoppingAddCart({
- productId,
- userId: rootGetters.userId,
- productCount,
- heUserId: 0
- }).then(response => {
- showMsg('加入购物车成功', 1500, true, 'success')
- dispatch('getCartNumber')
- }).catch(error => {
- showMsg(error.msg, 2000)
- })
- },
- // 从购物车移除
- removeFromCart({ dispatch, state }, cartIds = []) {
- // 从哪里获取cartIds
- const removeCartIds = cartIds.length > 0 ? cartIds : state.cartIds
- return productService.ShoppingCartDelete({
- cartIds: removeCartIds.join(',')
- }).then(response => {
- dispatch('initCart')
- showMsg('删除成功', 2000)
- }).catch(error => {
- showMsg(error.msg, 2000)
- })
- },
- // 删除失效商品
- removeFailureFromCart({ dispatch, state }) {
- const cartIds = state.failureList.reduce((cartIds, prod) => {
- cartIds.push(prod.cartId)
- return cartIds
- }, [])
- return dispatch('removeFromCart', cartIds)
- },
- // 加减购物车商品更新到后台
- updateShoppogCount({ dispatch, state }, { cartId, productCount }) {
- productService.ShoppingCartUpdate({
- cartId,
- productCount
- }).finally(() => {
- dispatch('initCart')
- })
- }
- }
- export default {
- namespaced: true,
- state,
- mutations,
- actions
- }
|