cart.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. import { defineStore } from 'pinia'
  2. import router from '@/router'
  3. interface cartState {
  4. cartList: Api.myShoppingCart[]
  5. /**
  6. * 是否正在加入购物车
  7. */
  8. isAddingCart: boolean
  9. /**
  10. * 星闪豹购物车全选按钮状态
  11. */
  12. isCartAllChecked: boolean
  13. }
  14. export const useSmqjhCartStore = defineStore('smqjh-cart', {
  15. state: (): cartState => ({
  16. cartList: [],
  17. isAddingCart: false,
  18. isCartAllChecked: false,
  19. }),
  20. getters: {
  21. /**
  22. * 计算星闪豹购物车商品总数量
  23. * @returns 购物车商品总数量
  24. */
  25. getTotalNum(): number {
  26. return this.cartList.map(it => it.skuList.map(its => its.num)).reduce((a, b) => a.concat(b), []).reduce((a, b) => a + b, 0)
  27. },
  28. },
  29. actions: {
  30. /**
  31. * 星闪豹加入购物车逻辑
  32. * @param skuId 商品skuId
  33. * @param num 商品数量
  34. * @param shopId 门店id
  35. * @param businessType 是否是加入购物车
  36. */
  37. async addCart(skuId: number, num: number, shopId: number, businessType: string) {
  38. return new Promise((resolve, reject) => {
  39. if (!skuId) {
  40. useGlobalToast().show({ msg: '请选择商品规格' })
  41. return reject(new Error('请选择商品规格'))
  42. }
  43. const { userInfo, token } = storeToRefs(useUserStore())
  44. if (!token.value) {
  45. useGlobalToast().show({ msg: '请先登录' })
  46. setTimeout(() => {
  47. router.replace({ name: 'smqjh-login' })
  48. }, 2000)
  49. return reject(new Error('请先登录'))
  50. }
  51. this.isAddingCart = true
  52. Apis.common.addShoppingCart({
  53. data: {
  54. businessType,
  55. skuId,
  56. num,
  57. shopId,
  58. channelId: Number(userInfo.value.channelId),
  59. },
  60. }).then((res) => {
  61. this.getCartList('XSB')
  62. resolve(res)
  63. }).finally(() => {
  64. this.isAddingCart = false
  65. })
  66. })
  67. },
  68. /**
  69. * 星闪豹获取购物车列表
  70. */
  71. async getCartList(businessType: string) {
  72. const { userInfo, token } = storeToRefs(useUserStore())
  73. if (!unref(token)) {
  74. return
  75. }
  76. const res = await Apis.common.myShoppingCart({
  77. data: {
  78. channelId: unref(userInfo).channelId,
  79. businessType,
  80. },
  81. })
  82. this.cartList = res.data.map((it) => {
  83. return {
  84. ...it,
  85. allGoods: [],
  86. }
  87. })
  88. this.isCartAllChecked = false
  89. },
  90. /**
  91. *
  92. * @param ids
  93. * @returns 计算选中商品总价
  94. */
  95. async getCartAddGoodsPrice(ids: string): Promise<Api.shoppingCartOrderConfirm> {
  96. return new Promise((resolve, reject) => {
  97. uni.showLoading({ mask: true })
  98. Apis.common.shoppingCartOrderConfirm({
  99. pathParams: {
  100. ids,
  101. },
  102. }).then((res) => {
  103. resolve(res.data)
  104. }).catch(err => reject(err)).finally(() => uni.hideLoading())
  105. })
  106. },
  107. },
  108. })