dotnet-starter-kit 前端发布前审计实战:admin 与 dashboard 的设计统一与生产级硬化路线图

发布时间:2026/9/17 19:32:04
dotnet-starter-kit 前端发布前审计实战:admin 与 dashboard 的设计统一与生产级硬化路线图 dotnet-starter-kit 前端发布前审计实战admin 与 dashboard 的设计统一与生产级硬化路线图【免费下载链接】dotnet-starter-kitProduction Grade Cloud-Ready .NET 10 Starter Kit (Web API React Client) with Multitenancy Support, and Clean/Modular Architecture that saves roughly 200 Development Hours! All Batteries Included.项目地址: https://gitcode.com/GitHub_Trending/do/dotnet-starter-kit本篇技术指南以dotnet-starter-kit仓库内 superpowers/audits/2026-06-01-frontend-prerelease-audit.md 为骨架完整解析这份覆盖clients/admin运营商与clients/dashboard租户双前端的设计统一审计报告先看清两份globals.css为何逐字节一致再逐条对照组件级差距、DRY/内联代码热点、UX 生产缺口最后给出可落地的五个分批路线图。读完你将掌握一套先统一设计基座、再收敛组件词汇、最后打磨交互细节的双应用前端治理方法论以及如何在 React 19 Vite 7 Tailwind v4 Radix/shadcn 技术栈上复核这些结论。审计背景、范围与基线这份审计发生在 2026-06-01面向两个 React 应用clients/admin运营商后台操作员视角覆盖 users/roles/tenants/webhooks/audits/billing-invoices 等完整页面clients/dashboard租户工作台覆盖 chat、files、catalog/tickets、identity/system/settings 等页面。技术栈为React 19 Vite 7 TypeScript Tailwind v4 Radix/shadcn。审计目标非常明确达到生产级质量、优秀的 UX、消除内联与重复代码提取为共享组件并在两个应用之间建立统一的外观与体验uniform look and feel。审计基线状态值得注意审计时两个应用都能干净构建tsc -b vite build因此报告强调以下是增量硬化incremental hardening不是救火not a rescue。这份基线同样可以直接用于当前仓库验证——在clients/admin与clients/dashboard目录下分别执行tsc -b vite build即可复现。头条发现设计基座已经统一审计的第一条结论是决定性的设计基础已经统一。clients/admin/src/styles/globals.css与clients/dashboard/src/styles/globals.css在审计时点逐字节一致byte-identical——相同的 OKLCH 原语、无色调中性色chroma 0、玫瑰色品牌色、四层表面4-tier surfaces、Outfit/Figtree/JetBrains-Mono 字体栈、圆角、动效与阴影。因此统一工作的性质是关闭少数组件级与外观特性级缺口而不是重新设计。从当前仓库源码看这份 CSS 遵循清晰的四层架构见 clients/dashboard/src/styles/globals.css 顶部注释PRIMITIVES原语层裸oklch色阶组件中禁止直接引用。包括中性色--neutral-0至--neutral-1000全部chroma 0的真灰去掉了早期暖纸底色的黄色调、品牌色--brand-50至--brand-950600 档是主力#f91942玫瑰色500 档用于暗色模式、点缀色 saffron、以及 success/warning/info/danger 状态色阶。SEMANTICS语义层面向目的的命名变量--background、--primary、--card、--muted-foreground等是组件的公共 API。其中--primary-foreground、--primary-soft用 CSS 相对颜色语法oklch(from var(--brand-600) ...)从当前品牌档位运行时派生使换肤能同步重着色整个语义体系。SURFACES表面层显式四级抬升--surface-1画布→--surface-2侧栏/面板→--surface-3卡片/浮层/吸顶→--surface-4悬停/凸起让卡片在画布上浮起来而非混成一条发丝线。SYSTEM系统层排版显示字体 Outfit、正文 Figtree、等宽 JetBrains Mono、tnum表格数字特性、圆角阶梯--radius0.625rem 基座、三档动效时长120/200/320ms与纯黑投影。theme inline块将这些语义映射为 Tailwind v4 工具类bg-{X}、text-display-page等均可用并在layer base里统一处理了光标指针语义、::selection品牌色选中、细滚动条、prefers-reduced-motion降级以及基于View Transitions API的主题交叉淡入淡出.theme-switching作为 Firefox 等不支持浏览器的兜底。当前仓库补充说明审计之后的设计统一迁移过程中admin 的 clients/admin/src/styles/globals.css 在共享核心之外追加了LEGACY ADMIN SHIM约第 1209 行起过渡块——将旧的 Console 代币--accent-signal、--shadow-card、.section-rule、.canvas-grid、.card-shell等映射到新调色板保证迁移期间旧页面不渲染破损并明确每一项随其消费方迁移完成即删除。这与 docs/superpowers/specs/2026-05-28-admin-dashboard-design-unification-design.md 描述的分阶段迁移策略一致。统一性差距矩阵admin ⟷ dashboard 全量对照这是审计报告的核心交付物——一张七维差距矩阵逐维给出了双端的现状与处置动作。完整继承如下维度admindashboard动作设计代币globals.css一致一致无需处理 ✅Button变体多出signal规范集合删除signal调用点映射为defaultBadge变体多出muted规范集合删除muted调用点映射为defaultSelect/Table/ConfirmDialog原语已有缺失镜像到 dashboard 的components/ui/共享列表家族EmptyState/Field/LoadingRow/ErrorBand更丰富的Entity*家族EntityPageHeader、EntityPager、EntityListCard/Header/Row、EntityMobileCard、EntityStatusBadge、EntityDetail*收敛为同一套词汇dashboard 的Entity*是更完整的参考实现外观系统仅明/暗切换模式system 强调色6 预设 自定义 字体12 款 密度 减少动效、View Transitions、index.html 引导脚本把 dashboard 的外观系统移植到 admin最大 UX/统一性缺口存储键fsh.admin.*fsh.*维持现状改名会丢弃用户已持久化的偏好价值低表单React Hook Form Zod各页临时实现无 RHF/Zod无 textarea/select/checkbox 原语dashboard 采用 RHFZod 与表单原语表中前两行变体多余问题可以从源码确认admin 的 clients/admin/src/components/ui/button.tsx 仍携带signal变体定义而 dashboard 的 Button 为规范集合Badge同理。第三行原语镜像在 dashboard 的 clients/dashboard/src/components/ui/ 目录可见——审计后按批次补齐了 Select/Table 等该目录现有 10 个*.tsx原语。存储键差异也如实存在admin 的 clients/admin/src/components/theme/theme-provider.tsx 使用STORAGE_KEY fsh.admin.theme而 dashboard 的 clients/dashboard/src/components/theme/theme-provider.tsx 使用fsh.theme、fsh.font、fsh.accent、fsh.density、fsh.reduce-motion等键。外观系统差距最大的一块 UX/统一性缺口矩阵中最重的一条是外观系统Appearance system。dashboard 已实现完整的能力矩阵而 admin 只有最基础的明/暗切换。从 clients/dashboard/src/components/theme/theme-provider.tsx 可以读出 dashboard 的完整实现细节模式light | dark | system三态system模式下订阅matchMedia((prefers-color-scheme: dark))OS 变化经withThemeTransition包裹并交叉淡入淡出强调色6 个预设rose/indigo/violet/sky/emerald/amber通过切换:root上的accent-{id}类实现类定义在 globals.css 中覆写 11 个--brand-*档位另有custom模式由 clients/dashboard/src/components/theme/appearance-options.ts 的buildCustomBrandStops从单个色相 H0–360与色度倍率 C0.4–1.4派生整套 11 档oklch停靠值通过内联样式注入:root内联样式优先级高于类规则因此无需额外类字体12 款可选项Geist、Inter Tight、DM Sans、IBM Plex Sans、Manrope、Plus Jakarta Sans、Outfit、Sora、Lexend、Figtree、Onest、Roboto Flex通过改写--font-sans应用冷启动只急切加载 Figtree Outfit JetBrains Mono 三款其余 9 款由ensureLazyFontsLoaded()在用户首次打开 Appearance 设置时按需注入避免冷加载 200–400 KB 字体 CSS密度comfortable | compactcompact 时在:root加density-compact类globals.css 中对应规则压缩main区域的高杠杆内边距与间距节奏减少动效reduce-motion类强制覆盖与prefers-reduced-motion媒体查询双通道生效View Transitions 协调withThemeTransition优先使用document.startViewTransition做整页位图快照交叉淡化这是唯一能统一渐变、阴影、SVG 填充等属性的机制并用flushSync确保 React 状态更新落在快照窗口内不支持时回退到theme-switching毛毯过渡类减动效用户与冷加载直接瞬时提交。关键配套是 clients/dashboard/index.html 中的内联引导脚本在 React 挂载前同步读取fsh.theme/fsh.font/fsh.accent/fsh.density提前翻转dark类、注入懒加载字体链接、加accent-{id}与density-compact类彻底避免首帧闪烁FOUC随后通过requestAnimationFrame加theme-ready标记放行后续动画。对照之下admin 的 clients/admin/src/components/theme/theme-provider.tsx 只有Theme light | dark二元状态、单一fsh.admin.theme存储键且是暗色优先storage → 系统偏好 → dark也没有 index.html 引导脚本。因此审计将移植 dashboard 外观系统到 admin标为最大的单一统一性收益项Batch 3并注明其风险在于会重写 admin 的ThemeProvider因此需要分阶段审查。DRY / 内联代码热点审计按应用分别指出了重复代码聚集区。Dashboard已有共享组件但未处处使用pages/catalog/products.tsx、brands.tsx、categories.tsx手写分页与表头/表行而tickets.tsx/users.tsx已使用EntityPagerEntityListCard/EntityListHeader/EntityListRow——前者应当迁移到同一套组件工单枚举映射重复STATUS_LABEL/TONE、PRIORITY_LABEL/TONE同时出现在pages/tickets/tickets.tsx与ticket-detail.tsx。当前仓库已落地共享模块 clients/dashboard/src/lib/ticket-enums.ts将标签与EntityStatusTone语气统一收口如 Open→info、InProgress→warning、Resolved→success、Closed→default避免两页漂移大量重复的onError: toast.error(...)变更样板 → 提取useMutationToast()hook重复的搜索防抖useEffect→ 提取useDebounce()hook缺少FormDialog外壳封装每个编辑对话框重复编写DialogHeader/Body/Footer 取消/提交。Admin需要先提取共享组件6 处手写状态徽章pages/users/list.tsx、roles/list.tsx、tenants/list.tsx→ 统一为StatusBadgeusers/roles/tenants 之间重复的MobileListCard/DesktopListRow网格与悬停模式 → 提取空状态不一致有时EmptyState、有时内联→ 标准化。这些热点在 Batch 1 中优先处理因为它低风险、复用已验证组件。UX / 生产级缺口清单审计的 UX 缺口横跨 8 个方面逐条列出便于对照排查详情页骨架屏不一致dashboard 的 product/ticket 详情有骨架加载而user-detail、group-detail、role-detaildashboard与 admin 的users/detail会空白或显示原始 Loading… 文本缺失空状态dashboard 的system/audits.tsx、system/activity.tsx、system/sessions.tsx变更按钮缺 pending 状态dashboard 多个编辑对话框存在重复提交double-submit风险无乐观更新任何列表在删除/编辑后都等待 refetch体感滞后admin 缺行级权限检查例如 webhook 删除按钮会展示给最终收到 403 的用户错误恢复ErrorBand没有内联 Retryadminapp-shell的 Suspense 兜底用裸 Loading…焦点管理对话框/移动端抽屉应聚焦捕获并在关闭时还原焦点到触发元素需核对 Radix 覆盖度截断长名称可能溢出紧凑的桌面网格单元格需补truncate/line-clamp。其中第 6 条的骨架与错误状态可参考 globals.css 中现成的.skeleton组件类品牌色微光、2.4s 循环、带内环边缘dashboard 的列表组件家族 clients/dashboard/src/components/list/ 也已在entity-shell.tsx中提供骨架屏与空状态基座第 1、2 条只需复用这些现成件。双应用成熟度盘点审计基于页面盘点给出了两端的成熟度画像Dashboardchat进阶、files进阶、catalog/tickets功能完整但有重复实现、identity/system/settings可用到基础含多处占位页system/overview、settings/notifications、api-keys、billing 相关页面Admindashboard/users/roles/tenants/webhooks/audits/billing-invoices完整settings 的 security/sessions、auth recovery、health基础/最少实现。这决定了后续批次的取舍功能完整的模块优先做去重复占位/基础模块优先做补 UX。分阶段路线图Batch 1–5审计最后给出了五批带优先级的执行路线这是全文最可直接落地的部分Batch 1 — Dashboard DRY低风险复用现有成熟组件将 products/brands/categories 转换为EntityPagerEntityListCard/Header/RowEntityEmpty提取lib/ticket-enums.ts为 audits/activity/sessions 补EntityEmpty。(随附 PR 已实现)——当前仓库中 clients/dashboard/src/lib/ticket-enums.ts 已存在即为该批次产物的例证。Batch 2 — 原语统一低风险把 admin 的Button.signal/Badge.muted收敛到规范集合把Select/Table/ConfirmDialog镜像进 dashboard。(PR 部分实现见提交记录)——dashboard 的 clients/dashboard/src/components/ui/ 目录现有 10 个*.tsx原语比审计时点的 10 个清单有所扩充可作为部分实现的佐证。Batch 3 — 外观对等中风险、高 UX 价值把 dashboard 的外观系统强调色/密度/字体/system 模式 index.html 引导 View Transitions移植到 admin使两个应用提供完全一致的主题能力。这是最大的单一统一性收益但因会重写 admin 的ThemeProvider而分期审查。Batch 4 — 表单中风险新增共享Textarea/Select/Checkbox/FormField原语并在 dashboard 采用 React Hook Form Zod为两个应用都添加FormDialog外壳。Batch 5 — UX 打磨低/中风险详情页骨架屏全覆盖、列表乐观更新、变更 pending 状态、ErrorBand重试、admin 行级权限门控、文本截断。审计特别强调Batch 3–5 携带 UX 取向决策且覆盖面广因此分批推进而非无人监督直接落地以便在真实应用上逐批评审。这与仓库中先共享设计基座、再收敛组件词汇、最后打磨交互的治理节奏完全一致也正是一个双应用 SaaS 前端在发布前应当采用的低风险硬化路径。结论这份审计的价值不在于推翻重来而在于把统一精确收敛为可执行差距清单设计代币已统一两份 globals.css 逐字节一致剩下的是组件词汇收敛、外观系统对等、表单体系补齐与一批 UX 打磨点。对维护者而言五批路线图给出了明确的优先级与风险排序对希望复刻这套做法的团队而言admin 与 dashboard 的分工本身就是一个天然的参照实现 待统一端对照组——先让设计系统成为单一事实源再让组件与特性逐步向它靠拢最终在两个应用之间达成无感知的一致体验。【免费下载链接】dotnet-starter-kitProduction Grade Cloud-Ready .NET 10 Starter Kit (Web API React Client) with Multitenancy Support, and Clean/Modular Architecture that saves roughly 200 Development Hours! All Batteries Included.项目地址: https://gitcode.com/GitHub_Trending/do/dotnet-starter-kit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考