Files
his/MD/specs/UI_DESIGN_IRON_RULES.md
华佗 db5fb88627 docs(specs): 添加UI设计铁律法则 - 十大设计法则+医疗HIS专项规范
- 新增 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
2026-06-06 11:12:02 +08:00

17 KiB
Raw Blame History

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渲染 rowspagination渲染 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设计铁律的唯一信源。所有前端模块设计文档必须遵守本规范。