|
|
@@ -1,16 +1,214 @@
|
|
|
-/**
|
|
|
- * 订单 status 文案,与后端 OrderStatusUtil::getSystemStatusDesc 保持一致
|
|
|
- * @param {number|string} status 系统订单状态 1-5
|
|
|
- * @returns {string}
|
|
|
- */
|
|
|
-export function getSystemStatusDesc(status) {
|
|
|
- const map = {
|
|
|
- 1: '待付款',
|
|
|
- 2: '待配送',
|
|
|
- 3: '配送中',
|
|
|
- 4: '已完成',
|
|
|
- 5: '已取消'
|
|
|
- }
|
|
|
- const key = Number(status)
|
|
|
- return map[key] || '未知状态'
|
|
|
-}
|
|
|
+/**
|
|
|
+ * 商城订单状态文案与拼团履约判断
|
|
|
+ * 用途:订单列表卡片、订单详情共用,避免只看 status / payStatus 把未成团单当成待配送
|
|
|
+ * 拼团状态与后端 GroupBuyClass / xhGroupBuy.status 对齐:1拼团中 2成功 3失败 4已取消
|
|
|
+ */
|
|
|
+
|
|
|
+/** 拼团中 */
|
|
|
+export const GROUP_BUY_STATUS_ONGOING = 1
|
|
|
+/** 拼团成功,可按普通已支付订单履约 */
|
|
|
+export const GROUP_BUY_STATUS_SUCCESS = 2
|
|
|
+/** 拼团失败(自动退款) */
|
|
|
+export const GROUP_BUY_STATUS_FAIL = 3
|
|
|
+/** 拼团已取消 */
|
|
|
+export const GROUP_BUY_STATUS_CANCEL = 4
|
|
|
+
|
|
|
+export const GROUP_BUY_STATUS_TEXT = {
|
|
|
+ 1: '拼团中',
|
|
|
+ 2: '拼团成功',
|
|
|
+ 3: '拼团失败已退款',
|
|
|
+ 4: '拼团已取消'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 订单 status 文案,与后端 OrderStatusUtil::getSystemStatusDesc 保持一致
|
|
|
+ * @param {number|string} status 系统订单状态 1-5
|
|
|
+ * @returns {string}
|
|
|
+ */
|
|
|
+export function getSystemStatusDesc(status) {
|
|
|
+ const map = {
|
|
|
+ 1: '待付款',
|
|
|
+ 2: '待配送',
|
|
|
+ 3: '配送中',
|
|
|
+ 4: '已完成',
|
|
|
+ 5: '已取消'
|
|
|
+ }
|
|
|
+ const key = Number(status)
|
|
|
+ return map[key] || '未知状态'
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 是否团购单:groupBuyId > 0
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function isGroupBuyOrder(order) {
|
|
|
+ return !!(order && Number(order.groupBuyId) > 0)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 读取拼团状态;兼容接口误写 grouBuyStatus
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {number}
|
|
|
+ */
|
|
|
+export function getGroupBuyStatus(order) {
|
|
|
+ if (!order) {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+ const raw = order.groupBuyStatus != null && order.groupBuyStatus !== ''
|
|
|
+ ? order.groupBuyStatus
|
|
|
+ : order.grouBuyStatus
|
|
|
+ return Number(raw) || 0
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 是否已支付:优先 payStatus=1;列表缺字段时用 status 推断(1/5 视为未履约支付)
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function isOrderPaid(order) {
|
|
|
+ if (!order) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ if (order.payStatus !== undefined && order.payStatus !== null && order.payStatus !== '') {
|
|
|
+ return Number(order.payStatus) === 1
|
|
|
+ }
|
|
|
+ const status = Number(order.status)
|
|
|
+ return status !== 1 && status !== 5
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 团购单是否已成团成功,可按普通已支付订单履约/售后
|
|
|
+ * 非团购单直接视为可履约(再由 status / payStatus 决定)
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function isGroupBuyFulfillable(order) {
|
|
|
+ if (!isGroupBuyOrder(order)) {
|
|
|
+ return true
|
|
|
+ }
|
|
|
+ return getGroupBuyStatus(order) === GROUP_BUY_STATUS_SUCCESS
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 团购失败或团已取消:不可履约、不可支付
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function isGroupBuyClosed(order) {
|
|
|
+ if (!isGroupBuyOrder(order)) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ const groupBuyStatus = getGroupBuyStatus(order)
|
|
|
+ return groupBuyStatus === GROUP_BUY_STATUS_FAIL || groupBuyStatus === GROUP_BUY_STATUS_CANCEL
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 列表/详情主状态文案:拼团未成团/失败时优先展示拼团状态,避免误显示「待配送」
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {string}
|
|
|
+ */
|
|
|
+export function getOrderDisplayStatus(order) {
|
|
|
+ if (isGroupBuyOrder(order)) {
|
|
|
+ const groupBuyStatus = getGroupBuyStatus(order)
|
|
|
+ const status = Number(order.status)
|
|
|
+ // 已付款但团未成:展示拼团中,避免误当成待配送
|
|
|
+ if (groupBuyStatus === GROUP_BUY_STATUS_ONGOING && status !== 1 && status !== 5) {
|
|
|
+ return GROUP_BUY_STATUS_TEXT[GROUP_BUY_STATUS_ONGOING]
|
|
|
+ }
|
|
|
+ if (groupBuyStatus === GROUP_BUY_STATUS_FAIL) {
|
|
|
+ return GROUP_BUY_STATUS_TEXT[GROUP_BUY_STATUS_FAIL]
|
|
|
+ }
|
|
|
+ if (groupBuyStatus === GROUP_BUY_STATUS_CANCEL) {
|
|
|
+ return GROUP_BUY_STATUS_TEXT[GROUP_BUY_STATUS_CANCEL]
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (order && order.statusDesc) {
|
|
|
+ return order.statusDesc
|
|
|
+ }
|
|
|
+ return getSystemStatusDesc(order && order.status)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 详情状态下方提示:拼团单结合成团结果说明下一步
|
|
|
+ * @param {Object} order 订单详情
|
|
|
+ * @returns {string}
|
|
|
+ */
|
|
|
+export function getOrderDisplayHint(order) {
|
|
|
+ if (!order) {
|
|
|
+ return ''
|
|
|
+ }
|
|
|
+ const status = Number(order.status)
|
|
|
+ if (isGroupBuyOrder(order)) {
|
|
|
+ const groupBuyStatus = getGroupBuyStatus(order)
|
|
|
+ // 团已关闭时优先展示最终结果,避免未付款成员仍收到支付提示
|
|
|
+ if (groupBuyStatus === GROUP_BUY_STATUS_FAIL) {
|
|
|
+ return '未成团,款项将原路退回'
|
|
|
+ }
|
|
|
+ if (groupBuyStatus === GROUP_BUY_STATUS_CANCEL) {
|
|
|
+ return '拼团已取消'
|
|
|
+ }
|
|
|
+ if (status === 1) {
|
|
|
+ return '请尽快完成支付,支付后等待成团'
|
|
|
+ }
|
|
|
+ if (groupBuyStatus === GROUP_BUY_STATUS_ONGOING && status !== 5) {
|
|
|
+ return '成团后商家开始备货配送'
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (status === 1) {
|
|
|
+ return '请尽快完成支付,超时订单可能自动取消'
|
|
|
+ }
|
|
|
+ if (status === 2) {
|
|
|
+ return '商家备货中,请耐心等待配送'
|
|
|
+ }
|
|
|
+ if (status === 3) {
|
|
|
+ return '鲜花配送途中,注意查收'
|
|
|
+ }
|
|
|
+ if (status === 4) {
|
|
|
+ return '订单已完成,感谢您的惠顾'
|
|
|
+ }
|
|
|
+ if (status === 5) {
|
|
|
+ return '订单已取消'
|
|
|
+ }
|
|
|
+ if (status === 6) {
|
|
|
+ return '订单已退款'
|
|
|
+ }
|
|
|
+ return ''
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 待付款操作:未取消的待付款单可立即付款(拼团中未支付仍需付款)
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function canShowWaitPayAction(order) {
|
|
|
+ return Number(order && order.status) === 1 && !isGroupBuyClosed(order)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 待配送履约操作(联系客服):须已支付,拼团单还须成团成功
|
|
|
+ * @param {Object} order 订单行/详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function canShowWaitSendAction(order) {
|
|
|
+ return Number(order && order.status) === 2 && isOrderPaid(order) && isGroupBuyFulfillable(order)
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * 申请售后:非待付款,且拼团须已成团(失败走自动退款)
|
|
|
+ * @param {Object} order 订单详情
|
|
|
+ * @returns {boolean}
|
|
|
+ */
|
|
|
+export function canShowApplyRefundAction(order) {
|
|
|
+ if (!order || Number(order.status) === 1) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ // 拼团未成功一律不开放售后,即使旧接口 canApplyRefund 仍为 1
|
|
|
+ if (!isGroupBuyFulfillable(order)) {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+ if (order.canApplyRefund !== undefined && order.canApplyRefund !== null && order.canApplyRefund !== '') {
|
|
|
+ return Number(order.canApplyRefund) === 1
|
|
|
+ }
|
|
|
+ return true
|
|
|
+}
|