feat: 接入运维真实数据与三角色权限链路

- 新增 model_deploy 与 model_operations 双库查询,支持模型列表、模型详情、单月监控结果和运维工作台真实接口。

- 关闭运维模块生产 Mock 数据,补充缺表/空数据降级、工作台空状态和首条纵向链路测试。

- 按业务团队、模型团队、管理员权限矩阵接入菜单、页面、操作按钮和后端接口权限校验,支持 business_team 角色。

- 更新工作台布局、深色欢迎卡片、全宽页面适配、顶部回退,以及权限分组展示。

- 新增架构实现基线、周目标完成情况和角色权限矩阵初始化 SQL 文档。
This commit is contained in:
郑龙捷
2026-09-02 15:02:47 +08:00
parent 6d044784ec
commit 74dd97428f
51 changed files with 2142 additions and 1062 deletions
@@ -118,6 +118,7 @@ export function FilterSelect({
onChange,
allLabel = "全部",
className,
disabled = false,
}: {
label: string;
value: string;
@@ -125,6 +126,7 @@ export function FilterSelect({
onChange: (value: string) => void;
allLabel?: string;
className?: string;
disabled?: boolean;
}) {
return (
<label className={cn("flex min-w-0 flex-col gap-1.5", className)}>
@@ -132,6 +134,7 @@ export function FilterSelect({
<span className="relative">
<select
data-slot="operations-filter-select"
disabled={disabled}
className="h-9 w-full appearance-none rounded-3xl border border-transparent bg-input/50 px-3 pr-8 text-sm text-foreground outline-none transition-colors focus:border-ring"
value={value}
onChange={(event) => onChange(event.target.value)}
@@ -223,6 +226,9 @@ export function MetricLineChart({
thresholds?: Threshold[];
comparison?: { name: string; values: number[]; tone?: "success" | "warning" };
}) {
if (!months.length || !values.length) {
return <div data-slot="metric-line-chart" className="grid min-h-48 place-items-center rounded-xl border border-dashed border-border text-sm text-muted-foreground"></div>;
}
const width = 640;
const height = 190;
const left = 48;
@@ -321,6 +327,9 @@ export function SortingComboChart({
counts: readonly number[];
badRates: readonly number[];
}) {
if (!bins.length || !counts.length || !badRates.length) {
return <div data-slot="sorting-combo-chart" className="grid min-h-64 place-items-center rounded-xl border border-dashed border-border text-sm text-muted-foreground"></div>;
}
const width = 760;
const height = 300;
const left = 56;