# abacus-static-framework — UI/UX 设计指南
> 视觉与交互细节的权威(与 `PRD.md` 并列上游)。视觉/交互改动先改本文,再让派生实现对齐。
> 本文面向业务子系统开发:**页面模式与标准组件是唯一推荐路径**(共享规范 `docs/coding-standards.md §4.4~4.7` 为强制约束,此处给设计视角的说明)。
## 1. 设计原则(优先级递减)
1. **复用优先**:先标准组件(`framework/components/standard`),再 vxe-table(仅表格),再 Element Plus,最后才自研。
2. **模式一致**:查询+列表页用同一套骨架(AbQueryForm + vxe-grid),让所有子系统页面观感统一。
3. **配置驱动**:表单/查询表单用 fieldConfigs 配置式,少写模板代码。
4. **表格是主角**:业务数据以表格呈现,列字段名与后端响应字段对齐。
## 2. 视觉身份
- 无独立品牌视觉;跟随公司菜单框架既有主题;不引入自定义品牌色(见 §3 语义色)。
## 3. 色板与字体
- 色板:使用 Element Plus 主题变量与 `framework/styles/variables.scss` 中定义的语义变量(禁止在业务内散落硬编码 hex)。
- 字体:沿用框架全局样式;字号层级用 Element Plus 默认(14px 正文 / 标题层级)。
## 4. 间距与栅格
- 页面骨架固定:`
` 页头 → `.form-container`(查询区,AbQueryForm)→ `.table-container`(vxe-grid);间距沿用框架示例(sms 示例页面)的既有值。
- 弹窗内表单用 AbForm 的布局配置(默认 label 左对齐)。
## 5. 动效与触觉
- 无自定义动效需求;使用 Element Plus 默认过渡;表格行编辑为双击进入(`editConfig trigger:'dblclick', mode:'row'`)。
## 6. 状态系统
- 空态:vxe-grid 空数据默认展示;查询无结果提示由表格空态承担。
- 加载:`loading` 状态由 vxe-grid/按钮统一管理。
- 错误:接口错误由 request.ts 统一弹窗(业务 9xx / 系统 5xx),页面不重复提示。
- 成功:新增/保存成功用 `ElMessage.success`(框架既有约定)。
## 7. 屏幕规范
### 7.1 查询+列表页(标准模式)
```
Title 页头
AbQueryForm(fieldConfigs: input/daterange/select/radio + slot 自定义)
vxe-grid(gridDefaultProps + proxyConfig.ajax.query;clientPage 按数据量选)
el-dialog(新增/编辑,AbForm) / el-drawer(详情/日志)
```
### 7.2 可编辑表格页
- `editConfig: { trigger: 'dblclick', mode: 'row' }` + `editRender: { name: 'input' }` + `@edit-closed` 保存(参考 `views/config/business/index.vue`)。
### 7.3 容器页(List/Detail 切换)
- 容器 `index.vue` 用 `:is` 动态切换 `list.vue` / `detail.vue`(参考 `views/document/interfacedoc/`)。
## 8. 可访问性
- 表单字段 label 必填;操作按钮带语义化文字;表格 `seq` 序号列保留。
## 9. 文案语气
- 按钮:动词短语(新增/编辑/删除/导出/查询/重置)。
- 错误提示:简短、可直接行动的句子(由后端 message 提供,前端原样展示)。
## 10. 性能预算
- 列表默认服务端分页(`clientPage:false`),避免一次拉全量;大数据量禁客户端分页。
- 查询表单默认收起多余条件(按需扩展)。
## 11. 视觉资产清单
- 一般业务无需产出视觉资产;如确需图标,放入 `src/assets/` 由构建处理(或 `public/` 保持原名),命名 kebab-case。