# 医生 & 运营 & 管理员工作台设计规格 > 日期: 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 列等宽) - 最大内容宽度 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 秒轮询刷新: ```typescript // 医生工作台 — 使用现有 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()` 分发不同工作台组件: ```typescript const HomePage = () => { const role = useDashboardRole(); switch (role) { case 'doctor': return ; case 'health_manager': case 'nurse': return ; // 方案 B TaskQueue + TaskDetail case 'operator': return ; case 'admin': return ; // 系统管理中心 default: return ; } }; ``` ### 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` 通过 - [ ] 浏览器中实际操作验证通过