name: HIS-UI设计规范
description: HIS医院信息系统完整UI设计规范:设计基础、页面布局、弹出层、基础组件、全局结构
type: reference
HIS-UI设计规范
覆盖系统:住院医生站(Doctws_WEB)、门诊医生站(OutPatient_WEB)、护理文书(NursingDoc_WEB)、住院护士站(NurseStation)
目标分辨率:1080p (1920x1080) 医院标准配置
1. 设计基础
1.1 字体规范
字体族
// 标题/强调
font-family: PingFangSC-Medium, PingFang SC;
// 正文
font-family: PingFangSC-Regular, PingFang SC;
// 打印(门诊诊断证明等)
font-family: 宋体;
字号三档
| 用途 | 字号 | 字重 | 适用范围 |
|---|
| 页面标题 | 16px | 700/bold | comDoc_big__title / dicTitle / adviceTitle |
| 正文/按钮/表格/筛选栏label | 14px | 400 | 表格内容、按钮文字、表单输入、筛选区标签 |
| 辅助文字/说明/时间戳 | 12px | 400 | 说明文字、时间戳、次要备注 |
注意:筛选栏 label(如"药房"、"科室")属于正文级别 14px/400,不是辅助文字。
1.2 CSS变量
背景色
| 变量名 | 用途 | 值 | 说明 |
|---|
--bg-page | 页面底色 | #F2F4F8 | 冷白微蓝灰,面板纯白浮出 |
--bg-panel | 面板/卡片 | #FFFFFF | 与页面底色形成对比 |
--bg-search | 搜索区背景 | #F0F3F8 | 淡蓝灰,与白色标题栏区分 |
--bg-thead | 表头背景 | #D8DEE9 | 蓝灰,比分组行深一档 |
--bg-group | 分组行背景 | #E8ECF4 | 浅蓝灰,与表头、隔行均拉开差距 |
--bg-stripe | 斑马纹行 | #F5F7FA | 极淡冷灰,与分组行拉开一档 |
--bg-hover | hover行 | #D0E2F5 | 明确蓝调 |
--bg-selected | 选中行 | #C9DCF2 | 强蓝调,选中醒目 |
--bg-gap | 间隔条 | #D8DEE9 | 较深蓝灰,明确分隔 |
--bg-float | 浮层/抽屉 | #FAFBFD | 浮层专用 |
--bg-header | 顶部导航 | #005CAB | 医疗蓝品牌色 |
边框色
| 变量名 | 用途 | 值 |
|---|
--border-light | 轻边框 | #E2E6EC |
--border-normal | 常规边框 | #C8CDD6 |
文字色
| 变量名 | 用途 | 值 |
|---|
--text-primary | 主文本/标题 | rgba(0,0,0,0.85) |
--text-regular | 正文 | rgba(0,0,0,0.65) |
--text-secondary | 次要文本/label | #606266 |
--text-placeholder | 辅助文本 | #909399 |
--text-white | 白色文字 | #fff |
功能色
| 变量名 | 用途 | 值 | 场景 |
|---|
--color-primary | 主题蓝 | #1890FF | 主操作/链接/选中态 |
--color-primary-light | 主题蓝浅 | #E6F7FF | 浅底色 |
--color-success | 成功绿 | #52C41A | 成功/在科/正常 |
--color-warning | 警告橙 | #FAAD14 | 警告/待处理/注意 |
--color-danger | 危险红 | #F5222D | 危急/错误/删除 |
--color-info | 信息蓝 | #1890FF | 信息提示 |
间距变量
| 变量名 | 值 |
|---|
--gap-xs | 4px |
--gap-sm | 6px |
--gap-md | 10px |
--gap-lg | 12px |
--gap-xl | 16px |
1.3 等级色体系
本系统存在三套等级色,用途不同,不可混淆。
病情等级色
用于病情/危重程度标签、状态标记等通用场景:
| 等级 | 色值 | CSS类名 |
|---|
| 特级/病危/濒危 | #F73D47 (红) | .red |
| 一级/危重 | #F73D47 (红) | .red |
| 二级/急症/病重 | #E6A23C (黄) | .yellow |
| 三级/一般/非急症 | #55AC57 (绿) | .green |
护理等级色(skin 系列)
用于护理文书、护士站等模块的护理等级标签:
| 等级 | 色值 | CSS类名 |
|---|
| 特级 | #E96767 | .skinA |
| 一级(含儿童) | #A75DFF | .skinB |
| 二级(含儿童) | #55AC57 | .skinC |
| 三级(含儿童) | #668FFF | .skinD |
| 无等级 | 默认 | .noSkin |
床卡色带
用于病房管理/护士站床卡的左边框+背景色:
| 等级 | 边框色 | 背景色 |
|---|
| 特级/危重 | #E53935 | #FFF5F5 |
| 一级护理 | #5C6BC0 | #F0F0FF |
| 二级护理 | #2196F3 | #EDF5FF |
| 三级护理 | #4CAF50 | #EDFAED |
注意:三套色值各不相同,分别用于不同场景,不可替换。
1.4 间距规范
区域间距
| 位置 | padding |
|---|
| 内容区(有侧栏) | 8px |
| 内容区(无侧栏) | 12px 16px |
| 页面标题 | 10px 12px |
| 搜索区 | 8px 12px |
| 搜索区与表格间间隔条 | 6px solid --bg-gap |
| 表格区域 | 8px 12px |
| 表单行间距 | 8-10px |
| 弹窗 header | 12px 16px |
| 弹窗 body | 12-16px |
| 分页区 margin-top | 8px |
组件间距
| 位置 | 值 |
|---|
| 相邻按钮 | margin-left 6px |
| 按钮组容器 | gap 4px |
| 搜索标签右边距 | 5-8px |
| 输入框/选择器右边距 | 16-20px |
| form-item 下间距 | 10-16px |
| 标签(tag)右边距 | 10px |
2. 页面布局
类型一:查询维护页(最高频)
- 场景:字典维护、模板管理、规则配置 — "搜索+表格+弹窗编辑"的CRUD
- 结构:标题栏 → 搜索区 → 间隔条 → 表格 → 分页
- 标题栏:padding 10px 12px, 16px bold, border-bottom 1px solid --border-light
- 搜索区:background --bg-search, padding 8px 12px, border-bottom 6px solid --bg-gap
- 搜索区背景色规则:
- 上下布局(搜索区贯穿宽度)→
--bg-search 微灰底
- 左右布局(搜索区居左)→
--bg-panel 白底,避免左右底色割裂
- 表格:使用 spec-table 统一样式
- 分页:padding 6px 12px 10px, justify-content flex-end
类型二:Tab页签页
- 场景:多功能并列切换
- Tab栏:高度 51px, 字号 16px/500, 选中色
#1890FF, 非选中色 --text-secondary
- 激活条:全宽 border-bottom 2px solid --color-primary(非居中短条)
- Tab内容区:padding 12px 16px, background --bg-panel
- 表格满铺场景:内容区 padding 可置 0,表格撑满宽度
- 右侧操作区:Tab 栏右侧可放置操作按钮(诊毕/打印/费用补录等),与 Tab 同行 flex 右对齐
- 面板内筛选栏:位于白面板内部,无需 --bg-search 分层,使用 --bg-panel 白底
类型三:左右分栏页
- 场景:左侧选择+右侧详情
- 分隔方式:grid gap 8px,面板间由 --bg-page 底色自然露出形成柔和分隔
- 宽度方案:
- 固定宽度:左 260-380px fixed, 右 calc(100%-左宽)
- 百分比:左 23%, 右 flex:1
| 模块 | 左宽 | 备注 |
|---|
| 住院医嘱模板 | 294px | — |
| 门诊医嘱模板 | 260px | — |
| 门诊患者接诊 | 380px fixed | box-shadow |
| 护理文书书写 | 23% | margin-left 10px |
| 历史处方侧边抽屉 | 305px | — |
| 打印组件 | 211px | — |
类型四:综合管理页(床卡三视图)
- 场景:病房管理 — 多患者状态概览
- 三种视图:大卡(grid 4列)、小卡(grid 7列)、列表(sticky表头)
- 大卡结构:border-left 4px solid(等级色) → 头部(床号+姓名+性别+年龄+等级标签) → 诊断 → 底部标签图标行
- 床位状态:
- 空床:虚线
1px dashed #C0CAD8, 背景 #F4F6F9
- 占床:橙色渐变
linear-gradient(175deg, #FDF5E8, #FFFDF7), 边框 #FFA726
- 包床:绿色渐变
linear-gradient(175deg, #EDFAED, #F8FFF8), 边框 #66BB6A
- 筛选标签:pill形, border-radius 12px, padding 3px 10px, 13px
- 文字筛选标签(filter-tag):用于查询区多选一筛选项(如全部/门诊/住院、全部/未登记/已登记/已审核),区别于 radio-button 蓝色填充样式,避免与查询按钮撞色
- 默认态:color
--text-secondary,border 1px solid --border-normal,无背景填充
- 悬停态:color
--text-primary,border-color --border-normal
- 选中态:color
--color-primary,background --color-primary-light,border-color --color-primary,font-weight 600,border-radius 3px
- 组间分隔:竖线
width:1px; height:16px; background:--border-normal
- 组内间距:gap 0,紧贴排列,
margin-left:-1px 合并相邻边框,首尾圆角 border-radius 3px,中间 0
- 视图切换:按钮组, border 1px solid --border-normal, border-radius 4px
- 床卡护理等级色带:参见 1.3 等级色体系 → 床卡色带
类型五:批量录入页(左树+右表)
- 场景:批量操作 — 左侧选择多患者,右侧集中录入
- 布局:el-col :span="4"(患者树) / el-col :span="20"(录入表格)
- 表格行高:42-54px(使用 el-table,不受 vxe-table 全局 35px 影响;若使用 vxe-table 则需通过
row-config.height 或更高优先级选择器覆盖全局 35px)
- 分隔:border-right 4px solid --bg-gap
- 选中患者行:background --bg-selected
类型六:弹窗工具页 / 打印预览页
- 场景:独立小功能弹窗(二维码/签名确认) 或 打印预览(iframe)
- 弹窗工具页:宽 228-480px, 居中, destroy-on-close
- 打印预览页:左侧类型列表 211px / 右侧 850px / 底部按钮居中
类型七:侧边导航工作台(固定图标栏)
| 属性 | 规范值 |
|---|
| 导航栏宽度 | 60px |
| 导航栏背景 | #F0F3F8 (--bg-search) |
| 导航项尺寸 | 48-50px宽, min-height 48px |
| 导航项圆角 | 10-12px |
| 导航项默认色 | --text-secondary |
| 导航项hover | background --bg-hover |
| 导航项激活态 | background --color-primary 白字 |
| 导航文字字号 | 11-12px |
| 角标(可选) | 18x18px圆形, 红渐变 |
| 切换方式 | 点击切换,禁止hover滑出 |
| 侧边分隔 | border-right 1px solid --border-normal |
布局选型决策表
| 业务特征 | 推荐布局 | 举例 |
|---|
| 增删改查+搜索 | 查询维护页 | 字典管理、模板维护 |
| 多功能并列切换 | Tab页签页 | 患者接诊 |
| 选项目+看详情 | 左右分栏页 | 医嘱模板、文书书写 |
| 全局概览+快捷操作 | 综合管理页 | 病房管理、护士站 |
| 批量操作多对象 | 批量录入页 | 体征批量录入 |
| 独立小工具/打印 | 弹窗工具页 | 二维码、诊断证明打印 |
| 多功能工作台 | 侧边导航工作台 | 护士站、病房管理 |
3. 弹出层
3.1 业务弹窗 (el-dialog)
- 用途:复杂表单或详情展示
- 可拖拽:
v-dialogDrag
- header:16px bold, padding 12px 16px, border-bottom 1px solid --border-light
- body:padding 12-16px
- footer:主按钮 --color-primary 白字, padding 10px 16px, border-top, justify-content flex-end, gap 8px
- 宽:默认480px,按场景可调
弹窗内部布局规范
- 整体层级:Header → Body → Footer,禁止无层次堆叠
- Header:背景 --bg-panel, 标题 16px/700/--text-primary
- Body:12-16px 内边距,内部区域通过背景/边框/留白分层
- Footer:按钮右对齐,主按钮 --color-primary,次按钮白底描边
弹窗内容分层
- 顶部表单区 — 背景 --bg-search, padding 10px 16px, 底边 1px solid --border-light
- 列表标题区 — 背景 --bg-panel, padding 8px 12px, min-height 40px, 底边 1px solid --border-light, 标题 14px/600
- 搜索操作区 — 背景 --bg-search, padding 8px 12px, 输入框高度 28px
弹窗内下拉面板
- 层级:必须浮于弹窗正文之上,不得被裁切
- 面板样式:背景 --bg-panel, 边框 1px solid --border-normal, 圆角 4px
- 表头:背景 --bg-thead, 12-14px/600/--text-primary
- 数据行:14px/--text-regular, 斑马纹 --bg-stripe, hover --bg-hover
- 列宽:表头与数据列宽一致,长文本省略
弹窗内双选组件
- 结构:左列表 + 中间移动按钮 + 右列表
- 列表框:边框 1px solid --border-normal, 圆角 4px, 字号 12px
- 选中态:浅蓝背景,禁止浏览器默认黑底
- 交互:点击箭头移动,双击也可移动,不允许重复加入
弹窗核查清单
- [ ] 标题栏 16px/700/12px 16px/底部分隔线
- [ ] body 12-16px 内边距
- [ ] 内容区按背景和边框形成层次
- [ ] 正文/标签/按钮统一 14px,辅助文字 12px
- [ ] 下拉面板无遮挡/裁切
- [ ] 下拉表头/数据行/hover/斑马纹统一
- [ ] 双选组件无溢出/错位/默认黑框
- [ ] checkbox/radio 组与 label 同行高
3.2 抽屉面板
- el-drawer(字典维护型):患者列表、导航菜单、模板引用
- header:50px高, 16px bold, border-bottom 1px solid --border-light
- 侧边阴影:
box-shadow: 2px 0 12px rgba(0,0,0,0.08)
- 宽度:依场景 300-760px
- 自定义侧边栏(业务列表型):历史处方、请药记录、药典查询
- 使用自定义 div + CSS transition 实现(非 el-drawer)
- header:50px高, 16px bold, border-bottom 1px solid --border-light
- 侧边阴影:
box-shadow: 2px 0 12px rgba(0,0,0,0.08)
- 宽度:依场景 300-1480px
- 遮罩层:position fixed, background rgba(0,0,0,0.1), transition opacity 0.22s
选型:字典维护型用 el-drawer,业务列表型用自定义侧边栏。参见 4.1 组件选型。
3.3 轻提示 ($message)
- 显示时间:3秒自动关闭,可手动关闭
- z-index:低于 dialog,不遮挡弹窗
- 四种类型:
| 类型 | 背景 | 边框 | 文字 |
|---|
| success | #F6FFED | #B7EB8F | #52C41A |
| error | #FFF2F0 | #FFA39E | #F5222D |
| warning | #FFFBE6 | #FFE58F | #FAAD14 |
| info | #E6F7FF | #91D5FF | #1890FF |
3.4 确认框 ($confirm / $alert)
- $confirm:确认型操作,有"确定"和"取消"
- $alert:纯信息告知,只有"确定"
- 宽:380px
- 按钮:confirmButtonText="确定", cancelButtonText="取消"
- header:padding 14px 16px, 含警告图标
- body:padding 0 16px 14px
3.5 角标通知 ($notify)
- 位置:top-right(默认)
- 持续时间:4500ms,可手动关闭
- 结构:title + message
- 左边框色:success
#52C41A / error #F5222D / warning #FAAD14 / info #1890FF
4. 基础组件
4.1 表格
组件选型
| 业务场景 | 表格组件 | 抽屉组件 | 示例 |
|---|
| 字典维护型(数据量小、操作简单) | el-table | el-drawer | 药品字典、科室维护、基础配置 |
| 业务列表型(数据量大、交互复杂) | vxe-table | 自定义侧边栏 | 医嘱列表、请药明细、护理记录 |
禁止使用原生 <table>。所有数据表格必须使用 el-table 或 vxe-table。
spec-table(el-table 场景)
- thead:background --bg-thead, padding 6-8px, font-weight 600, color --text-primary
- td:padding 5-8px, border 1px solid --border-light, color --text-regular
- 斑马纹:偶数行 background --bg-stripe
- hover:background --bg-hover
- th border:1px solid --border-light
重要:表头用 --text-primary(0.85),内容用 --text-regular(0.65)。两种表格组件已通过全局 CSS 自动设置,无需手动指定。
表格分组行
- 背景:--bg-group(与表头 --bg-thead、隔行 --bg-stripe 均有差距)
- 文字色:--color-primary(蓝色,与表头黑色、数据行灰色形成三层)
- 字重:500(比表头 600 轻,比数据行 400 重)
- 字号:14px
- hover:分组行不响应,仅数据行响应
- 辅助信息:
<small>, 12px/--text-secondary/400
- 操作按钮:margin-left 12px, 文本按钮样式(无边框、主题色/危险色文字)
vxe-table(业务列表场景)
版本:vxe-table@3.7.9(Vue 2 兼容),配合 xe-utils
全局主题覆盖(App.vue 非 scoped):
/* 统一行高:表头与数据行均为 35px,用 height + line-height 控制,padding 上下归零 */
.vxe-table--render-default .vxe-header--column,
.vxe-table--render-default .vxe-body--column {
height: 35px !important;
line-height: 35px !important;
padding-top: 0 !important;
padding-bottom: 0 !important;
padding-left: 8px !important;
padding-right: 8px !important;
vertical-align: middle !important;
}
.vxe-table .vxe-header--column { background: var(--bg-thead); color: var(--text-primary); font-weight: 600; font-size: 14px; }
.vxe-table .vxe-body--column { font-size: 14px; color: var(--text-regular); }
.vxe-table .vxe-body--row.row--stripe .vxe-body--column { background: var(--bg-stripe); }
.vxe-table .vxe-body--row.row--hover .vxe-body--column { background: var(--bg-hover); }
.vxe-table--border-line { border-color: var(--border-light); }
/* .vxe-cell 统一 flex 布局,消除 show-overflow 导致的表头/数据行布局模型不一致 */
.vxe-table .vxe-cell { display: flex; align-items: center; line-height: 35px !important; padding: 0 8px !important; }
.vxe-table .vxe-cell--checkbox { overflow: visible; }
.vxe-table .vxe-empty-text { color: var(--text-placeholder); padding: 18px 10px; }
.vxe-table .row--group .vxe-body--column { background: var(--bg-group) !important; color: var(--color-primary); font-weight: 500; font-size: 14px; }
基础配置:
<vxe-table border="inner" stripe :row-config="{ isHover: true }" :data="tableData"
empty-text="暂无数据" show-overflow auto-resize>
| 属性 | 值 | 说明 |
|---|
border | "inner" | 内边框,与 HIS-UI 表格风格一致 |
stripe | — | 斑马纹,使用 --bg-stripe |
row-config.isHover | true | hover 高亮,使用 --bg-hover |
show-overflow | — | 超宽列省略号+tooltip |
auto-resize | — | 自动适应容器宽度 |
分组行:
- 在数据数组前插入
{ _isGroup: true, _groupLabel: '...' } 虚拟行
- 通过
:row-class-name 回调返回 'row--group' 类名
- 列通过
#default slot 判断 _isGroup 渲染分组标签
- 样式已包含在上方全局 CSS 块中(
.row--group 规则)
Checkbox 列:
<vxe-column type="checkbox" width="34" align="center"></vxe-column>
- 通过
checkbox-config.checkMethod 排除分组行
- 通过
@checkbox-change / @checkbox-all 事件同步状态
Checkbox 主题覆盖(与 vxe-table 默认皮肤同优先级):
.vxe-table--render-default .vxe-cell--checkbox .vxe-checkbox--icon { font-size: 1.1em; color: var(--text-secondary); }
.vxe-table--render-default .vxe-header--column .vxe-cell--checkbox .vxe-checkbox--icon { color: var(--text-primary); }
.vxe-table--render-default .is--checked.vxe-cell--checkbox .vxe-checkbox--icon,
.vxe-table--render-default .is--indeterminate.vxe-cell--checkbox .vxe-checkbox--icon { color: var(--color-primary); }
.vxe-table--render-default .vxe-cell--checkbox:not(.is--disabled):hover .vxe-checkbox--icon { color: var(--color-primary); }
表格内嵌 el-select:
<vxe-column field="pharmacy" title="药房切换" width="124">
<template #default="{ row }">
<el-select size="mini" :value="row.pharmacy" @change="onChange(row.id, $event)">
<el-option v-for="p in list" :key="p" :label="p" :value="p"></el-option>
</el-select>
</template>
</vxe-column>
4.2 按钮
- 通用:height 30px, border-radius 3px, font-size 14px
- primary:background --color-primary, color #fff, hover #1171D6
- default:background #fff, color --text-regular, border --border-normal
- danger:transparent, color --color-danger, border --color-danger, hover bg --color-danger color #fff
垂直居中
用 line-height 控制垂直居中,不用 padding-top/bottom(中文汉字渲染偏上问题)。
| 按钮类型 | line-height | padding | 实际高度 |
|---|
| 常规按钮 | 28px | 0 15px | 30px |
| 圆形按钮(is-circle) | 28px | 0 | 30px |
| 表格内文本按钮 | 24px | 0 | ~24px |
| 表格外文本按钮 | 28px | 0 | ~28px |
.el-button { font-size: 14px; line-height: 28px; padding: 0 15px; }
.el-button--mini, .el-button--small { font-size: 14px; line-height: 28px; padding: 0 15px; }
.el-button--mini.is-circle, .el-button--small.is-circle { padding: 0; }
.el-button--text { padding: 0; line-height: 28px; }
.el-table .el-button--text { font-size: 13px; padding: 0; line-height: 24px; }
按钮间距
| 位置 | 值 | 说明 |
|---|
| 相邻按钮 | margin-left 6px | 覆盖 Element UI 默认 10px |
| 按钮组容器 | gap 4px | 微调紧凑感 |
| 按钮内文字 | padding 0 15px | — |
4.3 标签 (tag)
- 通用:padding 1-6px, border-radius 3px, font-size 11-12px, font-weight 500
| 类名 | 背景 | 文字色 |
|---|
| .blue | #E6F7FF | #1890FF |
| .green | #F6FFED | #52C41A |
| .red | #FFF1F0 | #F5222D |
| .orange | #FFFBE6 | #FAAD14 |
| .gray | #F0F3F8 | #909399 |
| .purple | #F7F0FF | #9743FC |
4.4 输入框 (demo-input)
- height 30px, border-radius 3px, border 1px solid --border-normal, padding 0 8px, font-size 14px
- focus: border-color --color-primary
4.5 下拉选择 (demo-select)
- height 30px, border-radius 3px, border 1px solid --border-normal, padding 0 24px 0 8px
- appearance none + 自定义SVG箭头图标
4.6 分页 (demo-pagination)
- page-btn: min-width 28px, height 28px, border-radius 3px
- active: background --color-primary, color #fff
- page-info: color --text-secondary, margin-right 8px
5. 全局结构
5.1 顶部导航栏 (Header)
布局结构
.header (48px flex容器)
├── .header-left (flex:1, 左对齐)
│ ├── .header-left-img — logo 30×30px
│ ├── .header-left-name — 系统名称
│ └── BannerSmall — 患者/通知横幅
└── .header-right (右对齐)
└── .header-user-con (flex行内排列)
├── "欢迎您," 文字
├── el-dropdown — 用户名(修改密码/退出)
├── el-select — 科室切换下拉
├── .btn-fullscreen — 全屏切换
└── .backIndex — 返回首页
色彩与尺寸
| 属性 | 值 | 说明 |
|---|
| 背景 | #005CAB (--bg-header) | 医疗蓝品牌色 |
| 阴影 | 1px 1px 4px 1px rgba(0,0,0,0.12) inset | 内阴影 |
| 高度 | 48px | line-height 同 |
| 文字色 | #fff | — |
| 右侧区透明度 | 0.65 | — |
| 系统名称 | 16px | — |
| 操作文字/按钮 | 14px | — |
| Logo | 30×30px | — |
| 左内边距 | 24px | — |
| 右内边距 | 40px | — |
组件样式
- 用户名:右边框 1px solid #e9e9e9, padding-right 16px
- 科室下拉:背景透明、无边框、白色文字, 动态宽度
(14×字数+10)px
- 全屏按钮:鼠标手型, 图标垂直居中
- 下拉菜单项:opacity 0.65
5.2 滚动条 (Scrollbar)
标准滚动条
::-webkit-scrollbar { width: 6px; height: 6px; }
::-webkit-scrollbar-thumb { border-radius: 5px; background: rgba(80,79,79,0.2); }
- 适用:页面主区域、表格、弹窗内列表、侧边栏
- 轨道:透明(与容器背景融合)
大滚动条
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: #d6d6d6; border-radius: 2px; }
::-webkit-scrollbar-thumb { background: #bfbfbf; border-radius: 10px; }
::-webkit-scrollbar-corner { background: #efefef; }
特殊处理
- 报表查询页:隐藏滚动条
- 打印区域:5px 宽或隐藏
5.3 目录树 (Tree)
| 属性 | 值 |
|---|
| 节点字号 | 14px |
| 节点图标 | 14×14px |
| 节点间距 | margin-bottom 10px |
| 选中背景 | #e2eaff |
| 选中文字色 | --color-primary |
| 展开图标 | 隐藏默认,自定义旋转箭头, left 12px |
| 文字溢出 | text-overflow: ellipsis |
| 缩进 | 每级 16-20px |
- 目录树占左侧 23% 或固定 260-380px
- 树容器高度跟随内容区,内部使用大滚动条
- 选中节点后右侧内容区联动切换
5.4 浮动按钮(侧边)
左侧浮动按钮(门诊)
| 按钮 | 背景色 | 宽 | 字号 | 位置 |
|---|
| 历史处方 | #FAAD14 | 20px | 12px | left:0, top:326px |
| 医嘱模板 | rgba(110,205,63,1) | 20px | 12px | left:0, top:252px |
| 药典查询 | #108EE9 | 20px | 12px | left:0, top:60% |
| 患者列表 | #1890FF | 20px | 12px | left:0, top:自定义 |
- 文字竖排(writing-mode: vertical-rl)
- 靠左贴边,hover 展开为抽屉面板
右侧浮动按钮(护理引用)
- 主按钮:39×39px, 圆形(50%), 背景
#43D381, fixed right:8px bottom:100px
- 子按钮:39-46px, 圆形, hover --color-primary 白字
- 展开区域:164×164px, 右侧向上展开
6. 医生站布局规范
覆盖门诊医生站(OutPatient_WEB)、住院医生站(Doctws_WEB)
布局结构:顶部导航 → Tab页签栏 → 患者信息栏 → 间隔条 → 内容区(筛选栏+医嘱列表+录入区)
6.1 患者信息栏
位于 Tab 栏下方、内容区上方,固定不滚动。
| 属性 | 规范值 |
|---|
| 高度 | 64px |
| 背景 | --bg-panel |
| 内边距 | 0 20px |
| 布局 | flex, align-items: center |
| 底部分隔 | 1px solid --border-light |
左侧头像
| 属性 | 值 |
|---|
| 尺寸 | 48×48px |
| 圆角 | 50% |
| 背景 | --bg-search |
| 右边距 | 12px |
第一行:姓名+基本信息
- 布局:line-height 26px, display flex, align-items center
- 姓名:16px / 700 / --text-primary,右边距 8px
- 身份证图标:cursor pointer,margin-top -3px
- 性别/ID:14px / 400 / --text-secondary
- ID 标签:font-weight 700, color --text-primary
- 过敏标签:过敏: font-weight 700, color --text-primary;过敏值 --color-success
第二行:标签区
- 布局:display flex, align-items center
- 标签样式:padding 1px 6px, border-radius 3px, font-size 14px, font-weight 500
- GCP 标签:background #F6FFED, color --color-success
- 医保标签:background --color-primary-light, color --color-primary
- 慢特标签:background #FFFBE6, color --color-warning, cursor pointer
- 费别/身份文字:font-weight 700 / color --text-primary(标签名),值紧跟其后
- 标签间右边距:10px
6.2 间隔条
位于患者信息栏与内容区之间,明确分隔上下区域。
| 属性 | 规范值 |
|---|
| 高度 | 6px |
| 背景 | --bg-gap (#D8DEE9) |
6.3 筛选栏
位于内容区顶部,面板内白底,无搜索区分层背景。
| 属性 | 规范值 |
|---|
| 高度 | 约32px(由padding 6px 12px + 控件高度28px自然撑开) |
| 背景 | --bg-panel(白底) |
| 内边距 | 6px 12px |
| 底部间距 | margin-bottom 4px |
| 布局 | flex, align-items center |
门诊版筛选栏
| 控件 | 类型 | 尺寸 |
|---|
| 医嘱类型 | select | width 113px, height 28px |
| 当前/历史就诊 | radio-group | font-size 14px |
| 右侧操作 | button组 | height 30px, gap 6px |
住院版筛选栏
| 控件 | 类型 | 尺寸 |
|---|
| 医嘱类型 | select | width 75px, height 28px |
| 长/临筛选 | radio-group | 全部/长期/临时 |
| 状态筛选 | radio-group | 全部/活动/变动/驳回/待审核 |
| 医嘱搜索 | input | width 155px |
| 更多筛选 | popover | 含开始时间、用法等 |
| 右侧操作 | button组 | 提交、停全部医嘱等 |
6.4 医嘱列表
表格结构
- 表头表体分离:表头独立 table(不滚动),表体独立 div(overflow-y:auto 滚动)
- 列宽同步:通过 colgroup + table-layout:fixed 保证表头与表体列宽一致
- 表头固定:表头始终可见,滚动条仅出现在表体区域
表格尺寸
适用范围:以下尺寸仅限自定义表头表体分离表格(表头独立 <table>,表体独立滚动 <div>)。vxe-table 统一使用 35px 行高,见 4.1 节。
| 属性 | 门诊 | 住院 |
|---|
| 表头高度 | 34px | 36px |
| 行高 | 40px | 38px |
| 字号 | 14px | 14px |
表格样式
| 元素 | 样式 |
|---|
| 表头背景 | --bg-thead |
| 表头文字 | --text-primary, font-weight 600 |
| 单元格文字 | --text-regular |
| 单元格内边距 | 6px 10px |
| 行边框 | border-bottom 1px solid --border-light |
| 列分隔线 | border-right 1px solid --border-light,最后一列无 |
| 表头底线 | border-bottom 1px solid --border-normal |
| 斑马纹 | 偶数行 background --bg-stripe |
| hover行 | background --bg-hover |
| 滚动条 | 6px 宽,轨道透明,滑块 rgba(80,79,79,0.2) |
门诊医嘱列表列结构
| 列名 | 宽度 | 对齐 | 说明 |
|---|
| 类型 | 50px | center | 条件显示(分组行) |
| 医嘱内容 | min-width 654px | left | 药品行含子列,非药品仅名称 |
| 医生说明 | 200px | left | 药品或分组非药品时显示 |
| 医保等级 | 80px | center | 仅药品时显示 |
| 费别 | 50px | center | "医保"/"自费" |
| 金额 | 90px | right | 非已取消状态显示 |
| 下达时间 | 160px | left | 仅分组行显示 |
| 下达医生 | 85px | left | 仅分组行显示 |
| 执行科室 | 110px | center | 始终显示 |
| 状态 | 70px | center | fixed right,含收费/退费/执行等标记 |
| 操作 | 110px | center | fixed right,按钮随状态变化 |
住院医嘱列表列结构
| 列名 | 宽度 | 对齐 | 说明 |
|---|
| 长临 | 50px | center | 长期/临时标识 |
| 类型 | 50px | center | 西药/中成药/检验/检查 |
| 下达时间 | 110px | left | 年份截断,tooltip 显示完整时间 |
| 医嘱内容 | min-width 390px | left | 自定义组件 OrderItemForDoctor |
| 数量 | 70px | center | 药品:数量+单位;非药品:数量+sdUnit |
| 用量 | 90px | center | dose + doseUnits |
| 用法 | 85px | center | routeName |
| 频次 | 78px | center | description |
| 执行时段 | 85px | center | freqTime |
| 医生说明 | 135px | left | 空时显示 "-" |
| 下达医生 | 80px | left | 仅分组首行 |
| 开始时间 | 110px | left | 保存状态隐藏 |
| 停止医生 | 80px | left | 仅分组首行 |
| 停止时间 | 110px | left | 年份截断 |
| 执行科室 | 110px | center | 始终显示 |
| 费别 | 50px | center | fixed right |
| 适应症 | 65px | center | fixed right,值=0 显示"不符合" |
| 状态 | 50px | center | fixed right |
| 操作 | dynamic | center | fixed right |
医嘱内容列子列布局(门诊药品行)
药品行在单个单元格内以 flex 行内嵌套多个子列:
<div style="display:flex; align-items:center;">
<span style="flex:auto; font-weight:700; color:#000;">药名</span>
<span style="width:120px; color:var(--text-secondary); padding-right:8px;">规格</span>
<span style="width:45px; text-align:center;">剂量</span>
<span style="width:65px; text-align:center;">频次</span>
<span style="width:65px; text-align:center;">用法</span>
<span style="width:52px; text-align:center;">天数</span>
</div>
非药品行仅显示名称加粗:
<span style="font-weight:700; color:#000;">检查/检验名称</span>
特殊标签(药品名后内嵌)
| 标签 | 背景 | 文字色 | 条件 |
|---|
| 皮(皮试) | #FFF1F0 | #F5222D | skinTestIndicator=1 |
| GCP | #E6F7FF | #1890FF | gcpIdentification=1 |
| 特(特病) | #FFF1F0 | #F5222D | diseaseFlag |
| 缺(缺药) | #FFF1F0 | #F5222D | absent |
| 自备 | #F6FFED | #72C140 | providedIndicator=1 |
| 长(长处方) | #E6F7FF | #448EF7 | longPrescIndicator=1 |
标签样式:display:inline-block, padding 0 4px, border-radius 3px, font-size 11px, font-weight 500
状态展示
状态列使用文字色标,不使用背景标签:
| 状态 | 文字色 | 适用 |
|---|
| 保存 | --text-secondary | 门诊/住院 |
| 提交 | #1890FF | 门诊/住院 |
| 核对 | #1890FF | 住院 |
| 预停 | #FAAD14 | 住院 |
| 停止 | #FA211F | 住院 |
| 作废 | #FA211F | 门诊/住院 |
| 驳回 | #FA211F | 门诊/住院 |
操作按钮
操作按钮随状态变化,使用文本链接样式(el-button type="text"):
| 状态 | 可用操作 | 说明 |
|---|
| 保存(0) | 删除 | 可删除未提交医嘱 |
| 提交(1) | 停止、作废 | 药品可停止,分组非药品可作废整组 |
| 停止(10) | 重开 | 可重新开启 |
| 作废/已退费 | 无 | 已终态 |
按钮样式:font-size 14px, color --color-primary(主操作)/ --color-danger(危险操作),无背景无边框
行背景样式
| 状态 | 背景 | 说明 |
|---|
| 保存 | #E8F5E9 | 浅绿提示未提交 |
| 保存+选中 | #E6F7FF | 浅蓝 |
| 停止/作废 | 文字 #FA211F | 红色文字警示 |
6.5 医嘱录入区
位于医嘱列表下方,固定不滚动。
| 属性 | 规范值 |
|---|
| 高度 | 60px |
| 内边距 | 14px |
| 上边距 | 8px |
| 边框 | 1px solid --border-light |
| 布局 | flex, align-items center, gap 10px |
门诊录入区
| 控件 | 类型 | 尺寸 |
|---|
| 长临选择 | select | width 70px, height 28px |
| 医嘱输入 | input | flex:1, height 28px, 支持拼音码 |
| 药房选择 | select | width 100px, height 28px |
| 草药处方 | button | height 30px |
| 自备药 | button | height 30px |
住院录入区
- 更复杂的录入面板,含药品搜索、用法用量、频次等表单
- 录入区高度可变,通常 60-120px
7. 快速接入
最小可用模板。表格组件详细规范见 第 4.1 节#41-表格。
/* App.vue style (非scoped) — CSS 变量 + el-table 最小覆盖 */
:root {
--bg-page: #F2F4F8;
--bg-search: #F0F3F8;
--bg-thead: #D8DEE9;
--bg-group: #E8ECF4;
--bg-stripe: #F5F7FA;
--bg-hover: #D0E2F5;
--bg-selected: #C9DCF2;
--bg-gap: #D8DEE9;
--border-light: #E2E6EC;
--border-normal: #C8CDD6;
}
body { background: var(--bg-page); }
/* el-table(字典维护型页面,完整规范见 4.1 spec-table) */
.el-table th.el-table__cell { background: var(--bg-thead) !important; }
.el-table--striped .el-table__body tr.el-table__row--striped td { background: var(--bg-stripe) !important; }
/* vxe-table(业务列表型页面,完整规范见 4.1 vxe-table) */
/* 注意:行高统一 35px + .vxe-cell 统一 flex 布局,不要用 padding 撑高 */
.vxe-table--render-default .vxe-header--column,
.vxe-table--render-default .vxe-body--column {
height: 35px !important;
line-height: 35px !important;
padding: 0 8px !important;
vertical-align: middle !important;
}
.vxe-table .vxe-cell { display: flex; align-items: center; line-height: 35px !important; padding: 0 8px !important; }
.vxe-table .vxe-header--column { background: var(--bg-thead); color: var(--text-primary); font-weight: 600; font-size: 14px; }
.vxe-table .vxe-body--column { font-size: 14px; color: var(--text-regular); }
.vxe-table .vxe-body--row.row--stripe .vxe-body--column { background: var(--bg-stripe); }
.vxe-table .vxe-body--row.row--hover .vxe-body--column { background: var(--bg-hover); }
.vxe-table--border-line { border-color: var(--border-light); }
.vxe-table .vxe-cell--checkbox { overflow: visible; }
.vxe-table .row--group .vxe-body--column { background: var(--bg-group) !important; color: var(--color-primary); font-weight: 500; font-size: 14px; }
8. 附录
8.1 不需要改的部分
- 顶部导航:#005CAB 医疗蓝品牌色不变
- 功能色:红/绿/蓝/橙保持高饱和
- 字号:16/14/12 三档不变
- 打印样式:通过 @media print 单独控制
8.2 常见错误
- [ ] 业务列表型页面使用原生
<table> — 应使用 vxe-table
- [ ] 字典维护型页面使用 vxe-table — 应使用 el-table(过度设计)
- [ ] 自定义侧边栏使用
el-drawer — 业务列表型应使用自定义 div 侧边栏
- [ ] 在 scoped CSS 中覆盖 el-dialog / el-drawer 样式 — 这些组件 append-to-body,scoped 无效,应放 App.vue 非 scoped
- [ ] 原生
<table> 未显式设置 td color — 会导致内容文字过深(已禁止原生 table,此条仅限规范文档 HTML demo)
- [ ] CSS 硬编码色值 — 应使用 CSS 变量(
--bg-、--border-、--text-、--color-)
- [ ] 按钮用 padding-top/bottom 撑高 — 中文汉字渲染偏上,应用 line-height 控制居中
- [ ] 增量构建
--no-clean 跳过 — 旧 CSS 缓存残留导致样式不生效,应 clean build
8.3 组件选型速查
| 决策点 | 字典维护型 | 业务列表型 |
|---|
| 表格 | el-table | vxe-table@3 |
| 抽屉 | el-drawer | 自定义侧边栏 |
| 全局 CSS | el-table 覆写 | vxe-table 覆盖 |
| 典型场景 | 药品字典、科室维护 | 医嘱列表、请药明细、护理记录 |