/** * 业务对象状态颜色(ElTag type)集中配置 * * 各业务域的 statusCode → ElTag type 在此统一维护,避免散落在各业务模块。 * 未来若后端状态字典返回颜色字段,可在调用方优先取后端值,缺失时回退此映射。 */ export type StatusTagType = 'primary' | 'success' | 'warning' | 'info' | 'danger'; export type StatusDomain = | 'projectExecution' | 'projectTask' | 'executionAssignee' | 'taskAssigneeMember' | 'project' | 'product' | 'requirement' | 'workOrder' | 'personalItem' | 'overtimeApplication'; const statusTagTypeRegistry: Record> = { // 项目-执行 projectExecution: { pending: 'info', active: 'primary', paused: 'warning', completed: 'success', cancelled: 'danger' }, // 项目-任务 projectTask: { pending: 'info', active: 'primary', paused: 'warning', completed: 'success', cancelled: 'danger' }, // 执行协办人变更事件 executionAssignee: { join: 'success', inactive: 'danger', owner_transfer_in: 'warning', owner_transfer_out: 'warning' }, // 任务协办人变更事件 taskAssigneeMember: { join: 'success', inactive: 'danger' }, // 项目(待补全) project: {}, // 产品(待补全) product: {}, // 需求(待补全) requirement: {}, // 工单(待补全) workOrder: {}, // 个人事项 personalItem: { pending: 'info', active: 'primary', completed: 'success', cancelled: 'danger' }, // 加班申请 overtimeApplication: { pending: 'warning', approved: 'success', rejected: 'danger', cancelled: 'info' } }; export function getStatusTagType(domain: StatusDomain, statusCode: string | null | undefined): StatusTagType { if (!statusCode) { return 'info'; } return statusTagTypeRegistry[domain]?.[statusCode] || 'info'; } export function getPersonalItemStatusTagType(statusCode: string | null | undefined) { return getStatusTagType('personalItem', statusCode); } export function getOvertimeApplicationStatusTagType(statusCode: string | null | undefined) { return getStatusTagType('overtimeApplication', statusCode); }