06-UI交互规范.md
7.43 KB
06-UI交互规范
一、整体布局
1.1 页面框架
采用 Ant Design 5.x 的 Layout 组件构建整体骨架,分三段:
- Header(顶部导航):左侧 Logo + 系统名("小羚羊 ERP"),右侧用户头像下拉(个人信息 / 修改密码 / 退出登录)。
-
Sider(侧边菜单):固定左侧,使用
Menu组件以树形展示由 MOD 模块管理维护的功能菜单,支持折叠。 -
Content(主区域):路由出口,渲染各业务页面,外包
Breadcrumb+PageHeader上下文容器。
整体使用 ConfigProvider 注入主题与中文 zh_CN locale。
1.2 布局参数
| 项 | 默认值 | 说明 |
|---|---|---|
| Header 高度 | 56 px | 紧凑信息密度,留出更多内容区 |
| Sidebar 展开宽度 | 220 px | 菜单文案完整可见 |
| Sidebar 折叠宽度 | 56 px | 仅图标 |
| Content 内边距 | 16 px | 与 Card / Table 的内边距对齐 |
| 最小分辨率 | 1366 × 768 | ERP 桌面端为主,不做移动端适配 |
二、标准页面类型
基于 USR / MOD 模块均为典型主数据维护场景,列表 / 表单 / 详情 三类页面足以覆盖;用户与模块均为扁平或浅层树结构,再补一个树形管理页用于 MOD。
2.1 列表页
自上而下三段:
- 顶部操作区:左侧批量动作(启用 / 停用 / 删除),右侧主操作("新增 X")。
-
搜索栏:
Form行内布局,含关键字 + 1~2 个枚举筛选;提交触发请求,"重置"清空。 -
表格 + 分页:
Table+ 服务端分页(Pagination),列尾固定操作列(编辑 / 详情 / 删除)。 - 删除等危险操作需
Modal.confirm二次确认。
2.2 表单页
新建 / 编辑统一使用右侧 Drawer(宽度 600 px),不跳页:
- 字段使用 Ant Design
Form+Form.Item,校验时机onBlur,提交前再validateFields全量校验。 - 提交按钮固定在 Drawer 右下角,主按钮"保存"在右、"取消"在左。
- 提交期间按钮
loading=true,避免重复提交。
2.3 详情页
使用 Descriptions(bordered + column={2})展示主数据,必要时 Tabs 切分"基本信息 / 关联资源 / 操作日志"等子页签;详情页只读,编辑动作回到 Drawer 表单。
2.4 树形管理页
仅 MOD 模块管理使用:左侧 Tree 展示模块层级,右侧 Descriptions + Form 展示选中节点详情;新增子模块使用节点上的"+"按钮直接打开 Drawer。
三、通用交互规则
3.1 操作反馈
-
成功:
message.success,文案 "<动作>成功",自动消失 2 秒。 -
失败:
message.error或Modal.error,文案优先取后端返回的message,缺省"操作失败,请稍后重试"。 -
危险操作:删除 / 停用使用
Modal.confirm二次确认,确认按钮使用danger色。 -
长耗时按钮:超过 300 ms 的请求按钮
loading=true,禁用重复点击。
3.2 数据展示
-
空状态:
Empty组件,文案统一 "暂无数据"。 -
加载:列表整体
Spin;局部加载使用 Skeleton。 -
异常:请求失败统一
Result组件 + "重试"按钮,错误码 / 错误信息以小字置于副标题。
3.3 权限控制(前端)
-
菜单级:登录返回的菜单树驱动
Sider Menu,未授权模块不渲染。 -
按钮级:自定义
<Authorized code="XXX">包装组件,按权限码控制按钮可见 / 禁用。 -
路由级:
<RequireAuth>高阶组件,未授权路由重定向到 403 页。 - 所有权限码与后端 RBAC 对齐,前端不做信任决策,仅做展示控制。
四、Design Tokens
4.1 全局调色板
与 Ant Design 5.x 主题 token 对齐,统一以 CSS 变量定义于 src/styles/tokens.css,并通过 ConfigProvider.theme.token 映射。
| 语义 | 变量名 | 默认值 | 用途 |
|---|---|---|---|
| 主色 | --color-primary |
#1677ff |
主按钮 / 链接 / 高亮 |
| 成功 | --color-success |
#52c41a |
成功消息 / 正向状态标签 |
| 警告 | --color-warning |
#faad14 |
提醒类反馈 |
| 错误 | --color-error |
#ff4d4f |
错误消息 / 危险按钮 |
| 主文字 | --color-text |
rgba(0,0,0,0.88) |
正文文字 |
| 次文字 | --color-text-secondary |
rgba(0,0,0,0.65) |
辅助说明 |
| 边框 | --color-border |
#d9d9d9 |
表单边框 / 分割线 |
| 背景 | --color-bg |
#ffffff |
主体背景 |
| 容器背景 | --color-bg-container |
#fafafa |
Card / Sider 等容器 |
4.2 组件级状态色
| 序号 | 组件 | 编辑 bg | 只读 bg | 悬浮 bg | 编辑 fg | 只读 fg | 悬浮 fg | 备注 |
|---|---|---|---|---|---|---|---|---|
| 1 | Form Input | var(--color-bg) |
var(--color-bg-container) |
var(--color-bg) |
var(--color-text) |
var(--color-text-secondary) |
var(--color-text) |
只读使用 disabled 样式 |
| 2 | Table Row | var(--color-bg) |
var(--color-bg) |
var(--color-row-hover) |
var(--color-text) |
var(--color-text) |
var(--color-text) |
选中行另用 --color-row-selected
|
| 3 | Button Primary | var(--color-primary) |
— | var(--color-primary-hover) |
#fff |
— | #fff |
危险按钮用 --color-error 系 |
Token 默认值:
| Token | 默认值 |
|---|---|
--color-row-hover |
#f5f5f5 |
--color-row-selected |
#e6f4ff |
--color-primary-hover |
#4096ff |
4.3 引用约定
- 组件样式只用
var(--color-xxx),禁止硬编码 hex / rgba。 - 新增 token 须先登记到 § 4.1 / 4.2 再补
tokens.css。 - 修改色值只改
tokens.css一处,不允许组件覆盖。
五、页面清单
module_mod 模块管理
-
模块列表 / 树形管理 (
/mod/list)- 类型: 树形管理页(左 Tree 右 Form/Descriptions)
- 对应 REQ: REQ-MOD-001 / REQ-MOD-002 / REQ-MOD-003 / REQ-MOD-004
- 入口菜单: 系统配置 → 模块管理
- 主要交互: 关键字搜索
sModuleNameZh模糊匹配;左侧 Tree 选中节点 → 右侧 Descriptions 展示详情;节点上 "+" 打开 Drawer 新增子模块;"编辑" 按钮打开 Drawer 修改;"删除" 按钮触发 Modal.confirm 二次确认软删除(存在子节点时禁用并提示)
module_usr 用户管理
-
用户列表 (
/usr/list)- 类型: 列表页
- 对应 REQ: REQ-USR-003(查询)/ REQ-USR-001(新增入口)/ REQ-USR-002(编辑入口)
- 入口菜单: 系统配置 → 用户管理
- 主要交互: 顶部搜索栏(查询字段下拉 + 匹配方式下拉 + 查询值文本框);右上 "新增用户" 主按钮;表格列尾 "编辑 / 详情" 操作;分页器(20/页 默认)
-
用户表单(新增 / 编辑) (
/usr/list?drawer=user)- 类型: 表单页(Drawer 形式,与列表页同路由用 query 控制开合)
- 对应 REQ: REQ-USR-001 / REQ-USR-002
- 入口菜单: 列表页"新增用户"按钮 / 列表行"编辑"按钮
- 主要交互: 基本字段表单(用户号 / 用户名 / 员工 / 类型 / 语言 / 单据修改权限)+ 权限组多选 Table;保存触发后端校验,唯一性冲突在字段下方红字提示;初始密码不在表单展示,由后端默认
666666
-
登录页 (
/login)- 类型: 表单页(独立全屏布局,不走 Layout 框架)
- 对应 REQ: REQ-USR-004
- 入口菜单: 未登录时所有路由重定向到此
- 主要交互: 用户名 + 密码(星号显示)+ 版本下拉;提交登录返回 token 写入内存 / Cookie;连续失败锁定后展示剩余冷却时间并禁用按钮