R29-1 R29-6: 重构海音达工作台壳层与高频页面

这个提交包含在:
2026-03-23 09:59:35 +08:00
父节点 f9198a781a
当前提交 7e183c0cdc
共修改 33 个文件,包含 2193 行新增和 1564 行删除
+25
查看文件
@@ -0,0 +1,25 @@
:root {
--color-bg-canvas: #f5f7fa;
--color-bg-surface: #ffffff;
--color-bg-surface-subtle: #fafafb;
--color-bg-primary-soft: #f2f5f8;
--color-text-primary: #111827;
--color-text-secondary: #667085;
--color-text-tertiary: #98a2b3;
--color-border-default: #e4e7ec;
--color-border-strong: #d0d5dd;
--color-accent-primary: #111827;
--color-accent-primary-hover: #1f2937;
--color-success: #067647;
--color-warning: #b54708;
--color-danger: #b42318;
--color-info: #155eef;
--radius-sm: 0.5rem;
--radius-md: 0.75rem;
--radius-lg: 1rem;
--radius-xl: 1.25rem;
--radius-panel: 1rem;
--shadow-xs: 0 1px 2px rgba(16, 24, 40, 0.04);
--shadow-sm: 0 1px 3px rgba(16, 24, 40, 0.08), 0 1px 2px rgba(16, 24, 40, 0.04);
--shadow-md: 0 8px 24px rgba(16, 24, 40, 0.08);
}
+41
查看文件
@@ -0,0 +1,41 @@
export const semanticTokens = {
colors: {
bgCanvas: "#f5f7fa",
bgSurface: "#ffffff",
bgSurfaceSubtle: "#fafafb",
bgPrimarySoft: "#f2f5f8",
textPrimary: "#111827",
textSecondary: "#667085",
textTertiary: "#98a2b3",
borderDefault: "#e4e7ec",
borderStrong: "#d0d5dd",
accentPrimary: "#111827",
accentPrimaryHover: "#1f2937",
success: "#067647",
warning: "#b54708",
danger: "#b42318",
info: "#155eef",
},
radius: {
sm: "0.5rem",
md: "0.75rem",
lg: "1rem",
xl: "1.25rem",
panel: "1rem",
},
shadow: {
xs: "0 1px 2px rgba(16, 24, 40, 0.04)",
sm: "0 1px 3px rgba(16, 24, 40, 0.08), 0 1px 2px rgba(16, 24, 40, 0.04)",
md: "0 8px 24px rgba(16, 24, 40, 0.08)",
},
spacing: {
pageX: "1.5rem",
pageY: "1.5rem",
cardX: "1.25rem",
cardY: "1.25rem",
sectionGap: "1.5rem",
clusterGap: "1rem",
},
} as const;
export type SemanticTokens = typeof semanticTokens;
+33
查看文件
@@ -0,0 +1,33 @@
export type AppDensity = "comfortable" | "compact";
export type PageScaffoldMeta = {
title: string;
subtitle?: string;
eyebrow?: string;
breadcrumb?: Array<{ label: string; href?: string }>;
statusTag?: { label: string; tone: "neutral" | "success" | "warning" | "danger" };
primaryAction?: { label: string; onClick: () => void };
secondaryActions?: Array<{ label: string; onClick: () => void }>;
};
export type NavBadge = {
value: string | number;
tone: "neutral" | "warning" | "danger";
};
export type NavItemMeta = {
key: string;
href: string;
label: string;
icon: string;
group: "primary" | "admin" | "backup";
priority: number;
badge?: NavBadge | null;
mobileVisible: boolean;
};
export type PortalSectionSchema = {
heroCards: string[];
summaryBlocks: string[];
supportBlocks: string[];
};