56 行
2.5 KiB
TypeScript
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>
|
|
);
|
|
}
|