# 盘古用户平台 - 前端UI规范文档 v1.0 > 适用于本项目所有前端页面开发 > 作者:湖北新华业务中台研发团队 > 创建时间:2026-01-31 --- ## 一、设计原则 ### 1.1 统一性原则 - 保持全系统视觉风格一致 - 相同功能使用相同交互模式 - 统一的间距、颜色、字体规范 ### 1.2 简洁性原则 - 页面布局清晰,信息层次分明 - 避免过度设计,突出核心功能 - 表格列宽合理,无大面积空白 ### 1.3 易用性原则 - 操作直观,减少用户学习成本 - 反馈及时,状态清晰可见 - 错误提示友好,引导用户纠正 --- ## 二、色彩规范 ### 2.1 主题色 | 类型 | 色值 | 用途 | |------|------|------| | 主色 | `#409EFF` | 按钮、链接、选中态 | | 成功色 | `#67C23A` | 正常状态、成功提示 | | 警告色 | `#E6A23C` | 警告提示 | | 危险色 | `#F56C6C` | 停用状态、删除操作、错误提示 | | 信息色 | `#909399` | 辅助信息 | ### 2.2 中性色 | 类型 | 色值 | 用途 | |------|------|------| | 主文本 | `#303133` | 标题、正文 | | 常规文本 | `#606266` | 表格、描述 | | 次要文本 | `#909399` | 提示、禁用态 | | 占位文本 | `#C0C4CC` | placeholder | | 边框色 | `#DCDFE6` | 边框、分割线 | | 背景色 | `#F5F7FA` | 表头、背景 | ### 2.3 侧边栏配色 | 类型 | 色值 | |------|------| | 背景色 | `#304156` | | 选中背景 | `#409EFF` | | 文字颜色 | `#FFFFFF` | --- ## 三、布局规范 ### 3.1 页面结构 ```vue ``` ### 3.2 左右分栏布局 适用于:学校管理、学生管理等需要左侧树形筛选的页面 ```vue ``` ### 3.3 间距规范 | 场景 | 间距值 | |------|--------| | 页面内边距 | 16px | | 卡片间距 | 12px | | 表单项间距 | 默认(16px) | | 按钮组间距 | 10px | | 表格与分页间距 | 16px | --- ## 四、表格规范 ### 4.1 基础表格属性 ```vue ``` **必须设置的属性:** - `border`:显示边框 - `stripe`:斑马纹 - `v-loading`:加载状态 - `header-cell-style`:表头样式 - `style="width: 100%"`:全宽显示 ### 4.2 列宽规范 | 字段类型 | 推荐宽度 | 说明 | |---------|---------|------| | ID/编号 | `width="80-140"` | 固定宽度 | | 名称/标题 | `min-width="120-200"` | 弹性宽度,使用min-width | | 编码 | `width="100-120"` | 固定宽度 | | 状态/类型 | `width="80-100"` | 固定宽度,居中 | | 日期时间 | `width="160"` | 固定宽度 | | 手机号 | `width="120"` | 固定宽度 | | 操作列 | `width="120-200"` | 根据按钮数量,固定右侧 | ### 4.3 列定义示例 ```vue ``` ### 4.4 空数据处理 ```vue ``` ### 4.5 树形表格 ```vue ``` **注意事项:** - `row-key` 必须指定为唯一标识字段 - 确保数据结构中的字段名与 `prop` 一致 --- ## 五、表单规范 ### 5.1 搜索表单 ```vue 搜索 重置 ``` ### 5.2 弹窗表单 ```vue ``` ### 5.3 输入框宽度规范 | 场景 | 推荐宽度 | |------|---------| | 搜索表单-短输入 | 100-150px | | 搜索表单-中输入 | 200px | | 搜索表单-日期范围 | 240px | | 弹窗表单 | 100%(默认) | --- ## 六、分页规范 ```vue ``` **必须设置:** - `layout="total, sizes, prev, pager, next, jumper"`:完整布局 - `style="justify-content: flex-end"`:右对齐 - `:page-sizes="[10, 20, 50, 100]"`:页码选项 --- ## 七、状态Tag规范 ### 7.1 状态类型映射 | 状态 | Tag类型 | 示例 | |------|---------|------| | 正常/启用 | `success` | 正常 | | 停用/禁用 | `danger` | 停用 | | 家长 | `primary`(默认) | 家长 | | 教师 | `success` | 教师 | | 男 | `primary`(默认) | 男 | | 女 | `danger` | 女 | | 未知 | `info` | 未知 | ### 7.2 代码示例 ```vue {{ row.status === '0' ? '正常' : '停用' }} {{ row.identityType === '1' ? '家长' : '教师' }} {{ { '0': '未知', '1': '男', '2': '女' }[row.gender] }} ``` --- ## 八、交互规范 ### 8.1 删除确认 ```javascript const handleDelete = (row) => { ElMessageBox.confirm(`确定要删除"${row.name}"吗?`, '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { deleteApi(row.id).then(() => { ElMessage.success('删除成功') handleQuery() }) }).catch(() => {}) } ``` ### 8.2 消息提示 | 场景 | 类型 | 示例 | |------|------|------| | 操作成功 | `success` | 新增成功、修改成功、删除成功 | | 操作失败 | `error` | 操作失败,请重试 | | 警告提示 | `warning` | 请先选择数据 | | 信息提示 | `info` | 已复制到剪贴板 | ```javascript ElMessage.success('操作成功') ElMessage.error('操作失败') ElMessage.warning('请先选择数据') ElMessage.info('已复制到剪贴板') ``` ### 8.3 Loading状态 - 表格加载:使用 `v-loading` 指令 - 按钮提交:使用 `:loading` 属性 - 页面加载:使用全局Loading --- ## 九、Mock数据规范 ### 9.1 响应格式 ```javascript // 成功响应 { code: 200, msg: '操作成功', data: { ... } } // 分页响应 { code: 200, msg: '查询成功', total: 100, rows: [ ... ] } // 错误响应 { code: 500, msg: '操作失败' } ``` ### 9.2 Mock文件规范 ```javascript /** * XXX模块Mock数据 * @author 湖北新华业务中台研发团队 */ import Mock from 'mockjs' // 预置数据定义 const dataList = [...] // GET请求用RegExp匹配URL(支持query参数) Mock.mock(/\/api\/xxx\/list/, 'get', (options) => { return { code: 200, total: 100, rows: [...] } }) // POST/PUT/DELETE用字符串或正则匹配 Mock.mock('/api/xxx', 'post', { code: 200, msg: '新增成功' }) ``` ### 9.3 字段命名规范 **重要:Mock数据中的字段名必须与视图中 `prop` 属性保持一致!** ```javascript // ✅ 正确:字段名与视图prop一致 { regionName: '湖北省', regionCode: 'HB' } // 对应视图: // ❌ 错误:字段名与视图prop不一致 { name: '湖北省', code: 'HB' } // 对应视图: -- 会导致数据不显示 ``` --- ## 十、文件命名规范 ### 10.1 视图文件 | 类型 | 位置 | 命名 | |------|------|------| | 主页面 | `views/xxx/index.vue` | index.vue | | 弹窗组件 | `views/xxx/components/XxxDialog.vue` | 大驼峰+Dialog | ### 10.2 API文件 | 位置 | 命名 | 示例 | |------|------|------| | `src/api/` | 小驼峰.js | `school.js`, `member.js` | ### 10.3 Mock文件 | 位置 | 命名 | 示例 | |------|------|------| | `src/mock/` | 小驼峰.js | `school.js`, `member.js` | | 入口文件 | `src/mock/index.js` | 汇总所有mock | --- ## 十一、已知问题清单 ### 11.1 区域管理页面 **问题类型:** Mock数据字段不匹配 **严重程度:** 高 **问题描述:** 区域名称列显示为空 **原因分析:** - 视图使用 `prop="regionName"`,但Mock返回 `name` - 视图使用 `prop="regionCode"`,但Mock返回 `code` **修复方案:** ```javascript // 修改 src/mock/region.js,将字段名改为: { regionName: '湖北省', regionCode: 'HB', ... } // 或修改视图 prop 为: ``` ### 11.2 应用管理页面 **问题类型:** Mock数据字段不匹配 **严重程度:** 中 **问题描述:** 授权接口列为空 **原因分析:** - 视图使用 `row.apis`,但Mock返回 `row.apiAuth` **修复方案:** ```javascript // 修改 src/views/application/index.vue 第38行 // 将 row.apis 改为 row.apiAuth ``` ### 11.3 年级管理页面 **问题类型:** Mock接口未正确匹配 **严重程度:** 高 **问题描述:** 表格显示"No Data" **原因分析:** API调用路径与Mock匹配可能有问题 **修复方案:** 检查API调用路径是否与Mock正则匹配 ### 11.4 班级管理、学科管理页面 **问题类型:** 同年级管理 **需确认:** 同样可能存在Mock匹配问题 ### 11.5 学校管理页面 **问题类型:** 样式问题 **严重程度:** 低 **问题描述:** - 操作列按钮显示为多行,较拥挤 - 创建时间列可能被截断 **修复方案:** - 增加操作列宽度到 220px 或 240px - 减少操作按钮文字,如"新增年级"改为"加年级" ### 11.6 Mock数据时间问题 **问题类型:** 数据质量 **严重程度:** 低 **问题描述:** 部分Mock生成的时间数据不合理(如1970年、1971年) **修复方案:** 限制时间范围为近5年 --- ## 十二、修复优先级 | 优先级 | 页面 | 问题 | 影响 | |--------|------|------|------| | P0 | 区域管理 | 字段不匹配导致数据不显示 | 页面不可用 | | P0 | 年级/班级/学科管理 | Mock未返回数据 | 页面不可用 | | P1 | 应用管理 | 授权接口列为空 | 功能缺失 | | P2 | 学校管理 | 操作列过窄 | 体验不佳 | | P3 | 全局 | Mock时间数据不合理 | 影响展示 | --- *文档版本:v1.0* *创建时间:2026-01-31* *维护团队:湖北新华业务中台研发团队*