/** * 商城订单状态文案与拼团履约判断 * 用途:订单列表卡片、订单详情共用,避免只看 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 }