- 新增 MD/specs/UI_DESIGN_IRON_RULES.md (404行) - 十大UI设计铁律法则: 希克/费茨/米勒/雅各布/格式塔/多赫蒂/尼尔森/泰斯勒/峰终/冯雷斯托夫 - HIS医疗系统专项UI规范: 色彩体系/间距系统/字体/表格/表单/弹窗/交互反馈 - 医疗特殊交互: 危急值/医嘱/处方/费用/电子签名/打印 - 设计文档必备模板: UI布局+交互清单+调用流程+状态流转+异常处理 - 违反检查清单 - 更新铁律体系 - RULES.md: 新增铁律14 - 设计文档必须包含UI设计和调用流程 - MD/specs/IRON_RULES.md: 新增铁律#9详细说明 - MD/specs/FRONTEND_DEVELOPMENT_STANDARD.md: 新增UI设计法则速查表 - 同步7个AI工具配置: AGENTS.md/.cursorrules/.copilot/.windsurf/.cline/.qwen/.aider
17 KiB
HealthLink-HIS UI 设计铁律
文档类型: 设计规范 适用范围: 全项目前端UI设计与交互 版本: v1.0 编制日期: 2026-06-06 最后更新: 2026-06-06
一、总则
设计文档必须写清楚:前端页面UI布局、交互效果、前后端调用流程。 没有明确UI设计的模块,禁止直接编码。
设计文档必备要素
每个新模块/页面的设计文档必须包含:
| # | 要素 | 说明 |
|---|---|---|
| 1 | 页面线框图/布局描述 | 每个区域放什么组件、尺寸比例、栅格布局 |
| 2 | 交互效果清单 | 每个按钮/操作触发什么效果(弹窗、抽屉、跳转、动画) |
| 3 | 前后端调用流程 | 每个用户操作 → 对应API → 参数 → 返回数据 → 前端渲染 |
| 4 | 状态流转图 | 数据状态变化 → UI如何响应 |
| 5 | 异常/边界处理 | 空数据、加载中、错误状态的UI表现 |
| 6 | 响应式断点 | 不同屏幕尺寸下的布局适配方案 |
二、十大UI设计铁律法则
以下法则源自认知心理学、人机交互学、HCI经典理论。 医疗HIS系统因涉及生命安全,全部铁律等级提升为P0。
法则1: 希克定律 (Hick's Law) — 选择越少越好
决策时间 = a + b × log₂(选项数量)
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 菜单层级 | 一级菜单 ≤ 7项,二级菜单 ≤ 9项 | 医生工作站左侧导航 |
| 表单字段 | 单页表单 ≤ 12个字段,超出用分步表单 | 患者登记、医嘱录入 |
| 按钮组 | 主要操作按钮 ≤ 3个/区域 | 处方页面:保存/提交/打印 |
| 弹窗选项 | 弹窗内选项 ≤ 5个 | 确认对话框不超过3个按钮 |
违反案例: 某页面一次展示20个筛选条件 → 医生找不到关键字段 正确做法: 默认显示5个常用条件,"更多筛选"展开高级选项
法则2: 费茨定律 (Fitts's Law) — 目标要大要近
移动时间 = a + b × log₂(距离/尺寸 + 1)
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 可点击区域 | 最小 44×44px(移动端 48×48px) | 移动护理PDA场景 |
| 主要操作 | 放在用户视线自然落点(右下/顶部) | 保存按钮固定在表单右下 |
| 危险操作 | 与安全操作保持物理距离 ≥ 100px | 删除按钮远离保存按钮 |
| 快捷入口 | 高频操作提供快捷键/快捷入口 | F2=保存, F3=打印 |
违反案例: "确认发药"和"取消发药"按钮紧挨着 → 误点 正确做法: 确认按钮绿色大按钮,取消按钮灰色小按钮,间距 ≥ 80px
法则3: 米勒定律 (Miller's Law) — 记忆负荷 ≤ 7±2
短时记忆容量:7 ± 2 个信息块
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 信息分组 | 每组 ≤ 7个条目 | 检验报告分组显示 |
| 导航层级 | 总层级 ≤ 4层 | 菜单→子菜单→功能→详情 |
| 表格列数 | 默认显示 ≤ 8列,其余可配置 | 处方列表核心列8个 |
| 标签页 | Tab标签 ≤ 6个,超出用下拉 | 患者详情Tab |
违反案例: 患者信息页一次展示30个字段 → 医生记不住哪个要改 正确做法: 按"基本信息/病史/过敏/诊断"分组,每组 ≤ 7个字段
法则4: 雅各布定律 (Jakob's Law) — 用户要的是熟悉感
用户把时间花在别的系统上,期望你的系统有一样的操作方式
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 布局模式 | 遵循医疗软件行业惯例 | 左导航+顶部栏+内容区 |
| 表格操作 | 行末操作按钮(编辑/删除/查看) | 与主流HIS系统一致 |
| 搜索模式 | 顶部搜索栏+筛选条件+表格 | 通用管理后台模式 |
| CRUD流程 | 列表→新增弹窗→编辑弹窗→详情抽屉 | 标准若依模式 |
违反案例: 新模块把"新增"放在表格底部 → 用户习惯在顶部找 正确做法: "新增"按钮统一在表格上方左侧
法则5: 格式塔原则 (Gestalt Principles) — 分组要明确
| 子原则 | 规则 | HIS场景 |
|---|---|---|
| 接近性 | 相关元素间距 < 不相关元素间距 | 表单label与input间距8px,字段组间距24px |
| 相似性 | 同类操作用相同颜色/形状 | 所有"保存"用蓝色,所有"删除"用红色 |
| 连续性 | 视觉引导线引导阅读流 | 表单从上到下、从左到右 |
| 封闭性 | 卡片/分组用边框或背景色区分 | 患者信息分区用卡片包裹 |
| 图底关系 | 内容层 > 背景层,弹窗要有遮罩 | Dialog背景半透明遮罩 |
违反案例: 表单字段间距不一致 → 视觉混乱 正确做法: 统一间距系统:8/12/16/24/32px
法则6: 多赫蒂阈值 (Doherty Threshold) — 响应要快
系统响应 < 400ms 时,用户生产力提升4倍
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 接口响应 | 核心接口 ≤ 200ms,普通 ≤ 500ms | 挂号、查询必须 ≤ 200ms |
| 加载反馈 | 等待 > 200ms 显示loading | el-table加载用v-loading |
| 操作反馈 | 点击后 ≤ 100ms 有视觉响应 | 按钮点击立即变灰防重复提交 |
| 列表分页 | 默认20条/页,禁止一次加载全部 | 处方列表分页 |
| 骨架屏 | 首屏加载用Skeleton占位 | 患者列表页骨架屏 |
违反案例: 查询接口3秒无响应 → 用户反复点击 正确做法: 200ms内显示loading,超时5s提示"查询超时"
法则7: 尼尔森十大可用性原则 (Nielsen's 10 Heuristics)
| # | 原则 | HIS应用规则 |
|---|---|---|
| 1 | 系统状态可见 | 每个操作后显示结果:保存成功✓、提交成功✓、审批中⏳ |
| 2 | 贴近真实世界 | 使用医疗术语(挂号、处方、医嘱),不用技术术语(CRUD、API) |
| 3 | 用户控制与自由 | 每个操作可撤销:提交可撤回、删除有确认、编辑可取消 |
| 4 | 一致性和标准 | 全系统统一:按钮颜色、弹窗样式、表格样式、表单校验 |
| 5 | 防错优先 | 危险操作二次确认;必填字段标红*;格式校验实时提示 |
| 6 | 识别而非记忆 | 下拉选择 > 手动输入;最近使用列表;搜索联想 |
| 7 | 灵活高效 | 快捷键;批量操作;常用模板;收藏功能 |
| 8 | 简洁美观 | 去掉无关信息;留白适度;视觉层次清晰 |
| 9 | 容错帮助 | 错误信息说人话:"身份证号格式错误"而非"Invalid input" |
| 10 | 帮助文档 | 复杂功能提供操作引导;Help Tooltip |
违反案例: 删除后无提示 → 用户不确定是否成功
正确做法: 删除后 ElMessage.success('删除成功') 并刷新列表
法则8: 泰斯勒定律 (Tesler's Law) — 复杂性守恒
每个系统都有不可消除的复杂性,必须 somewhere 被处理
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 简单前端复杂后端 | 用户操作尽量简单,复杂逻辑放后端 | 医保结算:用户点"结算",后端算所有费用 |
| 智能默认值 | 80%场景用默认值,减少用户输入 | 科室默认当前科室,药品默认常用规格 |
| 渐进式披露 | 先展示核心信息,高级选项折叠 | 医嘱默认常用,"更多选项"展开完整 |
| 自动化 | 能自动填充的不手动输入 | 选择患者自动填充病历号、性别、年龄 |
违反案例: 开医嘱要手动输入药品剂量、频次、途径 → 复杂 正确做法: 提供"常用医嘱模板",一键套用,仅需微调
法则9: 峰终定律 (Peak-End Rule) — 关键时刻要做好
用户记住的是体验的峰值和结束时刻
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 操作峰值 | 关键操作给正向反馈 | 挂号成功→大✓动画+患者信息卡 |
| 结束体验 | 流程结束给明确结果 | 收费完成→打印凭条+成功提示 |
| 错误峰值 | 错误也要优雅处理 | 校验失败→精确定位错误字段+红色高亮 |
| 批量操作 | 批量完成后给统计 | "成功导入58条,失败2条" |
违反案例: 批量导入完成后无提示 → 用户不知道是否成功 正确做法: 弹出结果面板:"✓ 成功58条 / ✗ 失败2条(点击查看)"
法则10: 冯·雷斯托夫效应 (Von Restorff Effect) — 隔离记忆
在相似事物中,与众不同的那个更容易被记住
| 维度 | 规则 | HIS场景 |
|---|---|---|
| 紧急标记 | 危急值用红色醒目样式 | 危急值报告→红色闪烁标签 |
| 当前选中 | 选中项明显高亮 | 菜单选中项蓝色背景+左侧条 |
| 重要操作 | 主要按钮用强调色 | "提交处方"蓝色实心,"取消"灰色描边 |
| 通知徽标 | 未读消息用Badge | 右上角铃铛红点+数字 |
违反案例: 危急值和普通信息用同一颜色 → 医生忽略 正确做法: 危急值红色脉冲动画 + 声音提醒
三、HIS医疗系统专项UI规范
3.1 色彩体系
| 用途 | 颜色 | HEX | 说明 |
|---|---|---|---|
| 主色 | 医疗蓝 | #1890ff | 品牌色、主要按钮 |
| 成功 | 安全绿 | #52c41a | 操作成功、正常状态 |
| 警告 | 警示橙 | #faad14 | 注意、待处理 |
| 危险 | 危急红 | #ff4d4f | 危急值、删除、错误 |
| 信息 | 信息灰 | #909399 | 辅助信息、次要文本 |
| 背景 | 浅灰 | #f5f7fa | 页面背景 |
| 卡片 | 白色 | #ffffff | 卡片/弹窗背景 |
状态色标准:
待诊 → #909399(灰) 已诊 → #1890ff(蓝)
已收费 → #52c41a(绿) 已发药 → #722ed1(紫)
危急 → #ff4d4f(红脉冲) 已完成 → #b7eb8f(浅绿)
3.2 间距系统 (8px基准)
| Token | 值 | 用途 |
|---|---|---|
| xs | 4px | 图标与文字间距 |
| sm | 8px | 表单项内间距、紧凑行距 |
| md | 12px | 表单项之间间距 |
| lg | 16px | 卡片内边距、区块间距 |
| xl | 24px | 区域分隔 |
| xxl | 32px | 页面级边距 |
3.3 字体规范
| 场景 | 字号 | 字重 | 说明 |
|---|---|---|---|
| 页面标题 | 20px | 600 | h1 |
| 区块标题 | 16px | 600 | h2 |
| 正文 | 14px | 400 | 默认 |
| 辅助文字 | 12px | 400 | 说明、提示 |
| 数据突出 | 24px | 700 | 统计数字、金额 |
| 危急值 | 16px | 700 | 红色加粗 |
3.4 表格设计规范
| 规则 | 说明 |
|---|---|
| 列数 | 默认 ≤ 8列,超出用横向滚动或配置列 |
| 行高 | 48px(紧凑40px,宽松56px) |
| 操作列 | 固定右侧,宽度 ≥ 160px |
| 排序 | 默认按时间倒序,支持点击列头排序 |
| 分页 | 20条/页,可切换10/20/50/100 |
| 空状态 | 无数据时显示空状态插画+文字"暂无数据" |
| 加载 | v-loading指令,骨架屏或旋转图标 |
| 斑马纹 | 奇偶行交替背景色 #fafafa |
3.5 表单设计规范
| 规则 | 说明 |
|---|---|
| 布局 | 简单表单用inline,复杂用labelWidth=120px |
| 必填标记 | 红色 * 号在label前 |
| 校验时机 | blur时校验(非实时),提交时全量校验 |
| 错误提示 | 字段下方红色文字,与字段左对齐 |
| 按钮位置 | 表单底部右侧,主按钮在右 |
| 禁用态 | 禁用字段灰底+灰字+禁止光标 |
| 加载态 | 提交按钮loading态,防重复提交 |
3.6 弹窗/抽屉规范
| 类型 | 适用场景 | 规则 |
|---|---|---|
| Dialog | 简单表单(≤6字段) | 宽度400-600px,标题+内容+底部按钮 |
| Drawer | 复杂表单/详情查看 | 宽度60%,右侧滑入,含关闭按钮 |
| Modal | 确认操作 | 标题+内容+确认/取消,危险操作红色确认 |
| Fullscreen | 大表单/复杂编辑 | 全屏,顶栏标题+关闭,底部操作栏 |
3.7 交互反馈规范
| 操作 | 反馈方式 | 示例 |
|---|---|---|
| 保存成功 | ElMessage.success | "保存成功" |
| 保存失败 | ElMessage.error | "保存失败:XXX原因" |
| 删除确认 | ElMessageBox.confirm | "确定要删除该记录吗?" |
| 表单校验 | 字段下方红色文字 | "请输入患者姓名" |
| 加载中 | v-loading | 旋转图标覆盖表格 |
| 空数据 | 空状态组件 | 插画+"暂无挂号记录" |
| 网络错误 | ElMessage.error | "网络异常,请重试" |
| 无权限 | ElMessage.warning | "您没有该操作权限" |
3.8 医疗HIS特殊交互
| 场景 | 交互要求 |
|---|---|
| 危急值 | 红色脉冲动画 + 弹窗强制确认 + 声音提醒 + 操作记录 |
| 医嘱审核 | 双人审核弹窗,审核人签章,不可撤销提示 |
| 处方开具 | 药品搜索联想 + 剂量自动计算 + 相互作用预警弹窗 |
| 费用结算 | 费用明细折叠/展开 + 医保/自费分类 + 打印预览 |
| 患者搜索 | 模糊搜索+拼音首字母+身份证号+病历号 多维度 |
| 电子签名 | 手写板签名+密码验证 双重认证 |
| 打印功能 | 套打对齐微调 + 批量打印 + 预览 |
| 权限控制 | 按钮级权限 v-hasPermi + 数据权限过滤 |
四、设计文档模板
每个新模块必须按此模板编写设计文档
# 模块名 设计文档
## 1. 页面列表
| 页面 | 路由 | 类型 | 说明 |
|------|------|------|------|
| 列表页 | /module/list | 管理页 | ... |
| 新增弹窗 | - | Dialog | ... |
## 2. 页面布局设计
### 2.1 列表页
┌─────────────────────────────────┐ │ 搜索区 [关键词] [筛选] [搜索] │ ├─────────────────────────────────┤ │ 操作区 [+新增] [导出] [批量删除] │ ├─────────────────────────────────┤ │ 数据表格 (el-table) │ │ 列1 | 列2 | 列3 | ... | 操作 │ ├─────────────────────────────────┤ │ 分页 [1] [2] [3] ... │ └─────────────────────────────────┘
## 3. 交互效果清单
| 操作 | 触发方式 | 效果 | 反馈 |
|------|---------|------|------|
| 点击"新增" | 按钮click | 打开Dialog | - |
| 点击"保存" | 按钮click | 提交API→关闭Dialog→刷新列表 | success消息 |
| 点击"删除" | 按钮click | 二次确认弹窗→调用API→刷新 | success消息 |
| 表单校验 | blur/submit | 字段下方提示 | error文字 |
## 4. 前后端调用流程
### 4.1 查询列表
用户操作: 页面加载/点击搜索 → 前端: GET /api/v1/module/list?pageNum=1&pageSize=20&keyword=xxx → 后端: Controller.list() → AppService.query() → Service.page() → 返回: {code:200, data:{rows:[...], total:100}} → 前端: el-table渲染 rows,pagination渲染 total
### 4.2 新增记录
用户操作: 点击"新增"→填写表单→点击"保存" → 前端: POST /api/v1/module {field1, field2, ...} → 后端: Controller.add() → AppService.create() → Service.save() → 返回: {code:200, msg:"操作成功"} → 前端: ElMessage.success → 关闭Dialog → getList()
## 5. 状态流转
| 状态 | 值 | 下一状态 | 触发条件 |
|------|-----|---------|---------|
| 草稿 | 0 | 已提交 | 用户点击提交 |
| 已提交 | 1 | 已审核 | 审核人点击审核 |
## 6. 异常处理
| 场景 | UI表现 |
|------|--------|
| 网络断开 | ElMessage.error("网络异常") |
| 数据为空 | 空状态插画+"暂无数据" |
| 权限不足 | 按钮隐藏/v-if控制 |
| 加载中 | v-loading覆盖 |
五、违反检查清单
代码审查时对照此清单逐项检查
□ 页面布局是否遵循左导航+顶部栏+内容区?
□ 每页功能按钮是否 ≤ 3个主要操作?
□ 表单字段是否 ≤ 12个?超出是否分步/折叠?
□ 可点击区域是否 ≥ 44px?
□ 危险操作是否与安全操作保持距离?
□ 加载等待是否显示loading?
□ 操作成功/失败是否有明确反馈?
□ 删除操作是否有二次确认?
□ 表格是否分页?是否默认20条?
□ 空数据是否有空状态提示?
□ 色彩是否符合色彩体系?
□ 间距是否使用8px基准系统?
□ 字体是否符合字体规范?
□ 弹窗类型选择是否合理?
□ 表单校验是否blur触发?
□ 医疗特殊交互(危急值/医嘱等)是否按规范实现?
□ 设计文档是否包含:UI布局+交互清单+调用流程?
六、参考文献
| 来源 | 内容 |
|---|---|
| Hick (1952) | Hick's Law — 选择反应时间 |
| Fitts (1954) | Fitts's Law — 运动时间与目标尺寸 |
| Miller (1956) | Miller's Law — 7±2信息块 |
| Jakob Nielsen | 10 Usability Heuristics |
| Gestalt Psychology | 接近性/相似性/连续性/封闭性/图底 |
| Doherty & Thadhani (1982) | 400ms响应阈值 |
| Larry Tesler | 复杂性守恒定律 |
| Kahneman | 峰终定律 |
| Hedwig von Restorff | 隔离效应 |
| ISO 9241-210 | 以人为中心的交互系统设计 |
| GB/T 33758-2017 | 人机交互系统人机界面设计原则 |
| WS/T 500-2017 | 电子病历共享文档规范 |
⚠️ 本文件是UI设计铁律的唯一信源。所有前端模块设计文档必须遵守本规范。