R29-1 R29-6: 重构海音达工作台壳层与高频页面
这个提交包含在:
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
@@ -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[];
|
||||
};
|
||||
在新工单中引用
屏蔽一个用户