cartUtils.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. const NET = require('../../../utils/request')
  2. const API = require('../../../config/api')
  3. import { showLoading, hideLoading } from '@/utils/plugIn/globalLoading.js'
  4. /**
  5. * 根据选中的购物车数据获取价格和过滤后的用于结算购物车的post数据
  6. * @param dataList
  7. * @return {Promise<{shopList: *[], money: number}>}
  8. */
  9. export async function getPriceBySelect(dataList) {
  10. showLoading()
  11. const addCart = []
  12. // 遍历店铺,获取选中的sku组装数据
  13. for (let i = 0; i < dataList.length; i++) {
  14. const shopObj = {}
  15. const theCurrentShop = dataList[i]
  16. shopObj.shopId = theCurrentShop.shopId
  17. shopObj.skus = []
  18. for (let j = 0; j < theCurrentShop.skus.length; j++) {
  19. const theCurrentSku = dataList[i].skus[j]
  20. // 如果是选中的才往当前店铺塞
  21. if (theCurrentSku.selected) {
  22. const skusObj = {}
  23. skusObj.ifLogistics = theCurrentSku.ifLogistics
  24. skusObj.number = theCurrentSku.number
  25. skusObj.selected = theCurrentSku.selected
  26. skusObj.skuId = theCurrentSku.skuId
  27. shopObj.skus.push(skusObj)
  28. }
  29. }
  30. // 过滤掉sku为空的店铺
  31. if (shopObj.skus.length > 0) {
  32. addCart.push(shopObj)
  33. }
  34. }
  35. try {
  36. const postData = {
  37. type: 2,
  38. shops: addCart
  39. }
  40. const res = await NET.request(API.Settlement, postData, 'POST')
  41. const money = res.data.shops.reduce((previousValue, currentValue) => previousValue + currentValue.total, 0)
  42. return {
  43. money: money.toFixed(2),
  44. shopList: addCart
  45. }
  46. } finally {
  47. hideLoading()
  48. }
  49. }
  50. /**
  51. * 根据选中的购物车数据获取购物车数量
  52. * @param dataList
  53. * @return {Promise<{allNumber: number, isAllCheck: boolean}>}
  54. */
  55. export async function getCartNumberBySelect(dataList) {
  56. let allNumber = 0; let checkNumber = 0; let
  57. isAllCheck = true
  58. // 遍历店铺
  59. for (let i = 0; i < dataList.length; i++) {
  60. // 当前店铺
  61. const shopObj = dataList[i]
  62. // 遍历店铺内部的商品
  63. for (let j = 0; j < shopObj.skus.length; j++) {
  64. const good = dataList[i].skus[j]
  65. allNumber += good.number
  66. if (good.selected === 1) {
  67. checkNumber += +good.number
  68. } else {
  69. // 如果商品没有选中,但是又勾选了全选
  70. if (isAllCheck) {
  71. isAllCheck = false
  72. }
  73. }
  74. }
  75. }
  76. // 更新缓存
  77. uni.setStorageSync('allCartNum', allNumber)
  78. // 设置导航条
  79. if (allNumber > 0) {
  80. uni.setTabBarBadge({
  81. index: 2,
  82. text: allNumber.toString()
  83. })
  84. } else {
  85. uni.removeTabBarBadge({
  86. index: 2
  87. })
  88. }
  89. return {
  90. allNumber, checkNumber, isAllCheck
  91. }
  92. }
  93. /**
  94. * 默认购物车,供骨架屏使用
  95. * @type {[{skus: [{image: string, number: number, productId: number, price: number, productName: string, selected: number},{image: string, number: number, productId: number, price: number, productName: string, selected: number},{image: string, number: number, productId: number, price: number, productName: string, selected: number}], shopName: string, shopId: number, selected: number}]}
  96. */
  97. export const defaultCartList = [
  98. {
  99. shopId: 1,
  100. shopName: '12312312321312312',
  101. selected: 0,
  102. skus: [
  103. {
  104. productId: 1,
  105. productName: '',
  106. image: '',
  107. price: 0,
  108. number: 0,
  109. selected: 0
  110. },
  111. {
  112. productId: 2,
  113. productName: '',
  114. image: '',
  115. price: 0,
  116. number: 0,
  117. selected: 0
  118. },
  119. {
  120. productId: 3,
  121. productName: '',
  122. image: '',
  123. price: 0,
  124. number: 0,
  125. selected: 0
  126. }
  127. ]
  128. }
  129. ]