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