25 KiB
医生 & 运营 & 管理员工作台设计规格
日期: 2026-05-02 | 状态: 设计中 原型参考:
_temp/workbench-doctor-A.html(医生)、_temp/workbench-operator-C.html(运营)、_temp/workbench-admin.html(管理员) 关联文档:2026-05-02-health-manager-workbench-design.md(健康管家方案 B)
1. 背景与目标
1.1 与健康管家工作台的关系
本规格定义健康管家之外的三个角色工作台。四者共享同一平台、同一全局侧边栏、同一路由入口 /(Home.tsx),通过 useDashboardRole() 按 doctor / health_manager / operator / admin 角色分发不同的工作台视图。
| 角色 | 方案 | 核心交互模式 | 本期优先级 |
|---|---|---|---|
| 健康管家 | B 工作流驱动 | 任务队列一件一件处理 | Phase 1(已设计) |
| 医生 | A 今日全景 | 仪表盘总览 + AI 建议一键审核 | Phase 1(本文档) |
| 运营 | C AI 指挥中心 | AI 洞察驱动运营决策 | Phase 1(本文档) |
| 管理员 | 系统管理中心 | 平台运维全局视角 | Phase 1(本文档) |
1.2 医生角色目标
| 指标 | 当前 | 目标 |
|---|---|---|
| AI 建议审核响应时间 | 无专门入口,散落在 AI 分析列表 | 工作台直接展示,一键采纳/拒绝 |
| 患者咨询回复时间 | 需进入咨询列表才能看到未读 | 工作台右侧实时显示未回复咨询 |
| 关注患者认知负担 | 需逐个翻患者详情 | 聚合告警+AI分析的关注列表 |
1.3 运营角色目标
| 指标 | 当前 | 目标 |
|---|---|---|
| 内容运营效率 | 各功能模块独立操作 | AI 推荐热点内容,一键关联发布 |
| 积分异常发现 | 被动审核订单 | AI 主动发现异常兑换模式 |
| 运营决策数据支撑 | 需单独查看统计报表 | 工作台实时展示核心指标 + 趋势 |
1.4 范围
本期(Phase 1):
- 医生:4 统计卡片 + AI 建议待审 + 重点关注患者 + 日程 + 咨询摘要
- 运营:AI 洞察卡片 + 4 数据指标 + 热门内容排行 + 待办列表 + 积分动态 + 内容矩阵
不在本期:
- 医生角色的方案 B/C 工作流模式
- 运营角色的方案 A/B 仪表盘模式
- 管理员的实时系统指标监控(CPU/内存/磁盘)
- 角色间的任务转交/协作流程(Phase 2)
- AI 洞察的 SSE 实时推送(Phase 2 使用 30 秒轮询)
2. 角色定义
2.1 医生 — 李明辉
| 维度 | 描述 |
|---|---|
| 姓名 | 李明辉 |
| 职位 | 主治医师 · 肾内科 |
| 年龄 | 42 岁 |
| 工作经验 | 15 年临床,8 年肾内科 |
| 技术水平 | 基本操作无障碍,不追求花哨功能 |
| 日均任务量 | AI 建议审核 3-5 项、咨询回复 2-3 条、查看危急值 1-2 次 |
典型工作日
07:30 晨间查房,查看住院患者
08:00 门诊开始,打开工作台扫一眼今日概览
08:30 门诊间隙审核 AI 建议(采纳/拒绝)
10:00 回复患者咨询消息
10:30 多学科会诊
14:00 下午门诊
16:00 查看告警中心,确认危急值已处理
17:00 下班
核心痛点
- AI 建议易遗忘:AI 分析结果在独立列表中,不强制提醒,容易积压
- 咨询回复不及时:不知道有新咨询,需要主动刷新咨询列表
- 患者上下文分散:看 AI 建议时需要单独翻患者详情了解病史
2.2 运营 — 王美玲
| 维度 | 描述 |
|---|---|
| 姓名 | 王美玲 |
| 职位 | 健康运营专员 |
| 年龄 | 28 岁 |
| 工作经验 | 3 年互联网运营,1 年健康领域 |
| 技术水平 | 熟练使用各种运营工具,对数据敏感 |
| 日均任务量 | 文章管理 2-3 篇、积分审核 5-10 笔、活动跟进 1-2 个 |
典型工作日
08:30 打开工作台,查看 AI 洞察和昨日数据
09:00 审核积分兑换订单(AI 标记异常的优先)
10:00 发布新科普文章,关联热门话题
11:00 跟进线下活动报名情况
14:00 查看内容阅读数据,优化推送策略
15:00 整理运营周报
16:30 跟进沉默用户,发送关怀消息
17:30 下班
核心痛点
- 数据分散:积分、内容、活动数据在不同页面,需来回切换
- 缺乏数据驱动:发什么内容凭经验,不知道什么受欢迎
- 异常发现慢:积分兑换异常靠人工发现,等到发现时已造成损失
2.3 管理员 — 陈建国
| 维度 | 描述 |
|---|---|
| 姓名 | 陈建国 |
| 职位 | 系统管理员 / 平台运维 |
| 年龄 | 35 岁 |
| 工作经验 | 8 年 IT 运维,3 年医疗信息化 |
| 技术水平 | 熟悉 Linux/Docker/数据库,能看懂 Rust 错误日志 |
| 日均任务量 | 用户管理 5-10 次、权限配置 1-2 次、系统巡检 3-4 次 |
核心痛点
- 系统健康不可见:不知道各模块是否正常运行,出了问题被动发现
- 操作追溯分散:用户做了什么操作需要翻审计日志表,没有聚合视图
- 配置入口分散:用户管理/角色权限/菜单/字典/插件分布在不同页面,来回切换
3. 信息架构
3.1 医生:方案 A「今日全景」布局
┌──────────────────────────────────────────────────────────────┐
│ 全局侧边栏(已有) │ 医生工作台页面内部 │
│ │ │
│ 🏠 今日全景(高亮) │ ┌──────────────────────────────────────┐ │
│ 🩺 患者管理 │ │ 欢迎栏:上午好,李医生 │ │
│ 💬 患者咨询 │ ├──────────────────────────────────────┤ │
│ 📅 预约排班 │ │ 4 统计卡片(危急值/待审/咨询/预约) │ │
│ 🤖 AI 分析 │ ├──────────────────┬───────────────────┤ │
│ ⚠️ 告警中心 │ │ 左主内容(flex) │ 右窄栏(340px) │ │
│ 📊 统计报表 │ │ │ │ │
│ │ │ AI 建议待审列表 │ 今日日程 │ │
│ │ │ (采纳/拒绝按钮) │ 未回复咨询 │ │
│ │ │ │ 快捷操作 │ │
│ │ │ 重点关注患者列表 │ │ │
│ │ │ │ │ │
│ │ └──────────────────┴───────────────────┘ │
└──────────────────────────────────────────────────────────────┘
布局参数:
- 左主内容:
flex: 1,包含 AI 建议和关注患者两个 Card - 右窄栏:固定 340px,包含日程、咨询、快捷操作
3.2 运营:方案 C「AI 指挥中心」布局
┌──────────────────────────────────────────────────────────────┐
│ 全局侧边栏(已有) │ 运营工作台页面内部 │
│ │ │
│ 🤖 AI 工作台(高亮) │ ┌──────────────────────────────────────┐ │
│ 📝 内容管理 │ │ AI 洞察卡片(暖橙色渐变 Hero) │ │
│ 🎁 积分商城 │ │ 3 条洞察 + 操作按钮 │ │
│ 🎪 线下活动 │ ├──────────────────────────────────────┤ │
│ 👥 患者管理 │ │ 4 数据指标卡片(活跃/阅读/积分/订单) │ │
│ 📊 统计报表 │ ├──────────────────┬───────────────────┤ │
│ ⚙️ 系统设置 │ │ 热门科普排行 │ 今日待办 │ │
│ │ ├──────────────────┼───────────────────┤ │
│ │ │ 积分动态 │ 内容矩阵 │ │
│ │ └──────────────────┴───────────────────┘ │
└──────────────────────────────────────────────────────────────┘
布局参数:
- 顶部:AI Hero 卡片(全宽)
- 第二行:4 数据指标(grid 4 列)
- 第三行起:双栏卡片(grid 2 列等宽)
- 最大内容宽度 960px(
max-width)
3.3 管理员:系统管理中心布局
┌──────────────────────────────────────────────────────────────┐
│ 全局侧边栏(已有) │ 管理员工作台页面内部 │
│ │ │
│ 🔧 系统管理(高亮) │ ┌──────────────────────────────────────┐ │
│ 👤 用户管理 │ │ 系统健康条(6 项状态指示灯) │ │
│ 🔑 角色权限 │ ├──────────────────────────────────────┤ │
│ 📖 菜单管理 │ │ 4 统计卡片(用户/模块/操作/工单) │ │
│ 📋 审计日志 │ ├──────────────────┬───────────────────┤ │
│ ⚙️ 系统配置 │ │ 审计日志 │ 模块状态 │ │
│ 🧩 插件管理 │ ├──────────────────┼───────────────────┤ │
│ 📊 统计报表 │ │ 用户活跃度 │ 系统管理快捷入口 │ │
│ │ └──────────────────┴───────────────────┘ │
└──────────────────────────────────────────────────────────────┘
布局参数:
- 顶部:系统健康条(全宽,flex 横向排列 6 项状态)
- 第二行:4 统计卡片(grid 4 列)
- 第三行起:双栏卡片(grid 2 列等宽)
- 最大内容宽度 1080px
4. 组件清单
4.1 医生组件
| 组件 | 说明 | 数据源 |
|---|---|---|
| DoctorStatsRow | 4 统计卡片:危急值/待审/咨询/预约 | GET /health/action-inbox/stats + GET /health/doctor/dashboard |
| AiSuggestionList | AI 建议待审列表,内嵌采纳/拒绝按钮 | GET /health/action-inbox(过滤 type=ai_suggestion) |
| FocusedPatientList | 重点关注患者(聚合告警+AI 分析) | GET /health/action-inbox(按患者聚合) |
| TodaySchedule | 今日日程(查房/门诊/会诊) | GET /health/doctor-schedules(过滤今日) |
| ConsultSummary | 未回复咨询摘要(侧栏紧凑版) | GET /health/consultation-sessions(过滤未回复) |
| QuickActions | 快捷入口(AI 分析/告警/患者查询) | 前端静态配置 |
4.2 运营组件
| 组件 | 说明 | 数据源 |
|---|---|---|
| AiInsightHero | AI 洞察 Hero 卡片(暖橙色渐变) | Phase 1 前端静态展示,Phase 2 接 AI 生成 |
| OperatorStatsRow | 4 数据指标(活跃/阅读/积分/订单) | GET /health/admin/statistics/dashboard + GET /health/admin/points/statistics |
| HotContentRank | 热门科普排行(阅读量排名) | GET /health/articles(按 view_count 排序) |
| OperatorTodoList | 今日待办(积分审核/发布文章/活动跟进等) | 前端状态管理(Phase 2 扩展为任务系统) |
| PointsFeed | 积分动态流(近期获得/兑换) | GET /health/admin/points/patients/{id}/transactions(聚合) |
| ContentMatrix | 内容矩阵(分类分布条形图) | GET /health/articles(按分类聚合统计) |
4.3 共享组件
以下组件在两个角色中复用,与健康管家工作台共享:
| 组件 | 复用场景 |
|---|---|
| StatCard | 统计卡片基础样式(顶部色条 + 数值 + 副文本) |
| Card | 通用卡片容器(圆角 + 边框 + header + body) |
4.4 管理员组件
| 组件 | 说明 | 数据源 |
|---|---|---|
| SystemHealthBar | 6 项系统状态指示灯(API/DB/Redis/邮件/存储/定时任务) | Phase 1 前端静态(Phase 2 接 /api/v1/system/health) |
| AdminStatsRow | 4 统计卡片(注册用户/业务模块/今日操作/待处理工单) | GET /api/v1/users(总数)+ 前端计算 |
| AuditLogList | 最近操作记录(操作人+动作+时间) | GET /api/v1/audit-logs(最新 6 条) |
| ModuleStatusList | 模块状态列表(已启用/未启用) | 前端静态配置(模块列表固定) |
| UserActivityChart | 用户活跃度分布(今日/本周/本月/总注册 + 角色分布) | GET /api/v1/users(聚合统计) |
| AdminQuickActions | 系统管理快捷入口(8 个管理功能) | 前端静态配置 |
4.5 数据优先级说明
医生:核心数据来自 action-inbox 系统(与健康管家共享),额外需要 doctor/dashboard API 提供预约和日程数据。
运营:核心数据来自 statistics/dashboard + articles + points API,数据维度完全不同,独立于 action-inbox 系统。
5. 数据流
5.1 医生数据源映射
| 组件 | API | 参数 | 返回 |
|---|---|---|---|
| DoctorStatsRow | GET /health/action-inbox/stats |
— | WorkbenchStats(pending_count 等) |
| DoctorStatsRow | GET /health/doctor/dashboard |
— | 预约数、日程数 |
| AiSuggestionList | GET /health/action-inbox |
type=ai_suggestion, status=pending |
ActionItem[] |
| FocusedPatientList | GET /health/action-inbox |
status=pending(前端按 patient_id 聚合) |
ActionItem[] |
| TodaySchedule | GET /health/doctor-schedules |
date=today |
ScheduleItem[] |
| ConsultSummary | GET /health/consultation-sessions |
status=active, unread=true |
Consultation[] |
并行请求策略:页面加载时使用 Promise.allSettled 并行请求 stats + list + schedule + consultations。
5.2 运营数据源映射
| 组件 | API | 参数 | 返回 |
|---|---|---|---|
| OperatorStatsRow | GET /health/admin/statistics/dashboard |
— | 综合统计数据 |
| OperatorStatsRow | GET /health/admin/points/statistics |
— | 积分统计 |
| HotContentRank | GET /health/articles |
sort=-view_count, page_size=5 |
Article[] |
| ContentMatrix | GET /health/articles |
page_size=1(仅需 total) |
按分类聚合(前端或后端) |
| PointsFeed | GET /health/admin/points/patients |
最近交易(需后端扩展) | 积分流水 |
AI Hero 洞察:Phase 1 使用前端静态文案(硬编码洞察示例)。Phase 2 接入 AI 生成接口。
5.3 管理员数据源映射
| 组件 | API | 参数 | 返回 |
|---|---|---|---|
| AdminStatsRow | GET /api/v1/users |
page=1, page_size=1 |
用户总数(从 pagination.total) |
| AuditLogList | GET /api/v1/audit-logs |
page=1, page_size=6 |
AuditLogItem[] |
| UserActivityChart | GET /api/v1/users |
聚合查询 | 角色分布统计 |
| SystemHealthBar | Phase 1 静态 | — | 前端硬编码状态 |
| ModuleStatusList | Phase 1 静态 | — | 前端硬编码模块列表 |
| AdminQuickActions | 前端静态 | — | 路由配置 |
管理员数据特点:不依赖 erp-health 的任何 API,数据来自 ERP 基础模块(用户、审计、配置)。
5.4 与 action-inbox 的关系
| 角色 | 使用方式 |
|---|---|
| 健康管家 | 完全基于 action-inbox,任务队列 + 详情处理 |
| 护士 | 复用健康管家工作台(同一任务队列),不做区分 |
| 医生 | 部分使用 action-inbox(仅读取 AI 建议和告警),不做任务处理流程 |
| 运营 | 不使用 action-inbox,数据来源独立 |
| 管理员 | 不使用 action-inbox,数据来自 ERP 基础模块(用户/审计/配置) |
医生角色的 action-inbox 使用是只读展示:在 AI 建议列表中直接嵌入「采纳/拒绝」按钮,调用 /health/ai-analysis/:id/review,不走 action-inbox 的 complete 流程。
6. 交互流程
6.1 医生:AI 建议审核
以「张伟 — 血压持续升高建议调整用药」为例:
1. 进入工作台
└→ 4 统计卡片显示:待审 5 条、未回复 3 条
2. 浏览 AI 建议列表
└→ 列表按风险等级排序(高→中→低)
└→ 每条建议显示:风险徽章 + 标题 + 摘要 + 采纳/拒绝按钮
3. 审核建议
└→ 点击「采纳」→ 调用 POST /health/ai-analysis/:id/review?action=approve
└→ 或点击「拒绝」→ 弹出拒绝原因输入 → 提交
└→ 操作完成后,该建议从列表移除
4. 查看关注患者
└→ 下方列表聚合了有告警/AI 建议的患者
└→ 点击患者名称 → 跳转患者详情页
5. 查看右侧信息
└→ 日程卡片:了解今日安排
└→ 咨询摘要:点击未回复咨询 → 跳转咨询详情页
6.2 运营:AI 洞察驱动操作
以「透析饮食管理文章爆发」洞察为例:
1. 进入工作台
└→ AI Hero 卡片展示 3 条洞察,每条附带操作按钮
2. 响应洞察
└→ 点击「发布关联文章」→ 跳转文章编辑器(预填关联标签)
└→ 或点击「审核积分订单」→ 跳转积分订单列表(标记异常)
3. 查看热门排行
└→ 了解哪些内容受欢迎,指导后续内容策略
4. 处理今日待办
└→ 待办列表展示优先级事项
└→ 点击操作按钮 → 跳转对应管理页面
5. 监控积分动态
└→ 实时查看积分发放/兑换流水
6.3 管理员:系统巡检
1. 进入工作台
└→ 系统健康条显示 6 项服务状态(绿灯/黄灯/红灯)
2. 确认系统正常
└→ 所有绿灯 → 放心继续
└→ 发现黄灯(如邮件队列积压)→ 点击进入邮件服务配置
3. 查看统计卡片
└→ 注册用户/业务模块/今日操作/待处理工单
4. 翻看审计日志
└→ 最近 6 条操作记录(谁做了什么)
└→ 发现异常操作 → 点击进入完整审计日志
5. 检查模块状态
└→ 确认各模块运行中
└→ 发现未启用模块 → 考虑是否启用
6. 用户活跃度
└→ 查看今日/本周/本月活跃数
└→ 角色分布确认人员配置合理
7. 快捷管理入口
└→ 点击用户管理/角色权限/系统配置等 → 跳转对应管理页面
6.4 空状态处理
| 角色 | 区域 | 空状态展示 |
|---|---|---|
| 医生 | AI 建议列表 | 「暂无待审 AI 建议」 |
| 医生 | 关注患者 | 「暂无重点关注患者」 |
| 医生 | 咨询摘要 | 「暂无未回复咨询」 |
| 医生 | 日程 | 「今日暂无安排」 |
| 运营 | AI Hero | 静态内容,不会为空 |
| 运营 | 热门排行 | 「暂无发布内容」 |
| 运营 | 待办列表 | 「今日暂无待办」 |
| 管理员 | 审计日志 | 「暂无操作记录」 |
| 管理员 | 系统健康 | 全绿灯,静态展示 |
6.5 前端状态管理
三个角色各自独立数据获取,30 秒轮询刷新:
// 医生工作台 — 使用现有 workbenchStore + 额外请求
const DoctorDashboard: React.FC = () => {
const { refreshTasks, refreshStats } = useWorkbenchStore();
// 额外请求:日程、咨询
const [schedules, setSchedules] = useState([]);
const [consults, setConsults] = useState([]);
useEffect(() => {
refreshTasks();
refreshStats();
Promise.allSettled([
doctorApi.getDashboard(),
consultationApi.list({ status: 'active', unread: true }),
]).then(...);
}, []);
};
// 运营工作台 — 独立数据获取,不使用 workbenchStore
const OperatorDashboard: React.FC = () => {
const [stats, setStats] = useState(null);
const [articles, setArticles] = useState([]);
useEffect(() => {
Promise.allSettled([
statsApi.getDashboard(),
articlesApi.list({ sort: '-view_count', page_size: 5 }),
pointsApi.getStatistics(),
]).then(...);
}, []);
};
// 管理员工作台 — 独立数据获取,不使用 workbenchStore
const AdminDashboard: React.FC = () => {
const [auditLogs, setAuditLogs] = useState([]);
const [userCount, setUserCount] = useState(0);
useEffect(() => {
Promise.allSettled([
auditLogApi.list({ page: 1, page_size: 6 }),
userApi.list({ page: 1, page_size: 1 }), // 只取 total
]).then(...);
}, []);
};
7. 与现有系统的关系
7.1 角色路由分发
在 Home.tsx 中通过 useDashboardRole() 分发不同工作台组件:
const HomePage = () => {
const role = useDashboardRole();
switch (role) {
case 'doctor':
return <DoctorDashboard />;
case 'health_manager':
case 'nurse':
return <HealthManagerDashboard />; // 方案 B TaskQueue + TaskDetail
case 'operator':
return <OperatorDashboard />;
case 'admin':
return <AdminDashboard />; // 系统管理中心
default:
return <AdminDashboard />;
}
};
7.2 涉及文件
| 文件 | 改动类型 | 说明 |
|---|---|---|
apps/web/src/pages/Home.tsx |
改造 | 角色路由分发 + 导入各角色组件 |
apps/web/src/pages/health/components/workbench/DoctorDashboard.tsx |
新增 | 医生方案 A 仪表盘 |
apps/web/src/pages/health/components/workbench/OperatorDashboard.tsx |
新增 | 运营方案 C AI 指挥中心 |
apps/web/src/pages/health/components/workbench/AdminDashboard.tsx |
新增 | 管理员系统管理中心 |
apps/web/src/pages/health/components/workbench/TaskQueue.tsx |
已有 | 健康管家方案 B(Phase 1 已实现) |
apps/web/src/pages/health/components/workbench/TaskDetail.tsx |
已有 | 健康管家方案 B(Phase 1 已实现) |
7.3 数据库变更
Phase 1 无需新建表。所有数据来自现有 API:
- 医生:action-inbox + doctor/dashboard + consultation-sessions + doctor-schedules
- 运营:statistics/dashboard + articles + points/statistics
- 管理员:users + audit-logs + 前端静态配置
7.4 权限
沿用现有权限码,无需新增:
| 角色 | 所需权限码 |
|---|---|
| 医生 | health.action-inbox.list + health.ai-analysis.review + health.consultation.manage + health.doctor-schedule.list |
| 运营 | health.statistics.dashboard + health.articles.list + health.points.manage |
| 管理员 | system.users.list + system.audit-logs.list + system.settings.read |
7.5 验收标准
医生工作台:
- 工作台显示 4 项统计数据(危急值/待审/咨询/预约)
- AI 建议列表按风险排序,每条有采纳/拒绝按钮
- 采纳/拒绝操作调用对应 API 并刷新列表
- 重点关注患者列表聚合展示(告警+AI 建议)
- 右侧日程卡片显示今日排班
- 右侧咨询摘要显示未回复消息
- 空状态有合理展示
运营工作台:
- AI Hero 卡片展示 3 条洞察 + 操作按钮(Phase 1 静态内容)
- 4 项数据指标展示(活跃用户/阅读量/积分发放/待审订单)
- 热门科普排行按阅读量排序(前 5 名)
- 今日待办列表展示优先事项
- 积分动态流展示近期交易
- 内容矩阵展示分类分布
- 空状态有合理展示
管理员工作台:
- 系统健康条展示 6 项服务状态(Phase 1 静态)
- 4 项统计卡片展示(注册用户/业务模块/今日操作/待处理工单)
- 审计日志展示最近 6 条操作记录
- 模块状态列表展示已启用/未启用模块
- 用户活跃度分布展示
- 8 个系统管理快捷入口可点击跳转
- 空状态有合理展示
全局:
useDashboardRole()正确分发五个角色的工作台视图- 30 秒自动刷新数据
cargo check通过pnpm build通过- 浏览器中实际操作验证通过