多租户商城-商户小程序端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
4.1 KiB

2 years ago
  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. let addCart = []
  12. // 遍历店铺,获取选中的sku组装数据
  13. for (let i = 0; i < dataList.length; i++) {
  14. let 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. let 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, checkNumber = 0, isAllCheck = true
  57. // 遍历店铺
  58. for (let i = 0; i < dataList.length; i++) {
  59. // 当前店铺
  60. let shopObj = dataList[i]
  61. // 遍历店铺内部的商品
  62. for (let j = 0; j < shopObj.skus.length; j++) {
  63. let good = dataList[i].skus[j]
  64. allNumber += good.number
  65. if (good.selected === 1) {
  66. checkNumber += +good.number
  67. } else {
  68. // 如果商品没有选中,但是又勾选了全选
  69. if (isAllCheck) {
  70. isAllCheck = false
  71. }
  72. }
  73. }
  74. }
  75. // 更新缓存
  76. uni.setStorageSync('allCartNum', allNumber)
  77. // 设置导航条
  78. if (allNumber > 0) {
  79. uni.setTabBarBadge({
  80. index: 2,
  81. text: (allNumber).toString()
  82. })
  83. } else {
  84. uni.removeTabBarBadge({
  85. index: 2
  86. })
  87. }
  88. return {
  89. allNumber, checkNumber, isAllCheck
  90. }
  91. }
  92. /**
  93. * 默认购物车供骨架屏使用
  94. * @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}]}
  95. */
  96. export const defaultCartList = [
  97. {
  98. shopId: 1,
  99. shopName: '12312312321312312',
  100. selected: 0,
  101. skus: [
  102. {
  103. productId: 1,
  104. productName: '',
  105. image: '',
  106. price: 0,
  107. number: 0,
  108. selected: 0,
  109. },
  110. {
  111. productId: 2,
  112. productName: '',
  113. image: '',
  114. price: 0,
  115. number: 0,
  116. selected: 0,
  117. },
  118. {
  119. productId: 3,
  120. productName: '',
  121. image: '',
  122. price: 0,
  123. number: 0,
  124. selected: 0,
  125. }
  126. ]
  127. }
  128. ]