cart.ts 2.4 KB

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