预校验、签到流程跑通
This commit is contained in:
@@ -5,65 +5,78 @@ export type DeliveryTabOptionType = {
|
||||
value: string
|
||||
}
|
||||
|
||||
function normalizeStatus(status: DeliveryOrderStatus): string {
|
||||
return String(status ?? '').trim().toLowerCase()
|
||||
}
|
||||
|
||||
export function getDeliveryOrderTabs(): Array<DeliveryTabOptionType> {
|
||||
return [
|
||||
{ label: '待接单', value: 'pending' } as DeliveryTabOptionType,
|
||||
{ label: '今日订单', value: 'today' } as DeliveryTabOptionType,
|
||||
{ label: '进行中', value: 'today' } as DeliveryTabOptionType,
|
||||
{ label: '历史订单', value: 'history' } as DeliveryTabOptionType
|
||||
]
|
||||
}
|
||||
|
||||
export function isHistoryStatus(status: DeliveryOrderStatus): boolean {
|
||||
return status == 'completed' || status == 'pending_acceptance' || status == 'rejected' || status == 'cancelled' || status == 'abnormal' || status == 'terminated' || status == 'archived'
|
||||
const s = normalizeStatus(status)
|
||||
return s == 'completed' || s == 'settled' || s == 'archived' || s == 'cancelled' || s == 'canceled' || s == 'rejected' || s == 'abnormal' || s == 'exception_pending' || s == 'terminated' || s == 'order_completed' || s == 'order_cancelled'
|
||||
}
|
||||
|
||||
export function getDeliveryStatusLabel(status: DeliveryOrderStatus): string {
|
||||
if (status == 'pending_assignment' || status == 'pending_accept') return '待接单'
|
||||
if (status == 'accepted') return '已接单'
|
||||
if (status == 'departed' || status == 'on_the_way') return '已出发'
|
||||
if (status == 'arrived') return '已到达'
|
||||
if (status == 'in_service' || status == 'serving') return '服务中'
|
||||
if (status == 'pending_confirm' || status == 'pending_acceptance' || status == 'pending_submit') return '待确认'
|
||||
if (status == 'completed') return '已完成'
|
||||
if (status == 'rejected') return '已拒单'
|
||||
if (status == 'cancelled') return '已取消'
|
||||
if (status == 'abnormal' || status == 'exception_pending') return '异常上报'
|
||||
if (status == 'terminated') return '服务终止'
|
||||
return '已归档'
|
||||
const s = normalizeStatus(status)
|
||||
if (s == 'pending' || s == 'pending_assignment' || s == 'pending_accept' || s == 'pending_assign' || s == 'pending_dispatch' || s == 'pending_acceptance_new') return '待接单'
|
||||
if (s == 'assigned') return '已派单'
|
||||
if (s == 'accepted' || s == 'order_accepted' || s == 'waiting_departure') return '待出发'
|
||||
if (s == 'departed' || s == 'on_the_way' || s == 'order_departed') return '已出发'
|
||||
if (s == 'arrival_pending') return '等待消费者确认到达'
|
||||
if (s == 'arrived' || s == 'checked_in' || s == 'order_checked_in') return '已到达'
|
||||
if (s == 'in_service' || s == 'serving' || s == 'order_in_service') return '服务中'
|
||||
if (s == 'pending_acceptance' || s == 'pending_confirm' || s == 'pending_submit') return '等待验收'
|
||||
if (s == 'completed' || s == 'order_completed' || s == 'settled') return '已完成'
|
||||
if (s == 'rejected') return '已拒单'
|
||||
if (s == 'cancelled' || s == 'canceled' || s == 'order_cancelled') return '已取消'
|
||||
if (s == 'abnormal' || s == 'exception_pending') return '异常上报'
|
||||
if (s == 'terminated') return '服务终止'
|
||||
if (s == 'archived') return '已归档'
|
||||
return '查看详情'
|
||||
}
|
||||
|
||||
export function getPrimaryActionText(status: DeliveryOrderStatus): string {
|
||||
if (status == 'pending_assignment' || status == 'pending_accept') return '接单'
|
||||
if (status == 'accepted' || status == 'waiting_departure') return '前往服务'
|
||||
if (status == 'departed' || status == 'on_the_way') return '我已到达'
|
||||
if (status == 'arrived') return '签到'
|
||||
if (status == 'in_service' || status == 'serving') return '填写记录'
|
||||
if (status == 'pending_confirm' || status == 'pending_acceptance' || status == 'pending_submit') return '等待验收'
|
||||
if (status == 'completed') return '查看记录'
|
||||
if (status == 'abnormal' || status == 'exception_pending') return '查看异常'
|
||||
const s = normalizeStatus(status)
|
||||
if (s == 'pending' || s == 'pending_assignment' || s == 'pending_accept' || s == 'pending_assign' || s == 'pending_dispatch' || s == 'pending_acceptance_new') return '接单'
|
||||
if (s == 'assigned' || s == 'accepted' || s == 'waiting_departure' || s == 'order_accepted') return '出发'
|
||||
if (s == 'departed' || s == 'on_the_way' || s == 'order_departed') return '到达签到'
|
||||
if (s == 'arrival_pending') return '等待确认'
|
||||
if (s == 'arrived' || s == 'checked_in' || s == 'order_checked_in') return '开始服务'
|
||||
if (s == 'in_service' || s == 'serving' || s == 'order_in_service') return '继续服务'
|
||||
if (s == 'completed' || s == 'order_completed' || s == 'settled' || s == 'archived') return '查看详情'
|
||||
return '查看详情'
|
||||
}
|
||||
|
||||
export function getNextStepText(status: DeliveryOrderStatus): string {
|
||||
if (status == 'pending_assignment' || status == 'pending_accept') return '确认是否接单'
|
||||
if (status == 'accepted' || status == 'waiting_departure') return '前往服务对象地址并发起导航'
|
||||
if (status == 'departed' || status == 'on_the_way') return '到达服务地点'
|
||||
if (status == 'arrived') return '完成签到确认'
|
||||
if (status == 'in_service' || status == 'serving') return '补充服务记录并完成服务'
|
||||
if (status == 'pending_confirm' || status == 'pending_acceptance' || status == 'pending_submit') return '等待用户确认验收'
|
||||
if (status == 'completed') return '查看历史记录'
|
||||
if (status == 'abnormal' || status == 'exception_pending') return '跟进异常处置'
|
||||
const s = normalizeStatus(status)
|
||||
if (s == 'pending' || s == 'pending_assignment' || s == 'pending_accept' || s == 'pending_assign' || s == 'pending_dispatch' || s == 'pending_acceptance_new') return '确认是否接单'
|
||||
if (s == 'assigned' || s == 'accepted' || s == 'waiting_departure' || s == 'order_accepted') return '准备出发前往服务地址'
|
||||
if (s == 'departed' || s == 'on_the_way' || s == 'order_departed') return '到达服务地点后完成签到'
|
||||
if (s == 'arrival_pending') return '等待消费者确认到达'
|
||||
if (s == 'arrived' || s == 'checked_in' || s == 'order_checked_in') return '开始服务并补充记录'
|
||||
if (s == 'in_service' || s == 'serving' || s == 'order_in_service') return '继续服务并完善服务记录'
|
||||
if (s == 'pending_acceptance' || s == 'pending_confirm' || s == 'pending_submit') return '等待用户确认验收'
|
||||
if (s == 'completed' || s == 'order_completed' || s == 'settled') return '查看历史服务记录'
|
||||
if (s == 'abnormal' || s == 'exception_pending') return '跟进异常处理'
|
||||
return '查看订单详情'
|
||||
}
|
||||
|
||||
export function getStatusClass(status: DeliveryOrderStatus): string {
|
||||
if (status == 'pending_assignment' || status == 'pending_accept' || status == 'pending_confirm' || status == 'pending_acceptance' || status == 'pending_submit') return 'warning'
|
||||
if (status == 'completed') return 'success'
|
||||
if (status == 'abnormal' || status == 'exception_pending') return 'danger'
|
||||
if (status == 'rejected' || status == 'cancelled' || status == 'terminated') return 'muted'
|
||||
const s = normalizeStatus(status)
|
||||
if (s == 'pending' || s == 'pending_assignment' || s == 'pending_accept' || s == 'pending_assign' || s == 'pending_dispatch' || s == 'pending_acceptance_new' || s == 'pending_confirm' || s == 'pending_acceptance' || s == 'pending_submit' || s == 'arrival_pending') return 'warning'
|
||||
if (s == 'assigned' || s == 'accepted' || s == 'waiting_departure' || s == 'departed' || s == 'on_the_way' || s == 'order_accepted' || s == 'order_departed') return 'primary'
|
||||
if (s == 'completed' || s == 'order_completed' || s == 'settled' || s == 'archived') return 'success'
|
||||
if (s == 'abnormal' || s == 'exception_pending') return 'danger'
|
||||
if (s == 'rejected' || s == 'cancelled' || s == 'canceled' || s == 'terminated' || s == 'order_cancelled') return 'muted'
|
||||
return 'primary'
|
||||
}
|
||||
|
||||
export function needsServiceRecord(order: DeliveryOrderType): boolean {
|
||||
return order.serviceRecord == null
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,6 +85,8 @@ export function getHomecareTaskStatusTheme(status: string): string {
|
||||
// 给定角色与状态,返回允许的前端操作标识
|
||||
export function getHomecareTaskAllowedActions(status: string, role: string): Array<string> {
|
||||
const actions = [] as Array<string>
|
||||
const normalizedStatus = normalizeToOrderStatus(status)
|
||||
|
||||
if (role == 'FAMILY_USER' || role == 'consumer') {
|
||||
if (status == ORDER_COMPLETED || status == ACCEPTANCE_PENDING) {
|
||||
actions.push('confirm_acceptance')
|
||||
@@ -116,6 +118,15 @@ export function getHomecareTaskAllowedActions(status: string, role: string): Arr
|
||||
actions.push('dispatch')
|
||||
}
|
||||
}
|
||||
|
||||
console.log('[HOMECARE_STATUS_TRACE][ACTIONS]', {
|
||||
rawStatus: status,
|
||||
normalizedStatus: normalizedStatus,
|
||||
role: role,
|
||||
actions: actions,
|
||||
departedAllowsCheckin: normalizedStatus == ORDER_ACCEPTED
|
||||
})
|
||||
|
||||
return actions
|
||||
}
|
||||
|
||||
@@ -159,3 +170,147 @@ export function normalizeToOrderStatus(raw: string): string {
|
||||
export function isHomecareTaskClosed(status: string): boolean {
|
||||
return status == ARCHIVED || status == ORDER_CANCELLED || status == ORDER_CLOSED || status == ACCEPTED || status == SETTLEMENT_READY
|
||||
}
|
||||
|
||||
// =============================================================================
|
||||
// 新增:delivery / consumer 通用订单状态映射(含 ARRIVAL_PENDING)
|
||||
// 用于 deliveryService、checkin.uvue、order-detail.uvue 等
|
||||
// =============================================================================
|
||||
|
||||
/** 服务人员已提交到达签到,等待消费者确认 */
|
||||
export const ARRIVAL_PENDING = 'ARRIVAL_PENDING'
|
||||
|
||||
/** 订单状态元信息 */
|
||||
export type OrderStatusMeta = {
|
||||
statusText: string
|
||||
statusDesc: string
|
||||
statusTone: string
|
||||
waitingConsumerConfirm: boolean
|
||||
canArriveCheckin: boolean
|
||||
canStartService: boolean
|
||||
canFinishService: boolean
|
||||
tab: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 归一化订单状态元信息
|
||||
* 覆盖旧 delivery 状态 + 居家服务新状态(含 ARRIVAL_PENDING)
|
||||
*/
|
||||
export function normalizeOrderStatus(raw: string): OrderStatusMeta {
|
||||
const s = raw.trim().toUpperCase()
|
||||
|
||||
// ARRIVAL_PENDING — 服务人员已提交到达签到,等待消费者确认
|
||||
if (s == ARRIVAL_PENDING) {
|
||||
return {
|
||||
statusText: '等待消费者确认到达',
|
||||
statusDesc: '服务人员已提交到达签到,等待消费者确认',
|
||||
statusTone: 'warning',
|
||||
waitingConsumerConfirm: true,
|
||||
canArriveCheckin: false,
|
||||
canStartService: false,
|
||||
canFinishService: false,
|
||||
tab: 'in_progress'
|
||||
} as OrderStatusMeta
|
||||
}
|
||||
|
||||
// 旧 delivery 状态映射
|
||||
if (s == 'PENDING_ASSIGNMENT' || s == 'CREATED') return { statusText: '待派单', statusDesc: '订单已创建,等待调度员派单', statusTone: 'default', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'pending' } as OrderStatusMeta
|
||||
if (s == 'PENDING_ACCEPT' || s == 'PENDING_ACCEPTANCE') return { statusText: '待接单', statusDesc: '订单已派发,等待服务人员接单', statusTone: 'warning', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'pending_accept' } as OrderStatusMeta
|
||||
if (s == 'ACCEPTED') return { statusText: '已接单', statusDesc: '服务人员已接单,准备出发', statusTone: 'primary', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'WAITING_DEPARTURE') return { statusText: '待出发', statusDesc: '等待服务人员出发', statusTone: 'primary', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'DEPARTED' || s == 'ON_THE_WAY') return { statusText: '前往中', statusDesc: '服务人员正在前往服务地点', statusTone: 'primary', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'ARRIVED' || s == 'CHECKED_IN') return { statusText: '已到达', statusDesc: '服务人员已到达服务地点', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: true, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'IN_SERVICE' || s == 'SERVING') return { statusText: '服务中', statusDesc: '服务人员正在提供服务', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: true, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'PENDING_CONFIRM' || s == 'PENDING_SUBMIT') return { statusText: '待确认', statusDesc: '等待消费者确认服务完成', statusTone: 'warning', waitingConsumerConfirm: true, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'COMPLETED') return { statusText: '已完成', statusDesc: '订单已完成', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'completed' } as OrderStatusMeta
|
||||
if (s == 'CANCELLED') return { statusText: '已取消', statusDesc: '订单已取消', statusTone: 'info', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'cancelled' } as OrderStatusMeta
|
||||
if (s == 'REJECTED') return { statusText: '已拒绝', statusDesc: '服务人员已拒绝该订单', statusTone: 'danger', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'cancelled' } as OrderStatusMeta
|
||||
if (s == 'ABNORMAL' || s == 'EXCEPTION' || s == 'EXCEPTION_PENDING') return { statusText: '异常处理中', statusDesc: '订单发生异常', statusTone: 'danger', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == 'SETTLED' || s == 'ARCHIVED') return { statusText: '已完成', statusDesc: '订单已完成', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'completed' } as OrderStatusMeta
|
||||
|
||||
// 居家服务 ORDER_* 状态
|
||||
if (s == ORDER_CREATED) return { statusText: '待安排服务', statusDesc: '订单已创建,等待调度员派单', statusTone: 'default', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'pending' } as OrderStatusMeta
|
||||
if (s == ORDER_ASSIGNED) return { statusText: '已安排服务人员,等待接单', statusDesc: '工单已分配至服务人员', statusTone: 'primary', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'pending_accept' } as OrderStatusMeta
|
||||
if (s == ORDER_ACCEPTED) return { statusText: '服务人员已接单,等待上门', statusDesc: '服务人员已接单', statusTone: 'primary', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == ORDER_CHECKED_IN) return { statusText: '服务人员已到达', statusDesc: '服务人员已到达现场', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: true, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == ORDER_IN_SERVICE) return { statusText: '服务进行中', statusDesc: '服务人员正在提供服务', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: true, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == ORDER_COMPLETED) return { statusText: '服务已完成,待验收', statusDesc: '服务人员已提交完成', statusTone: 'primary', waitingConsumerConfirm: true, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == ACCEPTANCE_PENDING) return { statusText: '待验收', statusDesc: '等待消费者验收', statusTone: 'warning', waitingConsumerConfirm: true, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'in_progress' } as OrderStatusMeta
|
||||
if (s == ACCEPTED) return { statusText: '已验收', statusDesc: '消费者已验收', statusTone: 'success', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'completed' } as OrderStatusMeta
|
||||
if (s == ORDER_CANCELLED) return { statusText: '已取消', statusDesc: '订单已取消', statusTone: 'info', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'cancelled' } as OrderStatusMeta
|
||||
if (s == ARCHIVED) return { statusText: '已归档', statusDesc: '订单已归档', statusTone: 'info', waitingConsumerConfirm: false, canArriveCheckin: false, canStartService: false, canFinishService: false, tab: 'completed' } as OrderStatusMeta
|
||||
|
||||
// 未知状态
|
||||
return {
|
||||
statusText: raw,
|
||||
statusDesc: '未知状态',
|
||||
statusTone: 'default',
|
||||
waitingConsumerConfirm: false,
|
||||
canArriveCheckin: false,
|
||||
canStartService: false,
|
||||
canFinishService: false,
|
||||
tab: 'pending'
|
||||
} as OrderStatusMeta
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取状态文本(用于卡片标签)
|
||||
*/
|
||||
export function getOrderStatusText(raw: string): string {
|
||||
return normalizeOrderStatus(raw).statusText
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取状态描述(用于详情页说明)
|
||||
*/
|
||||
export function getOrderStatusDesc(raw: string): string {
|
||||
return normalizeOrderStatus(raw).statusDesc
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取状态色调(用于 UI 颜色)
|
||||
*/
|
||||
export function getOrderStatusTone(raw: string): string {
|
||||
return normalizeOrderStatus(raw).statusTone
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否可以显示"到达签到"按钮
|
||||
*/
|
||||
export function canShowArriveCheckin(raw: string): boolean {
|
||||
return normalizeOrderStatus(raw).canArriveCheckin
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否需要等待消费者确认(到达确认 / 服务验收)
|
||||
*/
|
||||
export function canShowWaitingConsumerConfirm(raw: string): boolean {
|
||||
return normalizeOrderStatus(raw).waitingConsumerConfirm
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断订单是否属于"进行中" tab
|
||||
*/
|
||||
export function isInProgress(raw: string): boolean {
|
||||
return normalizeOrderStatus(raw).tab == 'in_progress'
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断订单是否属于"待接单" tab
|
||||
*/
|
||||
export function isPendingAccept(raw: string): boolean {
|
||||
return normalizeOrderStatus(raw).tab == 'pending_accept'
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断订单是否属于"已完成" tab
|
||||
*/
|
||||
export function isCompleted(raw: string): boolean {
|
||||
return normalizeOrderStatus(raw).tab == 'completed'
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断订单是否属于"已取消" tab
|
||||
*/
|
||||
export function isCancelled(raw: string): boolean {
|
||||
return normalizeOrderStatus(raw).tab == 'cancelled'
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user