import { Activity, ArrowRight, Building2, FileChartColumn, Layers3, Radar } from "lucide-react"; import { useNavigate } from "react-router"; import { Button } from "~/components/ui/button"; import { Card, CardAction, CardContent, CardDescription, CardHeader, CardTitle } from "~/components/ui/card"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "~/components/ui/table"; import { GradeBadge, OperationsPageHeader } from "./OperationsUi"; import { useOperationsData } from "./OperationsDataContext"; import { MODEL_CATEGORIES, categoryName, gradeOf, type ModelGrade } from "./modelData"; export default function OperationsWorkbenchPage() { const navigate = useNavigate(); const { models, source } = useOperationsData(); const liveModels = models.filter((model) => model.status !== "下线"); const bankCount = new Set(liveModels.map((model) => model.bank)).size; const gradeCounts = liveModels.reduce>( (counts, model) => ({ ...counts, [gradeOf(model)]: counts[gradeOf(model)] + 1 }), { A: 0, B: 0, C: 0 }, ); const pending = liveModels .filter((model) => gradeOf(model) !== "A") .sort((left, right) => gradeOf(right).localeCompare(gradeOf(left)) || left.ks - right.ks) .slice(0, 5); const watchItems = [ { title: "华东银行 · 标准A卡重构", detail: "当前阶段:方案设计 · 预计 2026-09-18 完成", path: "/operations/workflows" }, { title: "滨海银行 · 大额A卡陪跑上线", detail: "当前阶段:模型上线 · 预计 2026-09-25 完成", path: "/operations/workflows" }, { title: "南岭银行 · 白户A卡模型微调", detail: "当前阶段:开发评审 · 预计 2026-10-08 完成", path: "/operations/workflows" }, ]; const metricCards = [ { label: "在管模型", value: liveModels.length, detail: "覆盖 4 个模型大类", Icon: Layers3 }, { label: "接入银行", value: bankCount, detail: "本月均已完成监控", Icon: Building2 }, { label: "B / C 等级", value: gradeCounts.B + gradeCounts.C, detail: `${gradeCounts.C} 个需重点处理`, Icon: Radar }, { label: "最新报告", value: 6, detail: "2026-07 监控周期", Icon: FileChartColumn }, ]; return (
navigate("/operations/monitoring")}> 查看监控明细 )} /> 2026 年 7 月监控周期已完成 共完成 {liveModels.length} 个模型的月度监控,当前 {gradeCounts.C} 个 C 等级模型需要优先处理, 模型团队初审后流转至业务团队终审。 {source === "api" ? "真实接口" : "Mock 数据"} · 更新于 2026-08-15 06:12
{metricCards.map(({ label, value, detail, Icon }) => ( {value} {label} {detail} ))}
监控结果概览 点击等级进入对应模型明细 {(["A", "B", "C"] as ModelGrade[]).map((grade) => { const total = liveModels.length || 1; const count = gradeCounts[grade]; return ( ); })} 我的待办 除“查看进度”外,需要当前角色处理的事项 银行 / 模型 模型ID KS PSI 等级 操作 {pending.map((model) => ( {model.bank} {categoryName(model.category)} · {model.version} {model.modelId} {model.ks.toFixed(2)}% {model.psi.toFixed(2)}% ))}
我的关注 仅收录以“查看进度”为动作的流程事项 {watchItems.map((item) => (
{item.title}{item.detail}
))}
模型资产分布 按模型大类查看在管模型与版本情况 {MODEL_CATEGORIES.map((category) => { const models = liveModels.filter((model) => model.category === category.id); return ( ); })}
); }