Files
medical-mall/utils/homecareStatus.uts

162 lines
6.6 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// =============================================================================
// 居家服务统一状态常量与映射
// 说明:
// - 本文件对齐数据库 ec_care_tasks.status 口径与 ORDER_* 枚举。
// - delivery / consumer 两端共用同一套状态常量,禁止各自维护不同文案。
// - 状态流转必须由后端 RPC 推导,前端只做展示与权限判断。
// =============================================================================
// 工单主状态(来自 ec_care_tasks.status
export const ORDER_CREATED = 'ORDER_CREATED'
export const ORDER_ASSIGNED = 'ORDER_ASSIGNED'
export const ORDER_ACCEPTED = 'ORDER_ACCEPTED'
export const ORDER_REJECTED = 'ORDER_REJECTED'
export const ORDER_CHECKED_IN = 'ORDER_CHECKED_IN'
export const ORDER_IN_SERVICE = 'ORDER_IN_SERVICE'
export const ORDER_EXCEPTION = 'ORDER_EXCEPTION'
export const ORDER_COMPLETED = 'ORDER_COMPLETED'
export const ACCEPTANCE_PENDING = 'ACCEPTANCE_PENDING'
export const ACCEPTED = 'ACCEPTED'
export const ACCEPTANCE_REJECTED = 'ACCEPTANCE_REJECTED'
export const SETTLEMENT_READY = 'SETTLEMENT_READY'
export const ARCHIVED = 'ARCHIVED'
export const ORDER_CANCELLED = 'ORDER_CANCELLED'
export const ORDER_CLOSED = 'ORDER_CLOSED'
// 合法状态集合(用于校验)
export const HOMEcare_TASK_STATUSES: Array<string> = [
ORDER_CREATED,
ORDER_ASSIGNED,
ORDER_ACCEPTED,
ORDER_REJECTED,
ORDER_CHECKED_IN,
ORDER_IN_SERVICE,
ORDER_EXCEPTION,
ORDER_COMPLETED,
ACCEPTANCE_PENDING,
ACCEPTED,
ACCEPTANCE_REJECTED,
SETTLEMENT_READY,
ARCHIVED,
ORDER_CANCELLED,
ORDER_CLOSED
]
// consumer 端展示文案
export function getHomecareTaskStatusText(status: string): string {
if (status == ORDER_CREATED) return '待安排服务'
if (status == ORDER_ASSIGNED) return '已安排服务人员,等待接单'
if (status == ORDER_ACCEPTED) return '服务人员已接单,等待上门'
if (status == ORDER_REJECTED) return '正在重新安排人员'
if (status == ORDER_CHECKED_IN) return '服务人员已到达'
if (status == ORDER_IN_SERVICE) return '服务进行中'
if (status == ORDER_EXCEPTION) return '服务处理异常中'
if (status == ORDER_COMPLETED) return '服务已完成,待验收'
if (status == ACCEPTANCE_PENDING) return '待验收'
if (status == ACCEPTED) return '已验收'
if (status == ACCEPTANCE_REJECTED) return '验收未通过'
if (status == SETTLEMENT_READY) return '待结算'
if (status == ARCHIVED) return '已归档'
if (status == ORDER_CANCELLED) return '已取消'
if (status == ORDER_CLOSED) return '已关闭'
return status
}
// 主题色/标签色(用于 UI 标签)
export function getHomecareTaskStatusTheme(status: string): string {
if (status == ORDER_CREATED) return 'warning'
if (status == ORDER_ASSIGNED) return 'primary'
if (status == ORDER_ACCEPTED) return 'primary'
if (status == ORDER_REJECTED) return 'danger'
if (status == ORDER_CHECKED_IN) return 'success'
if (status == ORDER_IN_SERVICE) return 'success'
if (status == ORDER_EXCEPTION) return 'danger'
if (status == ORDER_COMPLETED) return 'primary'
if (status == ACCEPTANCE_PENDING) return 'warning'
if (status == ACCEPTED) return 'success'
if (status == ACCEPTANCE_REJECTED) return 'danger'
if (status == SETTLEMENT_READY) return 'warning'
if (status == ARCHIVED) return 'info'
if (status == ORDER_CANCELLED) return 'info'
if (status == ORDER_CLOSED) return 'info'
return 'default'
}
// 给定角色与状态,返回允许的前端操作标识
export function getHomecareTaskAllowedActions(status: string, role: string): Array<string> {
const actions = [] as Array<string>
if (role == 'FAMILY_USER' || role == 'consumer') {
if (status == ORDER_COMPLETED || status == ACCEPTANCE_PENDING) {
actions.push('confirm_acceptance')
actions.push('reject_acceptance')
}
}
if (role == 'HOMECARE_WORKER' || role == 'delivery' || role == 'staff') {
if (status == ORDER_ASSIGNED) {
actions.push('accept')
actions.push('reject')
}
if (status == ORDER_ACCEPTED) {
actions.push('checkin')
actions.push('report_exception')
}
if (status == ORDER_CHECKED_IN) {
actions.push('start_service')
actions.push('report_exception')
}
if (status == ORDER_IN_SERVICE) {
actions.push('save_record')
actions.push('upload_evidence')
actions.push('report_exception')
actions.push('finish_service')
}
}
if (role == 'HOMECARE_DISPATCHER' || role == 'dispatcher') {
if (status == ORDER_CREATED || status == ORDER_REJECTED || status == ORDER_EXCEPTION) {
actions.push('dispatch')
}
}
return actions
}
// 将旧 hss / delivery 前端状态归一化为 ORDER_* 状态
export function normalizeToOrderStatus(raw: string): string {
const s = raw.trim().toUpperCase()
if (s == 'CREATED' || s == 'SUBMITTED') return ORDER_CREATED
if (s == 'PAID') return ORDER_CREATED
if (s == 'ASSIGNED' || s == 'PENDING_ASSIGNMENT' || s == 'PENDING_DISPATCH' || s == 'PENDING_ACCEPT') return ORDER_ASSIGNED
if (s == 'ACCEPTED' || s == 'PENDING_ACCEPT') return ORDER_ACCEPTED
if (s == 'REJECTED') return ORDER_REJECTED
if (s == 'DEPARTED' || s == 'ON_THE_WAY' || s == 'WAITING_DEPARTURE') return ORDER_ACCEPTED
if (s == 'ARRIVED' || s == 'CHECKED_IN') return ORDER_CHECKED_IN
if (s == 'IN_SERVICE' || s == 'SERVING') return ORDER_IN_SERVICE
if (s == 'COMPLETED') return ORDER_COMPLETED
if (s == 'PENDING_ACCEPTANCE' || s == 'PENDING_CONFIRM' || s == 'PENDING_SUBMIT') return ACCEPTANCE_PENDING
if (s == 'ACCEPTED_BY_USER') return ACCEPTED
if (s == 'REVIEWED') return ACCEPTED
if (s == 'SETTLED') return SETTLEMENT_READY
if (s == 'EXCEPTION' || s == 'ABNORMAL' || s == 'EXCEPTION_PENDING') return ORDER_EXCEPTION
if (s == 'CANCELLED') return ORDER_CANCELLED
if (s == 'ARCHIVED') return ARCHIVED
if (s == 'ORDER_CREATED') return ORDER_CREATED
if (s == 'ORDER_ASSIGNED') return ORDER_ASSIGNED
if (s == 'ORDER_ACCEPTED') return ORDER_ACCEPTED
if (s == 'ORDER_REJECTED') return ORDER_REJECTED
if (s == 'ORDER_CHECKED_IN') return ORDER_CHECKED_IN
if (s == 'ORDER_IN_SERVICE') return ORDER_IN_SERVICE
if (s == 'ORDER_EXCEPTION') return ORDER_EXCEPTION
if (s == 'ORDER_COMPLETED') return ORDER_COMPLETED
if (s == 'ACCEPTANCE_PENDING') return ACCEPTANCE_PENDING
if (s == 'ACCEPTED') return ACCEPTED
if (s == 'ACCEPTANCE_REJECTED') return ACCEPTANCE_REJECTED
if (s == 'SETTLEMENT_READY') return SETTLEMENT_READY
if (s == 'ORDER_CANCELLED') return ORDER_CANCELLED
if (s == 'ORDER_CLOSED') return ORDER_CLOSED
return raw
}
// 判断是否为已关闭/终态
export function isHomecareTaskClosed(status: string): boolean {
return status == ARCHIVED || status == ORDER_CANCELLED || status == ORDER_CLOSED || status == ACCEPTED || status == SETTLEMENT_READY
}