Files
soft/操作手册.md
MingNian d5f167167a feat: replace Redis with PostgreSQL for caching, rate limiting, SMS codes, and token blacklist
- Add 4 PG entities: VerificationCode, RateLimitEntry, TokenBlacklistEntry, CacheEntry
- Add 4 services: VerificationService, RateLimitService, TokenBlacklistService, CacheService
- Add CleanupBackgroundService for periodic expired data cleanup
- Add MigrationHelper for safe schema migration without data loss
- Update AuthController: real SMS code generation, rate limiting, logout endpoint with JWT blacklist
- Update JwtProvider: add JTI claim for token revocation
- Update Program.cs: register new services, JWT blacklist validation, DB migration
- Remove StackExchange.Redis NuGet package and all Redis config references
- Update start-dev.bat: 6→5 services, remove Redis startup
- Update docs: remove Redis references from all documentation
- Fix: logout button spacing on profile page
- Fix: .gitignore data/→/data/ to not ignore Infrastructure/Data/
2026-05-26 13:48:53 +08:00

26 KiB
Raw Blame History

HealthManager 健康管理平台 — 操作使用手册

适用对象:患者、医生、系统管理员 文档目标:知道每一步该点什么、输入什么、会发生什么


目录


第一部分:快速开始

1.1 启动系统

第一步:启动后端和数据库

找到 D:\APP\start-dev.bat 文件,双击运行

D:\APP\start-dev.bat

你会看到一个命令行窗口跳出,依次显示:

==========================================
  HealthManager 开发环境启动
==========================================

[1/3] 启动 PostgreSQL...
  PostgreSQL 已启动

[2/3] 启动 MinIO...
  MinIO 已启动

[3/3] 启动后端 API...
  后端 API 启动中 (http://localhost:5000)
  Swagger: http://localhost:5000/swagger

===========================================
  启动完成!

  后端 API:  http://localhost:5000
  Swagger:   http://localhost:5000/swagger
  MinIO:     http://localhost:9001
  PostgreSQL: localhost:5432
===========================================

注意:第一次启动时,后端会自动创建数据库和表,并插入演示数据。这可能需要 10-20 秒。

第二步:启动患者前端

重新打开一个命令行窗口,输入:

cd D:\APP\frontend-patient
npm run dev

看到类似以下的输出就成功了:

VITE v8.x.x  ready in xxx ms
➜  Local:   http://localhost:5173/

第三步:启动医生前端(另一个命令行窗口)

cd D:\APP\frontend-doctor
npm run dev

看到类似以下的输出就成功了:

VITE v8.x.x  ready in xxx ms
➜  Local:   http://localhost:5174/

第四步:打开浏览器

角色 地址 用什么设备
患者 http://localhost:5173 手机浏览器(或用 Chrome 开发者工具模拟手机)
医生 http://localhost:5174 电脑浏览器
API 文档 http://localhost:5000/swagger 电脑浏览器(开发者用)

提示:患者端是为手机设计的。如果你在电脑上打开,按 F12 → 点击左上角的"切换设备工具栏"图标(手机/平板图标)→ 选择 iPhone 12 Pro,就能看到手机效果。


1.2 关闭系统

  1. 关闭三个命令行窗口(后端、患者前端、医生前端)
  2. PostgreSQL、MinIO 会继续在后台运行。如果想关闭它们:
    • 打开任务管理器Ctrl+Shift+Esc
    • 找到 postgres.exeminio.exe 进程
    • 分别结束任务

第二部分:患者操作指南

以下以患者张明的视角演示所有功能。

2.1 登录

1. 打开患者端:浏览器访问 http://localhost:5173

你会看到登录页面。

2. 输入手机号:在手机号输入框中输入 13800138000

(这是患者张明的演示账号)

3. 获取验证码:点击 "获取验证码" 按钮

  • 按钮会开始 60 秒倒计时(变为灰色不可点击)
  • 倒计时结束后可以重新获取
  • 因为是演示版,验证码随便输入即可(如 1234

4. 输入验证码:在验证码输入框中输入 1234

5. 点击登录:点击 "登录" 按钮

6. 登录成功:页面会跳转到首页仪表盘,你可以看到:

👋 早上好,张明

📊 血压         📊 心率
120/80 mmHg    72 bpm

底部有 4 个 Tab 导航:首页 | 健康 | 服务 | 我的


2.2 首页仪表盘

你在首页可以看到

区域 显示内容 能做什么
健康概览卡片 最新血压值、心率值 点击可进入详情
快捷操作 6 个图标按钮 快速跳转到各个功能
健康小贴士 随机心血管健康建议 阅读
右上角铃铛 🔔 未读通知数 点击进入通知列表

6 个快捷操作按钮

按钮 点击后跳转到
📝 录入数据 手动录入健康数据页面
💊 用药打卡 药物列表页面
💬 在线问诊 医生列表页面
📋 检查报告 报告列表页面
🏃 运动饮食 运动和饮食记录页面
📅 我的随访 随访计划列表页面

2.3 记录健康数据

场景:早上测完血压,想记录下来

第一步:进入录入页面

  • 方式A在首页点 "📝 录入数据"
  • 方式B点底部 "健康" Tab → 点 "血压" 卡片 → 点右上角 "+" 按钮

第二步:填写数据

你会看到一个表单:

输入框 填入什么 示例
收缩压(高压) 测量仪上的大数字 128
舒张压(低压) 测量仪上的小数字 82
脉搏 测量仪上的脉搏数 72
日期 默认今天 不需要改
时间 默认现在 如果早上测的选择早上时间

第三步:保存

点击 "保存" 按钮。页面会提示"保存成功",并跳回记录列表。

此时你可以在列表中看到刚添加的记录。


记录其他类型的数据

类型 在哪里录 输入什么
心率 健康 Tab → 心率 → + 72(次/分钟)
血糖 健康 Tab → 血糖 → + 5.6mmol/L
血氧 健康 Tab → 血氧 → + 98%
体重 健康 Tab → 体重 → + 74.5(公斤)
步数 健康 Tab → 步数 → + 8500(步)

2.4 查看健康趋势

场景:想看最近血压是升了还是降了

第一步:点底部 "健康" Tab

第二步:点 "血压" 卡片

第三步:你会看到最近的血压记录列表。点右下角的 "📈 趋势" 按钮。

第四步:你会看到一张折线图:

  • 红色线 = 收缩压(高压)
  • 蓝色线 = 舒张压(低压)
  • 红色虚线 = 140 警戒线(超过这条线意味着血压偏高)

第五步:你可以切换时间范围:

  • 7天:看最近一周
  • 14天:看最近两周
  • 30天:看最近一个月
  • 90天:看最近三个月

2.5 用药打卡

场景早上8点该吃阿司匹林了

第一步:点底部 "健康" Tab → 点 "💊 用药管理"

第二步:你会看到药物列表:

药名 剂量 频率 时间
阿司匹林肠溶片 100mg 每日1次 08:00
替格瑞洛 90mg 每日2次 08:00, 20:00
瑞舒伐他汀钙 10mg 每日1次 20:00
美托洛尔缓释片 47.5mg 每日1次 08:00

第三步:点击 "阿司匹林肠溶片" 进入详情页

第四步:你会看到:

  • 药物信息(剂量、频率、时间、注意事项)
  • 依从率饼图(绿色=已吃,灰色=没吃)
  • 近30天服药日历

第五步:点击 " 标记已服用" 按钮

  • 系统记录你在 08:00 这个时间点吃了药
  • 饼图中的绿色部分会变大
  • 如果所有时间点都已服药,当天显示为"已完成"

2.6 在线问诊(咨询医生)

场景:血压偏高,想咨询王医生

第一步:点底部 "服务" Tab

第二步:点 "💬 在线问诊"

第三步:你会看到可接诊的医生列表:

医生 科室 职称
王建国 心血管内科 主任医师
陈雪梅 心血管内科 副主任医师

第四步:点击 "王建国" 医生卡片

第五步:看到医生详情页(姓名、科室、职称、擅长领域、简介)

第六步:点击底部的 "开始咨询" 按钮

第七步:进入聊天页面。在底部输入框输入你的问题,例如:

王医生您好我最近血压有点偏高早上测140/90左右

第八步:点击 "发送" 按钮

  • 你的消息出现在右侧(绿色气泡)
  • 如果医生在线,他会回复,消息出现在左侧(白色气泡)

第九步(等待医生回复):医生的回复会实时显示(通过 SignalR 推送),不需要手动刷新。


2.7 上传检查报告

场景:刚做完血脂检查,想请医生看看

第一步:点底部 "服务" Tab → 点 "📋 检查报告"

第二步:你会看到之前的报告列表。点右下角的 "+" 按钮。

第三步:在表单中输入:

字段 填什么 示例
报告标题 描述这个报告 "术后6个月血脂复查"
报告类别 下拉选择 血液检查
上传图片 点上传区域 (选择血脂化验单的照片)

第四步:点击 "提交" 按钮

第五步:报告状态变为 "待审核"(黄色),等待医生解读。


2.8 查看报告结果

场景:医生已经解读了我的报告

第一步:点底部 "服务" Tab → 点 "📋 检查报告"

第二步:找到状态为 "已完成"(绿色)的报告,点击进入。

第三步:你会看到完整的解读结果:

区域 内容
风险等级 正常 / 注意 / 异常(颜色不同)
检查项目 各项指标、结果值、正常范围、是否异常
医生总结 医生写的总结
医生建议 医生给的建议

例如:

风险等级:⚠️ 注意

检查项目:
| 项目 | 结果 | 参考范围 | 异常 |
| 总胆固醇 | 5.8 | <5.2 | ⚠️ |
| 低密度脂蛋白 | 3.4 | <3.4 | ✓ |
| 甘油三酯 | 1.6 | <1.7 | ✓ |

医生总结:
血脂总体控制尚可,总胆固醇轻微偏高,注意饮食控制。

医生建议:
1. 继续服用瑞舒伐他汀
2. 减少动物脂肪摄入
3. 增加蔬菜水果摄入
4. 3个月后复查

2.9 管理随访

场景医生安排了3个月后复查我想看看有哪些随访

第一步:点底部 "服务" Tab → 点 "📅 我的随访"

第二步:你会看到随访计划列表:

随访 计划时间 状态
PCI术后3个月复查 2025-02-20 09:00 待随访
PCI术后1个月复查 2024-12-20 已完成

第三步:点击某个随访可以查看详情


自己添加随访提醒

第一步:在随访列表页,点右下角 "+" 按钮

第二步:填写:

字段 填什么
标题 "测血糖"
描述 "早上空腹测"
计划时间 选择日期和时间
开启提醒 打开开关

第三步:点击 "保存"


2.10 查看通知

第一步:在任意页面,点击右上角的 🔔 铃铛图标(带红点表示有未读)。

第二步:进入通知列表页:

类型 内容示例
💊 用药提醒 "阿司匹林肠溶片 - 该服药了"
📅 复查提醒 "您已术后6个月建议近期来院复查"
💬 医生回复 "王建国医生回复了您的咨询"
📢 健康提示 "本周血压控制良好,请继续保持"

第三步:点击某条通知 → 自动标记为已读。

全部已读:点右上角 "全部已读" 按钮。


2.11 个人资料

第一步:点底部 "我的" Tab

第二步:你会看到个人资料:

  • 头像、姓名、手机号
  • 身高、体重
  • 病史列表

第三步:点各菜单项可进入对应功能:

菜单 点击后
💊 我的用药 药物列表
🔔 我的通知 通知列表
📱 设备绑定 设备管理
⚙️ 设置 通知设置、清除缓存、隐私政策、关于

退出登录:在"我的"页面底部,点击红色 "退出登录" 按钮。


第三部分:医生操作指南

以下以医生王建国的视角演示所有功能。

3.1 登录

1. 打开医生端:浏览器访问 http://localhost:5174

2. 输入手机号13700137000

(这是医生王建国的演示账号)

3. 输入验证码:随便输入(如 1234

4. 点击登录

5. 登录成功进入工作台Dashboard


3.2 工作台Dashboard

左侧是固定的侧边栏,包含:

菜单项 跳转到
📊 工作台 工作台首页
👥 患者管理 患者列表
💬 在线问诊 咨询列表
📋 报告审核 报告列表
📅 随访管理 随访列表

侧边栏底部显示:

  • 医生姓名:王建国
  • 科室:心血管内科
  • 职称:主任医师
  • 退出登录 按钮

主内容区显示四个统计卡片:

卡片 数字 含义
🧑‍🤝‍🧑 患者总数 2 当前分配给我的患者总数
💬 活跃咨询 1 进行中的在线咨询
📋 待审核报告 0 等待我解读的报告
📅 今日随访 0 今天需要完成的随访

快捷操作:点击各卡片可快速跳转到对应功能。


3.3 管理患者

查看患者列表

第一步:在左侧菜单点击 "👥 患者管理"

第二步:你会看到患者表格:

姓名 手机号 性别 病史 支架日期 操作
张明 13800138000 高血压, 冠心病, PCI术后 2024-11-20 查看详情
李芳 13900139000 高血脂, 冠心病, PCI术后 2025-01-10 查看详情

第三步(搜索):在顶部搜索框输入 ,表格会实时过滤,只显示名字包含"张"的患者。


查看患者详情

第一步:在患者列表,点击张明的 "查看详情"

第二步:进入患者详情页,上半部分是基本信息:

基本信息
姓名:张明
手机号13800138000
性别:男
出生日期1965-03-15
身高172 cm
体重75 kg

病史信息
病史高血压、冠心病、PCI术后
支架日期2024-11-20
支架类型:药物洗脱支架(DES)

第三步:下半部分是健康数据汇总:

指标 最新值 趋势
血压 118/76 mmHg → 稳定
心率 70 bpm → 稳定
体重 74 kg → 稳定

这些数据来自患者每天记录的测量值,你可以快速了解患者的健康状况。


3.4 在线问诊(回复患者咨询)

查看咨询列表

第一步:在左侧菜单点击 "💬 在线问诊"

第二步:你会看到咨询列表:

患者 主题 状态 时间
张明 术后3个月复查咨询 🟢 进行中 3天前

状态标签颜色:

  • 🟢 进行中:还没结束的咨询
  • 已结束:已经关闭的咨询

回复患者消息

第一步:点击 "张明 - 术后3个月复查咨询"

第二步:进入聊天页面,你可以看到之前的对话:

[左侧白色气泡] 张明:
王医生您好我最近血压有点偏高早上测140/90左右

[右侧蓝色气泡] 你(王建国):
您好,最近有按时服药吗?饮食方面有没有特别注意?

[左侧白色气泡] 张明:
药都按时吃了,饮食也在控制,就是工作压力有点大

[右侧蓝色气泡] 你(王建国):
工作压力确实会影响血压。建议您注意休息每天保证7-8小时睡眠。
如果血压持续偏高,可以来门诊看看是否需要调整药物。

第三步:在底部输入框输入回复,例如:

另外建议您每天坚持散步30分钟有助于降压

第四步:点击 "发送" 按钮(或按 Enter 键)

  • 你的消息出现在右侧(蓝色气泡),标记为你的消息
  • 患者那边会实时收到你的回复

3.5 审核报告

查看待审核报告

第一步:在左侧菜单点击 "📋 报告审核"

第二步:你会看到所有报告列表:

患者 标题 类别 状态 日期 操作
张明 术后6个月血脂复查 血液检查 🟡 待审核 2025-05-18 查看

解读报告

第一步:点击 "查看" 进入报告详情

第二步:你会看到:

报告信息
标题术后6个月血脂复查
类别:血液检查
状态:待审核
上传时间2025-05-18 10:30

如果有上传的图片链接,也会显示在这里。

第三步:在 "解读报告" 区域填写:

字段 填写什么 示例
解读结果 对报告的总体评价 "血脂总体控制尚可,总胆固醇轻微偏高,建议继续控制饮食并按时服药。"
风险等级 下拉选择 ⚠️ 注意
建议 给患者的建议 "1. 继续服用瑞舒伐他汀 2. 减少动物脂肪摄入 3. 增加蔬菜水果摄入 4. 3个月后复查"

第四步:点击 "提交解读" 按钮

第五步:报告状态变为 " 已完成"(绿色),患者那边可以立即看到你的解读结果。


3.6 管理随访

查看随访列表

第一步:在左侧菜单点击 "📅 随访管理"

第二步:你会看到所有分配给当前医生的随访:

标题 患者 计划时间 状态 操作
PCI术后3个月复查 张明 2025-02-20 待随访 编辑

状态标签颜色:

  • 待随访(橙色):还没完成的随访
  • 已完成(绿色):已经完成的
  • 已错过(红色):过了时间没完成的

创建新随访

第一步:在随访列表页,点击右上角 "+ 新建随访" 按钮

第二步:在表单中填写:

字段 填写什么 示例
标题 随访目的 "术后1年全面复查"
患者 下拉选择 张明
计划时间 日期和时间 2025-11-20 09:00
备注 补充说明 "请患者带齐所有检查报告"

第三步:点击 "保存"

新随访会出现在列表中。患者那边也会同步看到。


编辑已有随访

第一步:在随访列表中,点击某个随访的 "编辑" 按钮

第二步:修改需要变更的字段(比如改时间、改状态、加备注)

第三步:点击 "保存"


完成随访

如果随访已经完成:

第一步:点击随访的 "编辑"

第二步:把 状态 改为 已完成

第三步:在 备注 中记录随访结果

第四步:点击 "保存"


3.7 个人资料设置

第一步:在左侧菜单底部,点击 "个人资料"(或点击你自己的名字)

第二步:你会看到当前信息:

字段 当前值
姓名 王建国
手机号 13700137000
科室 心血管内科
职称 主任医师
简介 从事心血管内科临床工作30年...

第三步:修改需要更新的字段(手机号不可修改)

第四步:点击 "保存"


第四部分:常见使用场景

场景 1患者从登录到完整使用

📱 患者打开手机浏览器
  │
  ├─ [1] 登录13800138000 / 1234
  │     → 进入首页,看到血压 120/80心率 72
  │
  ├─ [2] 早上测完血压,录入数据
  │     → 健康 Tab → 血压 → + → 输入 128/82/72 → 保存
  │
  ├─ [3] 吃阿司匹林,打卡
  │     → 健康 Tab → 用药管理 → 阿司匹林 → 标记已服用
  │
  ├─ [4] 查看血压趋势
  │     → 健康 Tab → 血压 → 趋势 → 看30天折线图
  │
  ├─ [5] 感觉不舒服,问医生
  │     → 服务 Tab → 在线问诊 → 王建国 → 开始咨询 → 发消息
  │
  ├─ [6] 收到医生回复
  │     → 点击右上角铃铛 → 查看通知 → 进入聊天看回复
  │
  ├─ [7] 上传化验单
  │     → 服务 Tab → 检查报告 → + → 填信息 → 提交
  │
  └─ [8] 几天后查看解读结果
        → 服务 Tab → 检查报告 → 点击已完成的报告 → 看结果和建议

场景 2医生从登录到完整工作流

💻 医生打开电脑浏览器
  │
  ├─ [1] 登录13700137000 / 1234
  │     → 进入工作台看到4个统计数字
  │
  ├─ [2] 查看患者情况
  │     → 患者管理 → 看到张明和李芳 → 点张明 → 看他的健康数据
  │
  ├─ [3] 回复患者咨询
  │     → 在线问诊 → 点击"术后3个月复查咨询" → 输入回复 → 发送
  │
  ├─ [4] 审核报告
  │     → 报告审核 → 点待审核的报告 → 填解读结果和建议 → 提交
  │
  ├─ [5] 安排随访
  │     → 随访管理 → + 新建随访 → 填信息 → 保存
  │
  ├─ [6] 完成随访后更新状态
  │     → 随访管理 → 编辑 → 状态改为已完成 → 加备注 → 保存
  │
  └─ [7] 更新个人资料
        → 个人资料 → 修改简介 → 保存

场景 3医患完整交互流程

患者端                          后端                  医生端
  │                              │                      │
  │ [1] 发起咨询                  │                      │
  │ ───POST /api/consultations──→ │                      │
  │                              │ [2] 保存咨询           │
  │                              │ [3] 推送通知          │
  │                              │ ────────────────────→ │ [4] 收到通知
  │                              │                      │
  │ [5] 发送消息                  │                      │
  │ ───POST /messages──────────→ │                      │
  │                              │ [6] 保存消息           │
  │                              │ [7] SignalR推送       │
  │                              │ ────────────────────→ │ [8] 实时看到消息
  │                              │                      │
  │                              │                      │ [9] 医生回复
  │                              │ ←──POST /messages──── │
  │                              │ [10] 保存消息          │
  │ [11] 实时看到回复             │ ← SignalR推送 ─────── │
  │                              │                      │
  │ [12] 上传报告                 │                      │
  │ ───POST /api/reports───────→ │                      │
  │                              │                      │ [13] 查看报告
  │                              │                      │ [14] 提交解读
  │                              │ ←──POST /interpret─── │
  │ [15] 看到解读结果             │                      │
  │                              │                      │
  │                              │                      │ [16] 安排随访
  │                              │ ←──POST /follow-ups── │
  │ [17] 看到新的随访计划          │                      │

场景 4药品依从性管理

患者每天的用药流程:

早上 08:00
  ├─ 收到通知:💊 "阿司匹林肠溶片 - 该服药了"
  ├─ 打开 APP → 健康 → 用药管理
  ├─ 点击"阿司匹林肠溶片"
  └─ 点击"✅ 标记已服用" → 完成!

晚上 20:00
  ├─ 收到通知:💊 "替格瑞洛 - 该服药了"
  ├─ 打开 APP → 健康 → 用药管理
  ├─ 点击"替格瑞洛"
  └─ 点击"✅ 标记已服用" → 完成!

每月回顾:
  ├─ 健康 → 用药管理 → 点任意药物
  └─ 查看依从率饼图
      ├─ 绿色 > 90% → 🎉 很好!
      ├─ 绿色 80-90% → ⚠️ 要注意
      └─ 绿色 < 80% → 🔴 需要改进,医生也会看到

第五部分:附录(演示账号信息)

5.1 演示账号

角色 姓名 手机号 密码(验证码) 说明
患者 张明 13800138000 任意输入(如 1234 60岁高血压+冠心病+PCI术后
患者 李芳 13900139000 任意输入(如 1234 53岁高血脂+冠心病+PCI术后
医生 王建国 13700137000 任意输入(如 1234 主任医师,心血管内科
医生 陈雪梅 13600136000 任意输入(如 1234 副主任医师,心血管内科

5.2 接口地址

服务 地址
后端 API http://localhost:5000
Swagger 文档 http://localhost:5000/swagger
患者前端 http://localhost:5173
医生前端 http://localhost:5174
MinIO 控制台 http://localhost:9001
PostgreSQL localhost:5432

5.3 常见问题

Q登录失败怎么办

检查:

  1. 后端是否启动成功(看 start-dev.bat 窗口有没有报错)
  2. PostgreSQL 是否在运行
  3. 手机号是否输入正确
  4. 浏览器控制台F12有没有报错

Q页面没有数据

  • 确认后端 API 能正常访问:在浏览器直接打开 http://localhost:5000/swagger
  • 确认数据库已初始化:后端启动时会自动建表和插入演示数据

Q想重置所有数据

  1. 停止后端
  2. 连接到 PostgreSQL 执行:DROP DATABASE "HealthManager";
  3. 重启后端,数据库会自动重建

Q能用自己的手机号注册吗

可以!在登录页点"去注册",输入你的手机号 + 昵称即可注册新账号。验证码任意输入(演示版不做真实短信验证)。


文档版本v1.0 最后更新2026-05-20 适用项目HealthManager 健康管理平台