Files
hms/docs/superpowers/specs/2026-05-02-doctor-operator-workbench-design.md
iven c208dcc6f5 docs(specs): 7 份设计规格 — 工作台/适老化/硬编码清理/项目分析
新增: 适老化小程序/Action Inbox/统一工作台/医生操作台/
硬编码清理/健康管理台/全项目深度分析报告
2026-05-03 19:32:25 +08:00

25 KiB
Raw Blame History

医生 & 运营 & 管理员工作台设计规格

日期: 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  下班

核心痛点

  1. AI 建议易遗忘AI 分析结果在独立列表中,不强制提醒,容易积压
  2. 咨询回复不及时:不知道有新咨询,需要主动刷新咨询列表
  3. 患者上下文分散:看 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  下班

核心痛点

  1. 数据分散:积分、内容、活动数据在不同页面,需来回切换
  2. 缺乏数据驱动:发什么内容凭经验,不知道什么受欢迎
  3. 异常发现慢:积分兑换异常靠人工发现,等到发现时已造成损失

2.3 管理员 — 陈建国

维度 描述
姓名 陈建国
职位 系统管理员 / 平台运维
年龄 35 岁
工作经验 8 年 IT 运维3 年医疗信息化
技术水平 熟悉 Linux/Docker/数据库,能看懂 Rust 错误日志
日均任务量 用户管理 5-10 次、权限配置 1-2 次、系统巡检 3-4 次

核心痛点

  1. 系统健康不可见:不知道各模块是否正常运行,出了问题被动发现
  2. 操作追溯分散:用户做了什么操作需要翻审计日志表,没有聚合视图
  3. 配置入口分散:用户管理/角色权限/菜单/字典/插件分布在不同页面,来回切换

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 列等宽)
  • 最大内容宽度 960pxmax-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 WorkbenchStatspending_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 已有 健康管家方案 BPhase 1 已实现)
apps/web/src/pages/health/components/workbench/TaskDetail.tsx 已有 健康管家方案 BPhase 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 通过
  • 浏览器中实际操作验证通过