文件
hyb-oa/client/src/components/common/StatusBadge.tsx
T

56 行
2.5 KiB
TypeScript

import type { ComponentPropsWithoutRef } from "react";
// 状态气泡组件
import { cn } from "../../lib/utils";
const STATUS_MAP: Record<string, { label: string; className: string }> = {
draft: { label: "草稿", className: "badge-neutral bg-zinc-200/50" },
reviewing: { label: "审批中", className: "badge-warning" },
pending: { label: "待派发", className: "badge-warning" },
processing: { label: "处理中", className: "badge-warning" },
succeeded: { label: "已成功", className: "badge-success" },
failed: { label: "失败", className: "badge-error" },
dead_letter: { label: "死信", className: "badge-error" },
not_triggered: { label: "未触发", className: "badge-neutral" },
pending_ocr: { label: "识别中", className: "badge-warning" },
approved: { label: "已通过", className: "badge-success" },
completed: { label: "已完成", className: "badge-success" },
in_progress: { label: "进行中", className: "badge-warning" },
available: { label: "可用", className: "badge-success" },
active: { label: "生效中", className: "badge-success" },
valid: { label: "有效", className: "badge-success" },
planned: { label: "已计划", className: "badge-primary" },
in_stock: { label: "库存中", className: "badge-primary" },
in_use: { label: "使用中", className: "badge-success" },
under_repair: { label: "维修中", className: "badge-warning" },
retired: { label: "已退役", className: "badge-neutral" },
paid: { label: "已支付", className: "badge-success" },
bound: { label: "已绑定", className: "badge-success" },
rejected: { label: "已驳回", className: "badge-error" },
ocr_failed: { label: "识别失败", className: "badge-error" },
cancelled: { label: "已取消", className: "badge-neutral" },
archived: { label: "已归档", className: "badge-neutral" },
skipped: { label: "已跳过", className: "badge-neutral" },
revoked: { label: "已撤销", className: "badge-neutral" },
expired: { label: "已过期", className: "badge-neutral" },
terminated: { label: "已终止", className: "badge-error" },
scheduled: { label: "已排期", className: "badge-primary" },
};
export function StatusBadge({
status,
label,
className,
...props
}: ComponentPropsWithoutRef<"span"> & {
status: string;
label?: string;
}) {
const config = STATUS_MAP[status] || { label: status, className: "badge-neutral" };
return (
<span className={cn(config.className, className)} {...props}>
{label ?? config.label}
</span>
);
}