06-UI交互规范.md
7.06 KB
06-UI交互规范
本项目所有页面布局以项目根
prototype/目录下的静态 HTML mockup 为权威。前端阶段(fe-feature-*)实现时直接以 prototype/ HTML 推导组件树与样式。本文件仅承载跨页面通用规则与 Design Tokens。
一、通用交互规则
1.1 操作反馈
-
成功提示:使用 Ant Design
message.success,3 秒自动消失;不阻塞操作。 -
失败提示:使用
message.error显示后端Result.message;4.5 秒消失;保留可复制。 -
危险操作(删除 / 停用 / 重置密码):必须
Modal.confirm二次确认,标题写明动作,正文写明影响对象 + 不可逆性。 -
长耗时按钮(>300ms):按钮
loading态 + 禁用,避免重复提交;提交完成后恢复。 - 表单校验失败:字段下方红字提示;首个错误字段自动聚焦并滚入视口。
1.2 数据展示
-
空状态:使用
Empty组件,图标 + 一句话说明(如暂无用户)+ 主操作按钮(如新增用户)。 -
加载中:列表用
Skeleton;单组件用Spin;全屏首次加载允许使用Spin覆盖。 -
异常态:网络 / 5xx 错误使用
Result status="error"显示,附重试按钮。 - 分页:默认 20 条 / 页,可选 10 / 20 / 50 / 100;显示总数 + 当前页 / 总页数。
-
表格列:必显列固定在左侧;操作列固定在右侧;时间列统一格式
YYYY-MM-DD HH:mm。
1.3 权限控制(前端)
-
菜单级:Redux
auth.user.permissions驱动;菜单项无权限直接不渲染。 -
路由级:
router/index.tsx用RequireAuth+RequireRole高阶守卫;未授权重定向到登录或 403 页。 -
按钮级:
<Permission code="...">包裹按钮,无权限时不渲染(不显示 disabled 灰按钮)。 -
后端 RBAC 同源:前端权限码与后端
Permission表严格对齐(codename 一致);前端只做展示控制,最终鉴权由后端兜底。
二、Design Tokens
所有色值统一以 CSS 变量定义于
frontend/src/styles/tokens.css;命名规范见 docs/04 § 2.5。组件样式只引用var(--color-xxx),禁止硬编码 hex / rgba。
2.1 全局调色板
与 Ant Design 5 默认主题对齐,按语义分组。
| 语义 | 变量名 | 默认值 | 用途 |
|---|---|---|---|
| 主色 | --color-primary |
#1677ff |
主按钮、链接、激活态边框 |
| 主色-悬浮 | --color-primary-hover |
#4096ff |
主色控件 hover |
| 主色-激活 | --color-primary-active |
#0958d9 |
主色控件 active / pressed |
| 成功 | --color-success |
#52c41a |
成功提示、积极状态标签 |
| 警告 | --color-warning |
#faad14 |
警告提示、需注意状态 |
| 错误 | --color-error |
#ff4d4f |
错误提示、危险按钮 |
| 信息 | --color-info |
#1677ff |
普通信息提示 |
| 主文字 | --color-text |
rgba(0,0,0,0.88) |
标题、正文 |
| 次文字 | --color-text-secondary |
rgba(0,0,0,0.65) |
辅助说明 |
| 禁用文字 | --color-text-disabled |
rgba(0,0,0,0.25) |
禁用态 |
| 边框 | --color-border |
#d9d9d9 |
输入框 / 卡片边框 |
| 分割线 | --color-split |
#f0f0f0 |
列表分割线 |
| 背景-页面 | --color-bg-page |
#f5f5f5 |
页面底色 |
| 背景-容器 | --color-bg-container |
#ffffff |
卡片 / 表单 / Modal |
| 背景-禁用 | --color-bg-disabled |
#f5f5f5 |
禁用控件 |
2.2 组件级状态色
按场景 × 状态映射,单元格写 token 引用形式(var(--color-xxx))。— 表示该状态不适用。
| # | 组件 | 编辑bg | 只读bg | 悬浮bg | 编辑fg | 只读fg | 悬浮fg | 备注 |
|---|---|---|---|---|---|---|---|---|
| 1 | Input | var(--color-bg-container) |
var(--color-bg-disabled) |
var(--color-bg-container) |
var(--color-text) |
var(--color-text-secondary) |
var(--color-text) |
只读用 readOnly,禁用用 disabled
|
| 2 | Select | var(--color-bg-container) |
var(--color-bg-disabled) |
var(--color-bg-container) |
var(--color-text) |
var(--color-text-secondary) |
var(--color-text) |
同 Input |
| 3 | Button-Primary | var(--color-primary) |
— | var(--color-primary-hover) |
#fff |
— | #fff |
主操作 |
| 4 | Button-Default | var(--color-bg-container) |
— | var(--color-bg-container) |
var(--color-text) |
— | var(--color-primary) |
次操作 |
| 5 | Button-Danger | var(--color-error) |
— | #ff7875 |
#fff |
— | #fff |
删除 / 停用 |
| 6 | Table-Row | var(--color-bg-container) |
— | #fafafa |
var(--color-text) |
— | var(--color-text) |
斑马纹关闭 |
| 7 | Tag-Success | #f6ffed |
— | — | var(--color-success) |
— | — | 正常 / 启用状态 |
| 8 | Tag-Error | #fff2f0 |
— | — | var(--color-error) |
— | — | 停用 / 失败状态 |
Token 默认值(与 § 2.1 完整一致;新增 token 时此表与 tokens.css 同步更新)。
2.3 引用约定
- 组件样式只用
var(--color-xxx),禁止直接写 hex / rgb / rgba。 - 新增 token 必须先登记到 § 2.1 / 2.2,再写入
tokens.css。 - 修改色值只改
tokens.css一处;组件层不允许覆盖(如.ant-btn-primary { background: ... }之类禁止)。
三、页面清单
(由 downstream-gen 按模块追加段落)
module_usr 用户管理
-
登录页 (
/login)- 类型: 表单页
- 对应 REQ: REQ-USR-001
- 入口菜单: 未登录访问任何路径均重定向至此
- 主要交互: 公司/版本下拉(页面加载时拉取
GET /api/v1/companies)→ 输入用户名 / 密码(密码星号显示)→ 提交按钮带 loading 态防重复提交;连续 5 次失败显示锁定剩余时间;成功后写 access token 到内存并跳转默认主页
-
用户列表 (
/users)- 类型: 列表页
- 对应 REQ: REQ-USR-002("新增"入口)、REQ-USR-003("编辑"行内按钮)、REQ-USR-004(列表分页 + 筛选)
- 入口菜单: 系统管理 → 用户管理
- 主要交互: 顶部筛选区(查询字段下拉 / 匹配方式下拉 / 查询值输入框 / 查询按钮)+ 右上"新增用户"按钮 + Ant Design Table(含序号 / 用户名 / 员工名 / 用户号 / 部门 / 用户类型 / 语言 / 作废标签 / 登录日期 / 制单人 / 制单日期 / 操作列)+ 分页器(10/20/50/100);编辑按钮打开 Modal 复用新增表单组件(按 REQ-USR-003 字段差异置只读 / 禁用);不允许停用当前登录账号自己(按钮 disabled + tooltip 解释)
-
用户表单(嵌入式 Modal,无独立路由)
- 类型: 表单页(Modal)
- 对应 REQ: REQ-USR-002 / REQ-USR-003
- 入口菜单: 由用户列表的"新增" / "编辑"按钮触发
- 主要交互: 左侧基础信息区(员工名下拉 / 用户号 / 用户名 / 类型下拉 / 语言下拉 / 单据修改权限复选框 / 作废复选框(仅编辑))+ 右侧权限组区(按
sys_permission_category渲染勾选列表)+ 底部"保存"/"取消";保存调POST /api/v1/users(新增)或PUT /api/v1/users/{userId}(编辑),成功后关闭 Modal 并刷新列表