- constants/task.ts 的 STATUS_CONFIG 中 REJECTED 误复用 PENDING 文案 - 修复后流转树/扫码页等所有用 getStatusConfig 展示驳回任务的地方显示正确
72 lines
1.7 KiB
TypeScript
72 lines
1.7 KiB
TypeScript
/**
|
||
* 任务状态 → 颜色/标签映射(全局唯一数据源)
|
||
*
|
||
* 供 TaskTreeViewer / TaskListCard / ProductCard 等组件共用,
|
||
* 避免在多处重复维护相同的映射逻辑。
|
||
*/
|
||
import { TASK_STATUS } from "../types/api";
|
||
|
||
export interface StatusStyle {
|
||
bg: string;
|
||
text: string;
|
||
ring: string;
|
||
label: string;
|
||
}
|
||
|
||
export const STATUS_CONFIG: Record<string, StatusStyle> = {
|
||
[TASK_STATUS.PENDING]: {
|
||
bg: "bg-yellow-50",
|
||
text: "text-yellow-700",
|
||
ring: "ring-yellow-400",
|
||
label: "待接收",
|
||
},
|
||
[TASK_STATUS.WIP]: {
|
||
bg: "bg-blue-50",
|
||
text: "text-blue-700",
|
||
ring: "ring-blue-400",
|
||
label: "进行中",
|
||
},
|
||
[TASK_STATUS.COMPLETED]: {
|
||
bg: "bg-green-50",
|
||
text: "text-green-700",
|
||
ring: "ring-green-400",
|
||
label: "已完成",
|
||
},
|
||
[TASK_STATUS.REJECTED]: {
|
||
bg: "bg-red-50",
|
||
text: "text-red-700",
|
||
ring: "ring-red-400",
|
||
label: "已驳回",
|
||
},
|
||
[TASK_STATUS.ARCHIVED]: {
|
||
bg: "bg-gray-50",
|
||
text: "text-gray-600",
|
||
ring: "ring-gray-300",
|
||
label: "已完成",
|
||
},
|
||
};
|
||
|
||
const FALLBACK: StatusStyle = {
|
||
bg: "bg-gray-50",
|
||
text: "text-gray-600",
|
||
ring: "ring-gray-300",
|
||
label: "",
|
||
};
|
||
|
||
/** 获取状态的完整样式配置(bg / text / ring / label)— 大小写不敏感 */
|
||
export function getStatusConfig(status: string): StatusStyle {
|
||
const key = status?.toUpperCase?.() ?? status;
|
||
return STATUS_CONFIG[key] ?? { ...FALLBACK, label: status };
|
||
}
|
||
|
||
/** 仅获取 bg + text 类名,用于简单的状态标签着色 */
|
||
export function statusColor(status: string): string {
|
||
const cfg = getStatusConfig(status);
|
||
return `${cfg.bg} ${cfg.text}`;
|
||
}
|
||
|
||
/** 仅获取中文标签 */
|
||
export function statusLabel(status: string): string {
|
||
return getStatusConfig(status).label;
|
||
}
|