巴青农资商城

orderAction.js 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. import { payOrder, cancelPay, confirmReceive } from '@/api/order'
  2. import { useActionGuard } from '@/utils/actionGuard'
  3. const payModalGuard = useActionGuard()
  4. const confirmReceiveGuard = useActionGuard()
  5. import { ORDER_ACTION } from '@/constants/order'
  6. import { goGoodsDetail } from '@/utils/goodsDetail'
  7. import { goReviewEdit, goReviewView, goReviewList, goAftersaleSubmit } from '@/utils/orderNav'
  8. import { PAGE_ORDER_REVIEW_LIST } from '@/utils/pageRoute'
  9. /**
  10. * 执行订单操作按钮
  11. * @param {string} code 操作枚举
  12. * @param {object} ctx { orderId, firstItem, items, onRefresh }
  13. */
  14. export function runOrderAction(code, ctx = {}) {
  15. const orderId = ctx.orderId
  16. switch (code) {
  17. case ORDER_ACTION.PAY:
  18. return ctx.onPay?.(orderId) ?? Promise.resolve()
  19. case ORDER_ACTION.CONFIRM_RECEIVE:
  20. return doConfirmReceive(orderId, ctx.onRefresh)
  21. case ORDER_ACTION.REVIEW:
  22. goReviewEdit(orderId, ctx.orderItemId)
  23. return Promise.resolve()
  24. case ORDER_ACTION.VIEW_REVIEW:
  25. if (ctx.orderItemId) {
  26. goReviewView(orderId, ctx.orderItemId)
  27. } else {
  28. uni.navigateTo({ url: `${PAGE_ORDER_REVIEW_LIST}?tab=DONE&orderId=${orderId}` })
  29. }
  30. return Promise.resolve()
  31. case ORDER_ACTION.AFTERSALE:
  32. return openAftersalePicker(ctx)
  33. case ORDER_ACTION.BUY_AGAIN:
  34. return doBuyAgain(ctx)
  35. default:
  36. return Promise.resolve()
  37. }
  38. }
  39. function doBuyAgain(ctx) {
  40. const goodsId =
  41. ctx.firstItem?.goodsId ||
  42. (ctx.items && ctx.items[0] && ctx.items[0].goodsId)
  43. if (!goodsId) {
  44. uni.showToast({ title: '商品信息缺失', icon: 'none' })
  45. return Promise.resolve()
  46. }
  47. goGoodsDetail(goodsId)
  48. return Promise.resolve()
  49. }
  50. function openAftersalePicker(ctx) {
  51. if (!ctx.orderId) {
  52. uni.showToast({ title: '订单信息缺失', icon: 'none' })
  53. return Promise.resolve()
  54. }
  55. goAftersaleSubmit(ctx.orderId)
  56. return Promise.resolve()
  57. }
  58. function doConfirmReceive(orderId, onRefresh) {
  59. return new Promise((resolve) => {
  60. uni.showModal({
  61. title: '确认收货',
  62. content: '请确认您已收到商品',
  63. success: (res) => {
  64. if (!res.confirm) {
  65. resolve()
  66. return
  67. }
  68. confirmReceiveGuard.run(async () => {
  69. try {
  70. await confirmReceive(orderId)
  71. uni.showToast({ title: '已确认收货', icon: 'success' })
  72. if (typeof onRefresh === 'function') {
  73. await onRefresh()
  74. }
  75. uni.showModal({
  76. title: '提示',
  77. content: '交易成功,是否去评价?',
  78. confirmText: '去评价',
  79. cancelText: '稍后',
  80. success: (r) => {
  81. if (r.confirm) {
  82. goReviewList('PENDING')
  83. }
  84. }
  85. })
  86. } catch (e) {
  87. // request 已 Toast
  88. }
  89. resolve()
  90. })
  91. }
  92. })
  93. })
  94. }
  95. /** Mock 支付弹窗流程(与确认订单一致) */
  96. export function openPayModal(orderId, orderNo, payAmountText) {
  97. return new Promise((resolve) => {
  98. uni.showModal({
  99. title: '微信支付',
  100. content: `订单号:${orderNo || '—'}\n应付金额:¥${payAmountText || '—'}`,
  101. confirmText: '确认支付',
  102. cancelText: '取消支付',
  103. success: (res) => {
  104. payModalGuard.run(async () => {
  105. try {
  106. if (res.confirm) {
  107. await payOrder(orderId)
  108. uni.showToast({ title: '支付成功', icon: 'success' })
  109. resolve({ status: 'success' })
  110. return
  111. }
  112. await cancelPay(orderId)
  113. uni.showToast({ title: '订单已关闭', icon: 'none' })
  114. resolve({ status: 'closed' })
  115. } catch (e) {
  116. resolve({ status: 'error' })
  117. }
  118. })
  119. },
  120. fail: () => resolve({ status: 'cancel' })
  121. })
  122. })
  123. }