refactor(admin): 管理后台 UI - 独立设计系统并与用户端隔离
把后台 token、Ant 主题、壳层控件和抽屉弹窗从用户工作台拆开,去掉树状侧栏装饰线,色板仍用原来的中性黑白台阶。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1191,3 +1191,30 @@
|
||||
- 集成验证:隔离迁移正常退出,schema current/expected 6/6,公开主题可从 schema 5 配置读取并投影为 schema 6;既有 appearance 数据摘要保持不变。首页、注册、登录、找回密码、后台深链、liveness、readiness、公开外观与版本接口均通过,未登录管理员外观 API 返回 401。生产构建产物已确认包含 `.admin-shell .app-workspace-nav-link{border-radius:var(--menu-radius)}` 与“后台菜单”预览。
|
||||
- 浏览器验收:1440×900、1280×800、430×932、390×844 均无横向溢出、无可见内置品牌或仓库名残留,首屏直接显示当前自定义品牌。测试会话无管理员登录态,因此真实主题增删改保存、危险按钮/开关各状态和后台菜单圆角的登录后截图仍留作人工验收,不伪造账户或运营数据。
|
||||
- 回滚与残余风险:本批不增加关系型数据库迁移;源码回滚应成对恢复 schema v6 新增颜色字段、前后端兼容补全、Ant/CSS 映射、编辑器和测试。回滚前先备份当前 appearance JSON,避免丢失管理员在 schema v6 下保存的主题状态色。`project-memory/` 继续 Git 忽略且不进入 Git。
|
||||
|
||||
## 批次 138:管理后台独立设计系统与用户端隔离
|
||||
|
||||
- 日期时间:2026-09-17 20:45 CST
|
||||
- 目的:把管理后台从用户工作台的皮肤、token、Ant 主题和共享控件中拆出来,用一套高密度运营台规范覆盖全部后台页面,而不是继续给每个入口打补丁。
|
||||
- 隔离:新增 `pages/admin/theme/admin-tokens.css`、`admin-chrome.css`、`admin-ant-theme.ts` 与 `pages/admin/ui/controls.tsx`。壳层挂 `data-admin-root`,浮层走 `body.admin-overlays`。后台不再调用 `getAdminAntThemeConfig`、`WorkspacePage`、用户端 `Switch/Select/Checkbox/Tooltip/StatusBadge/EmptyState`。`globals.css` 中约 1100 行管理端规则已删除。
|
||||
- 视觉:冷灰表面台阶、发丝线、32px 控件、40px 表行;命令条统一为页头下粘性条,设置卡与功能开放域共用同一分组卡,不做玻璃拟态或逐页皮肤。
|
||||
- 验证:后台回归测试覆盖隔离合同;`tsc` 中本批管理端文件无新增错误。用户端组件未被改样式。登录态浏览器验收见 pending-test。
|
||||
- 逐项回滚:恢复本批新增的 `pages/admin/theme/`、`pages/admin/ui/controls.tsx`,以及 `admin-shell.tsx`、`admin-ui.tsx`、`globals.css`、`admin-ui.css` 和各页面 import 改写。
|
||||
|
||||
## 批次 139:管理端抽屉/弹窗脱离产品壳
|
||||
|
||||
- 日期时间:2026-09-17 20:50 CST
|
||||
- 目的:后台浮层不再复用用户端 `AppDrawer` / `AppModal`,避免产品弹窗内边距和外壳样式渗进运营台。
|
||||
- 涉及文件:`web/src/pages/admin/ui/overlays.tsx`(新增)、用户详情抽屉、提示词模板页、支付页、渠道模型编辑器、`admin-chrome.css`。
|
||||
- 具体改动:新增 `AdminDrawer` / `AdminModal`,强制挂 `admin-drawer` / `admin-modal-root`;浮层表面、标题和分隔线走 `--admin-*`。
|
||||
- 验证:后台回归测试覆盖不再引用产品壳;浏览器用独立预览核对照片密度与用户登录页隔离。
|
||||
- 逐项回滚:删除 `overlays.tsx` 并把四处调用改回产品壳即可。
|
||||
|
||||
## 批次 140:侧栏去掉树状线并恢复原中性色
|
||||
|
||||
- 日期时间:2026-09-17 21:20 CST
|
||||
- 目的:上一批把后台换成冷蓝灰,但树状分组线、选中描边和左侧指示条还在。按反馈恢复原来的黑白后台色,并真正拆掉那些装饰线。
|
||||
- 涉及文件:`admin-tokens.css`、`admin-ant-theme.ts`、`admin-chrome.css`、`admin-ui.css`、设计规范。
|
||||
- 具体改动:暗色回到 `#0f0f0f / #181818`,亮色回到 `#f5f5f5 / #ffffff`,仍写死在后台 token 里不读皮肤。分组标题取消圆点与渐隐短线;组内取消竖向连接线和缩进;当前页只保留底色,不再加描边和左侧指示条。
|
||||
- 验证:回归测试更新隔离色值与“无树状线”断言。
|
||||
- 逐项回滚:恢复本批上述文件即可。
|
||||
|
||||
@@ -1,20 +1,27 @@
|
||||
# 管理后台 UI 与布局规范
|
||||
|
||||
本规范仅约束 `web/src/pages/admin/` 及对应的 `.admin-*` 样式,目标是在不改变业务流程、权限与 API 合同的前提下,统一管理界面的信息层级、密度、响应式行为和可访问性。
|
||||
本规范只约束 `web/src/pages/admin/` 及其专用样式。管理后台是运营控制台,不是创作工作台;视觉、组件和 token 必须与用户端隔离。改用户端不得影响后台,改后台也不得改用户端组件。
|
||||
|
||||
## 0. 隔离合同
|
||||
|
||||
- Token 源:`web/src/pages/admin/theme/admin-tokens.css`。只在 `[data-admin-root]`、`body.admin-overlays` 和 `.admin-drawer/.admin-modal-root` 内生效。
|
||||
- 控件主题:`getIsolatedAdminAntTheme()`。不读取产品皮肤、不复用 `getAntThemeConfig()`。
|
||||
- 壳层与控件:`admin-shell`、`admin-ui`、`pages/admin/ui/controls.tsx`、`pages/admin/ui/overlays.tsx`。不得再引用 `WorkspacePage`、`StatusBadge`、`EmptyState`、用户端 `Switch/Select/Checkbox/Tooltip`、`AppDrawer`、`AppModal`。
|
||||
- `globals.css` 与用户皮肤变量不得再承载后台视觉。后台可在自己的根节点上覆盖 `--workspace-*` 作为防火墙,但后台颜色的真值必须是 `--admin-*`。
|
||||
- 动效:只保留 120ms 颜色过渡,不做页面进入位移、主题圆形揭示或卡片抬升。尊重 `prefers-reduced-motion`。
|
||||
|
||||
## 1. 视觉基线
|
||||
|
||||
- 颜色:继续使用 `globals.css` 的 Primitive → Semantic → Component 三层 token。管理端组件优先引用 `--admin-*`,不在页面内新增亮暗主题颜色字面值。
|
||||
- 表面:页面与 PC 侧栏共用 `--admin-layer-0` 作为连续底色,表格、卡片、表单主体及当前导航项使用 `--admin-layer-1`,表头、摘要区、分页与输入底色使用 `--admin-layer-2`,强调表面使用 `--admin-layer-3`;区域关系通过细分隔线、选中表面和间距表达,不用大块异色把侧栏与内容割裂。亮暗主题均需保持相邻层级可见,不允许页面和卡片使用难以分辨的同色表面。
|
||||
- 文字:标题、正文、辅助信息分别使用 `--admin-text-primary`、`--admin-text-secondary`、`--admin-text-muted`;不以低于辅助色的透明度承载必要信息。
|
||||
- 浮层提示:侧栏图标、纯图标按钮等 Tooltip 必须同时声明主题背景、边框、箭头和文字色,不能只覆盖浮层背景而继续继承另一主题的文字 token。普通后台提示跟随当前主题;收起侧栏的图标提示与普通用户工作台复用同一高对比浮层类,亮色界面使用深底白字,暗色界面使用浅底深字,字号不低于 13px/650。侧栏提示尺寸必须由文字内容驱动,短文案自动收紧、长文案自然扩展,只在超过 220px 或视口安全宽度时换行;不得用固定宽高制造大面积空白,必要提示不得出现深底黑字或浅底白字。
|
||||
- 密度:桌面端表格保持 42px 表头、52px 基础行高;主操作可点区不小于 32px,移动端主要导航可点区不小于 40px。
|
||||
- 圆角与阴影:小控件使用 6–8px,主容器使用 10–12px;常态信息层级以底色和分隔线表达,不堆叠阴影。
|
||||
- 字体:系统无衬线栈(SF Pro / PingFang / Noto Sans),不用用户端 Inter Variable。
|
||||
- 颜色:沿用后台原有中性黑白台阶,不跟产品皮肤走,也不另造冷蓝灰。亮色画布/侧栏 `#f5f5f5`、表面 `#ffffff`。暗色画布/侧栏 `#0f0f0f`、表面 `#181818`。主按钮用墨色/浅字,开关开启用成功绿。
|
||||
- 密度:控件高 32px,表头 36px,数据行 40px,侧栏展开 224px / 收起 64px。间距走 8px 网格。
|
||||
- 圆角:控件 6px,卡片 8px。层级靠表面台阶和 1px 发丝线,不堆阴影。
|
||||
- 页面只有三种骨架:列表(页头 + 工具栏 + 表 + 分页)、设置(页头 + 命令条 + 分组卡)、概览(页头 + 指标 + 图表/表)。禁止为单个入口另造视觉语言。
|
||||
|
||||
## 2. 布局规则
|
||||
|
||||
- 大屏(≥1024px):保留可折叠侧栏;内容区使用弹性高度,表格自身滚动,页面标题和分页保持稳定。
|
||||
- PC 侧栏:与页面使用同一基底,右侧细线界定导航区域;分组标题采用“节点 + 标题 + 渐隐短线”的树状分组头,组内入口向右内缩,并用与标题节点对齐的低对比竖线连接。分组标题使用 12px/700,普通入口使用不低于 13px/500 和约 82% 前景色,不能因追求弱化而损失可读性。当前页面所属分组增强标题和节点;当前入口必须同时使用强调表面、至少 26% 前景色边框、较粗文字和左侧位置指示,确保亮暗主题与页面缩放下均能快速识别,不能只依赖轻微底色差。悬停项提升一个可见层级。顶部身份区使用单个可点击品牌信息块承载更新日志入口:展开态为左侧自适应品牌图标,右侧第一行品牌名“影策”、第二行当前版本号;点击整个信息块只打开更新日志弹窗,不执行页面导航。收起态仅保留水平居中的品牌图标,点击行为不变,并提供明确提示。底部辅助区只保留返回创作台等跨工作区动作,用分隔线与主导航区分,不额外引入整块背景;“返回创作台”固定进入 `/home`,并与普通用户端“管理员后台”使用相同的 34px 行高、图标尺寸和折叠提示。展开态宽 224px,收纳态宽 64px并保留品牌、导航和底部操作图标;展开/收纳入口放在侧栏与内容区之间的垂直中部边缘,不占用顶部品牌区。边缘把手必须用不透明侧栏表面和外围遮罩完整切断分界线,禁止线条从控件内部穿过;使用简洁左右方向箭头,默认融入边界,仅在悬停和聚焦时提升对比,并提供提示、`aria-label`、焦点反馈和与普通用户工作台即时同步的本地状态记忆。前后台展开宽度、折叠宽度和 PC 外壳外侧留白必须一致,往返页面不得发生 12px 内容宽度跳变。
|
||||
- PC 侧栏:与页面使用同一基底,右侧细线界定导航区域。分组标题只保留 11px 弱化文字,禁止节点、渐隐短线和组内竖向连接线。组内入口不缩进。当前入口只用强调底色和较粗文字,不加描边、不加左侧指示条。悬停项提升一个可见底色层级。顶部身份区使用单个可点击品牌信息块承载更新日志入口:展开态为左侧自适应品牌图标,右侧第一行品牌名“影策”、第二行当前版本号;点击整个信息块只打开更新日志弹窗,不执行页面导航。收起态仅保留水平居中的品牌图标,点击行为不变,并提供明确提示。底部辅助区只保留返回创作台等跨工作区动作,用分隔线与主导航区分,不额外引入整块背景;“返回创作台”固定进入 `/home`。展开态宽 224px,收纳态宽 64px并保留品牌、导航和底部操作图标;展开/收纳入口放在侧栏与内容区之间的垂直中部边缘,不占用顶部品牌区。边缘把手必须用不透明侧栏表面和外围遮罩完整切断分界线,禁止线条从控件内部穿过;使用简洁左右方向箭头,默认融入边界,仅在悬停和聚焦时提升对比,并提供提示、`aria-label`、焦点反馈和与普通用户工作台即时同步的本地状态记忆。前后台展开宽度、折叠宽度和 PC 外壳外侧留白必须一致,往返页面不得发生 12px 内容宽度跳变。
|
||||
- PC 后台主题入口:每个页面标题栏右上角必须提供独立明暗主题切换,不要求返回创作台;使用纯图标按钮、明确的 `aria-label` 和悬停提示,并与页面业务操作保持 8px 间距。
|
||||
- 数据概览:定位为“运营健康驾驶舱”,首屏必须依次回答当前健康度、变化趋势和待处理事项,不能只是指标卡与大图表的纵向堆叠。工具栏优先提供 7 天、30 天、本月快捷范围和明确日期范围,用户、模型、渠道、能力等低频条件收进可展开筛选;刷新与导出保持在右侧。健康指标固定归纳为用户活跃、生成任务、服务质量和估算费用四域,队列、上游请求、P95 等从属信息进入对应指标卡,禁止在下一行重复展示;日变化必须写明“较前一日”,费用不可估算时明确提示价格未完整配置,不显示含义不明的 `--`。趋势区只在“用量 / 质量 / 活跃”三类中切换显示相关曲线,避免双坐标和多条曲线同时争夺注意力,高度控制在约 `280px`。CSS 视口达到 `1280px` 时趋势与“需要关注”按约 2:0.82 双列排列,关注区提前展示异常请求、排队任务和费用覆盖,并可跳转到对应分析或配置;更窄 PC 自动纵向排列。下方深度分析只保留模型、用户和异常三类读操作,模型价格作为独立配置入口进入抽屉,不与分析标签混排。所有筛选、导出、价格 CRUD、分页、接口和原始统计口径保持兼容。
|
||||
- 中小屏(<1024px):不将全部导航项平铺成长横向列表;始终显示当前页面,完整导航通过分组菜单打开。
|
||||
|
||||
Reference in New Issue
Block a user