新增组件: - PageHeader: 统一页面头部(14 个页面) - StatCard: 统一数值统计卡片(6 个页面) - MessageLine: 统一错误/成功提示条(16 处) - ConfirmFooter: 统一 Dialog 底部按钮(8 个文件) - SearchInput: 统一搜索框(5 个页面) - SubmissionStatusBadge: 统一提交状态徽章 - RoleBadge / UserStatusBadge: 统一用户角色/状态徽章 - BackLink: 统一返回导航链接(5 个页面) - InlineConfirm: 统一二次确认交互(3 个 section) 修复: - Pagination 图标尺寸统一 h-4 w-4 - 右上角按钮统一 size=sm gap-1.5 - StatCard 默认值恢复 text-2xl(24px) States.tsx 新增 NotYours / NotRunning 通用状态组件 已有文件 -659 行,新组件 +353 行,净减 306 行
53 lines
1.0 KiB
TypeScript
53 lines
1.0 KiB
TypeScript
import { Loader2 } from "lucide-react";
|
|
import { Button } from "@/components/ui/button";
|
|
|
|
interface Props {
|
|
open: boolean;
|
|
confirming: boolean;
|
|
onConfirm: () => void;
|
|
onCancel: () => void;
|
|
confirmLabel: string;
|
|
cancelLabel: string;
|
|
confirmVariant?: "destructive" | "default";
|
|
size?: "default" | "sm";
|
|
className?: string;
|
|
}
|
|
|
|
export function InlineConfirm({
|
|
open,
|
|
confirming,
|
|
onConfirm,
|
|
onCancel,
|
|
confirmLabel,
|
|
cancelLabel,
|
|
confirmVariant = "destructive",
|
|
size = "sm",
|
|
className,
|
|
}: Props) {
|
|
if (!open) return null;
|
|
return (
|
|
<div className={className}>
|
|
<Button
|
|
variant="ghost"
|
|
size={size}
|
|
onClick={onCancel}
|
|
disabled={confirming}
|
|
>
|
|
{cancelLabel}
|
|
</Button>
|
|
<Button
|
|
variant={confirmVariant}
|
|
size={size}
|
|
onClick={onConfirm}
|
|
disabled={confirming}
|
|
>
|
|
{confirming ? (
|
|
<Loader2 className="h-4 w-4 animate-spin" />
|
|
) : (
|
|
confirmLabel
|
|
)}
|
|
</Button>
|
|
</div>
|
|
);
|
|
}
|