fix: 清理健康咨询孤岛页面,补齐PRD缺失页面描述,优化多模块原型

- 删除无入口跳转的 record-detail.html 及其截图
- PRD页面清单补入 record-detail-rated/unrated/timeout、select-record、consult-flowchart
- PRD正文新增5个页面的功能说明、业务规则、交互说明
- 补充 video-detail-ongoing.jpg 截图
- 同步 index.html SITE_MAP 移除已删除页面条目
- 优化应急就医及管理端多个原型页面

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-21 17:00:03 +08:00
co-authored by Claude Opus 4.6
parent f51e598781
commit c5d407a624
47 changed files with 1855 additions and 372 deletions
+455
View File
@@ -0,0 +1,455 @@
# 应急就医(员工端)产品需求文档
## 模块概述
应急就医模块为油田员工提供紧急医疗场景下的一站式服务能力,涵盖应急资源地图查看(医院、医疗点、AED、救护车、急救包)、应急求助(拨打120、应急视频通话、应急电话)、急救提示与教学、大病就医预约挂号等功能,帮助员工在突发健康事件中快速获取周边急救资源和专业医疗支持。
### 页面导航结构
```
应急就医(员工端)
├── 应急就医主页
├── 应急资源地图
│ ├── 油田医院地图(默认)→ 医院详情
│ ├── 医疗点地图 → 医疗点详情
│ ├── AED地图 → AED详情
│ ├── 救护车地图 → 救护车详情
│ ├── 急救包地图 → 急救包详情
│ └── 模拟急救 → 急救提示书
├── 应急求助
│ ├── 拨打120(系统电话,将120号码带入到拨号页面)
│ ├── 应急视频通话
│ └── 应急电话(系统电话,将云坐席号码带入到拨号页面)
├── 大病就医预约
│ ├── 预约列表(进行中(待确认/已确认)/已完成/已取消)
│ ├── 发起预约(表单)
│ └── 预约详情(待确认/已确认/已完成/已取消)
├── 急救教学视频
│ ├── 视频列表
│ ├── 播放视频
└── 应急求助记录
```
### 预约状态流转图
```mermaid
stateDiagram-v2
[*] --> 待确认: 员工发起预约
待确认 --> 已确认: 管理人员确认并派单给驻场人员
待确认 --> 已取消: 员工取消 / 管理人员取消
已确认 --> 已完成: 驻场人员完成挂号,在应急APP点击已完成
已确认 --> 已取消: 员工取消 / 管理人员取消
```
## 页面清单
### 入口与总览
| 序号 | 页面/弹窗 | 文件 | 类型 |
|------|-----------|------|------|
| 1 | 应急就医主页 | index.html | 页面 |
### 应急资源地图
| 序号 | 页面/弹窗 | 文件 | 类型 |
|----|----------------|------|------|
| 2 | 应急资源地图(油田医院地图) | resource-map.html | 页面 |
| 3 | AED地图 | resource-map-aed.html | 页面 |
| 4 | 救护车地图 | resource-map-ambulance.html | 页面 |
| 5 | 医疗点地图 | resource-map-clinic.html | 页面 |
| 6 | 急救包地图 | resource-map-kit.html | 页面 |
| 7 | AED详情 | aed-detail.html | 页面 |
| 8 | 救护车详情 | ambulance-detail.html | 页面 |
| 9 | 医疗点详情 | clinic-detail.html | 页面 |
| 10 | 油田医院详情 | hospital-detail.html | 页面 |
| 11 | 急救包详情 | first-aid-kit-detail.html | 页面 |
| 12 | 急救提示书 | emergency-tips.html | 页面 |
### 应急求助
| 序号 | 页面/弹窗 | 文件 | 类型 |
|----|----------|------|------|
| 13 | 应急求助记录 | help-records.html | 页面 |
| 14 | 应急视频对话页面 | emergency-chat.html | 页面 |
### 急救教学
| 序号 | 页面/弹窗 | 文件 | 类型 |
|------|-----------|------|------|
| 15 | 急救教学视频 | first-aid-videos.html | 页面 |
### 大病就医预约
| 序号 | 页面/弹窗 | 文件 | 类型 |
|------|-----------|------|------|
| 16 | 预约列表(进行中) | appointment-list.html | 页面 |
| 17 | 预约列表(已完成) | appointment-list-done.html | 页面 |
| 18 | 预约列表(已取消) | appointment-list-cancelled.html | 页面 |
| 19 | 发起预约 | appointment-form.html | 页面 |
| 20 | 预约详情-待确认 | appointment-detail-pending.html | 页面 |
| 21 | 预约详情-已确认 | appointment-detail-confirmed.html | 页面 |
| 22 | 预约详情-已完成 | appointment-detail-done.html | 页面 |
| 23 | 预约详情-已取消 | appointment-detail-cancelled.html | 页面 |
---
## 逐页说明
---
## 一、入口与总览
### 1. 应急就医主页(index.html
![页面截图](screenshots/index.jpg)
**功能说明:** 应急就医模块的统一入口页,为员工提供各功能的快速访问路径,包含应急资源地图入口、应急求助快捷操作、更多功能菜单三个区域。
**业务规则:**
- 应急资源地图以卡片形式展示,含缩略地图和文字说明
- 应急求助区域提供三个快捷操作入口:拨打120、应急视频、应急电话
- 更多功能区域以列表形式展示:大病就医预约、急救教学视频、应急求助记录
**交互说明:**
- 点击"应急资源地图"卡片,跳转到应急资源地图页面
- 点击"拨打120",调起系统电话拨号,将120号码带入过去,并产生一条求助方式为“拨打120”的应急工单
- 点击"应急视频",跳转到应急视频通话页面,IM三方视频通话,拨打当前员工所在应急中心的操作人员和专业人员的三方视频,并产生一条求助方式为“应急视频”的进行中状态的应急工单。点击时需要判断当前系统中是否存在“进行中”的应急视频工单,是的话,则进入应急视频对话页面,不存在则拨打三方视频
- 点击"应急电话",调起系统电话拨号,将云坐席号码带入过去
- 点击"大病就医预约",跳转到预约列表页面
- 点击"急救教学视频",跳转到急救教学视频列表页面
- 点击"应急求助记录",跳转到应急求助记录页面
---
## 二、应急资源地图
### 2. 应急资源地图-油田医院/合作医院(resource-map.html
![页面截图](screenshots/resource-map.jpg)
**功能说明:** 以地图形式展示油田医院的资源信息。顶部Tab栏支持切换不同资源类型,点击标记可弹出资源概要弹窗。页面还提供模拟急救功能入口。
**业务规则:**
- 地图图标标记按资源类型使用不同图标进行区分
- 顶部Tab栏包含:油田医院(默认选中)、合作医院、医疗点、AED、救护车、急救包
- 点击标记弹出的卡片展示:医院图片、医院名称、距离/驾车时间、地址、联系电话和导航按钮
- 模拟急救面板提供心梗、猝死、脑梗/脑出血三种疾病场景
**交互说明:**
- 点击地图标记点,弹出底部资源概要卡片
- 点击顶部Tab栏切换资源类型,跳转到对应资源地图页面
- 点击资源卡片中的"联系电话"按钮,调起系统拨号
- 点击资源卡片中的"地图导航"按钮,调起地图导航
- 点击"模拟急救"按钮,展开疾病选择面板
- 点击疾病标签(心梗/猝死/脑梗),跳转到对应急救提示书页面
- 点击右侧定位按钮,重新定位到当前位置
- 点击 +/ 按钮,缩放地图
---
### 3-6. AED / 救护车 / 医疗点 / 急救包地图
![AED地图](screenshots/resource-map-aed.jpg)
![救护车地图](screenshots/resource-map-ambulance.jpg)
![医疗点地图](screenshots/resource-map-clinic.jpg)
![急救包地图](screenshots/resource-map-kit.jpg)
以上四个地图页面与油田医院地图共享统一的页面结构,仅资源类型不同。
**交互说明:** 同油田医院地图页面,底部Tab栏切换时跳转到对应资源地图页面,点击标记弹出该类型资源的概要卡片。
---
### 7. AED详情(aed-detail.html
![页面截图](screenshots/aed-detail.jpg)
**功能说明:** 展示单个AED设备的详细信息,包括设备编号、管理人联系方式、操作图片和视频资源。
**业务规则:**
- 名称写死“半自动体外除颤仪”
- 信息项:设备编号、所属单位、管理人电话、地址
- 附件区域:操作图片支持显示多个(可查看大图)、操作视频(可播放)、免责声明PDF(可下载)
- 提供联系电话和导航两个操作按钮
**交互说明:**
- 点击"联系电话"按钮,调起系统拨号
- 点击"导航"按钮,调起地图导航
- 点击操作图片,查看大图
- 点击操作视频,播放视频
- 点击返回箭头,返回地图页面
---
### 8. 救护车详情(ambulance-detail.html
![页面截图](screenshots/ambulance-detail.jpg)
**功能说明:** 展示单辆救护车的详细信息,包括驾驶人联系方式、所属医疗点、配备设备和救护能力。
**业务规则:**
- 信息项:驾驶人电话、地址、所属医疗点、车辆类型、配备设备列表、救护能力说明
- 提供联系电话操作按钮
**交互说明:**
- 点击"联系电话"按钮,调起系统拨号
- 点击"导航"按钮,调起地图导航
- 点击返回箭头,返回地图页面
---
### 9. 医疗点详情(clinic-detail.html
![页面截图](screenshots/clinic-detail.jpg)
**功能说明:** 展示单个医疗点的详细信息,包括所属医院、联系方式和医疗点简介。
**业务规则:**
- 信息项:医疗点名称、所属医院、所属单位、联系电话、地址
- 底部展示医疗点简介文字
- 提供联系电话和导航两个操作按钮
**交互说明:**
- 点击"联系电话"按钮,调起系统拨号
- 点击"导航"按钮,调起地图导航
- 点击返回箭头,返回地图页面
---
### 10. 油田医院/合作医院详情(hospital-detail.html
![页面截图](screenshots/hospital-detail.jpg)
**功能说明:** 展示油田医院/合作医院的详细信息,包括医院等级、急救擅长领域和医院简介。
**业务规则:**
- 头部展示医院图片、医院名称和等级标签(如"二甲")
- 信息项:联系电话、地址
- 医院简介区域支持展开/收起
- 急救擅长区域支持展开/收起
- 提供联系电话和导航两个操作按钮
**交互说明:**
- 点击"联系电话"按钮,调起系统拨号
- 点击"导航"按钮,调起地图导航
- 点击"展开"/"收起"切换医院简介和急救擅长的显示
- 点击返回箭头,返回地图页面
---
### 11. 急救包详情(first-aid-kit-detail.html
![页面截图](screenshots/first-aid-kit-detail.jpg)
**功能说明:** 展示单个急救包的详细信息,包括管理人联系方式和内配用品清单。
**业务规则:**
- 信息项:所属单位、管理人电话、地址
- 内配用品以分类表格展示
- 提供联系电话和导航两个操作按钮
**交互说明:**
- 点击"联系电话"按钮,调起系统拨号
- 点击"导航"按钮,调起地图导航
- 点击返回箭头,返回地图页面
---
## 三、应急求助
### 12. 应急视频对话页面(emergency-chat.html
![页面截图](screenshots/emergency-chat.jpg)
**功能说明:** 应急视频拨打之后,产生了一条“应急视频”的进行中状态的工单,如当前工单未完成,后续主页点击“应急视频”时,进入聊天对话页面
**业务规则:**
- 聊天区域展示三种消息类型:系统消息(居中灰色)、员工消息(右侧蓝色气泡)、对方消息(左侧白色气泡)
- 参与人员列表展示通话参与者的姓名和角色(如"吴凤-主治医师"、"张旭-操作人员"
- 底部输入栏包含语音按钮和"按住说话"按钮
**交互说明:**
- 长按"按住说话"按钮,发送语音消息
- 点击参与人员头像,查看人员信息
- 点击返回箭头,退出通话页面
---
### 13. 急救提示书(emergency-tips.html
![页面截图](screenshots/emergency-tips.jpg)
**功能说明:** 根据选择的疾病类型(心梗/猝死/脑梗)展示对应的急救步骤指导,并列出最近的急救资源及距离信息。
**业务规则:**
- 顶部以红色醒目标题显示急救提示书名称(如"心梗急救提示书")
- 急救步骤以编号列表形式展示,共4个步骤
- 最近急救资源清单按距离排序展示,每项包含:资源类型图标、距离信息、步行/驾车时间
- 资源类型包括:AED、急救包、救护车、医院、医疗点
**交互说明:**
- 点击资源项的"详情"按钮,跳转到对应资源详情页面
- 点击"导航"按钮,调起地图导航到该资源
- 点击"电话"按钮(救护车),调起系统拨号
- 点击返回箭头,返回地图页面
---
### 14. 应急求助记录(help-records.html
![页面截图](screenshots/help-records.jpg)
**功能说明:** 展示员工的历史应急求助记录列表,包含不同求助方式的记录。
**业务规则:**
- 记录卡片展示:求助方式(应急视频/拨打120/应急电话)、求助时间、应急中心名称
- 状态标签:进行中(蓝色)、已结束(灰色)
- 按时间倒序排列
**交互说明:**
- 只有进行中状态可以点击进去应急视频对话页面
- 点击返回箭头,返回应急就医主页
---
## 四、急救教学
### 15. 急救教学视频(first-aid-videos.html
![页面截图](screenshots/first-aid-videos.jpg)
**功能说明:** 提供急救教学视频列表,员工可搜索和观看各类急救技能教学视频。
**业务规则:**
- 顶部搜索栏支持按关键词搜索视频
- 视频以卡片列表形式展示,每张卡片包含:缩略图、视频标题、发布日期
- 视频类型包含:真人演示(中毒急救、成人心脏骤停、AED使用等)和动画教学(心肺复苏等)
**交互说明:**
- 在搜索栏输入关键词,实时过滤视频列表
- 点击视频卡片,进入视频播放页面
- 点击返回箭头,返回应急就医主页
---
## 五、大病就医预约
### 16. 预约列表-进行中(appointment-list.html
![页面截图](screenshots/appointment-list.jpg)
**功能说明:** 展示员工的大病就医预约记录列表,默认显示进行中的预约,支持Tab切换查看不同状态。
**业务规则:**
- Tab栏:全部、进行中(默认激活)、已完成、已取消
- 预约卡片展示:医院名称、状态标签、科室、医生、挂号类别、期望预约时间
- 进行中状态包含"待确认"和"已确认"两种子状态
- 底部提供"发起新预约"按钮
**交互说明:**
- 点击Tab栏切换不同状态的预约列表
- 点击预约卡片,跳转到对应状态的预约详情页面
- 点击"发起新预约"按钮,跳转到预约表单页面
- 点击返回箭头,返回应急就医主页
---
### 17. 预约列表-已完成(appointment-list-done.html
![页面截图](screenshots/appointment-list-done.jpg)
**功能说明:** 展示已完成状态的预约记录列表。
**业务规则:**
- "已完成"Tab激活,列表展示已完成的预约卡片
- 状态标签显示绿色"已完成"
- 卡片下方显示"驻场人员已完成挂号"提示
**交互说明:**
- 点击预约卡片,跳转到已完成预约详情页面
- 其他交互同预约列表-进行中
---
### 18. 预约列表-已取消(appointment-list-cancelled.html
![页面截图](screenshots/appointment-list-cancelled.jpg)
**功能说明:** 展示已取消状态的预约记录列表。
**业务规则:**
- "已取消"Tab激活,列表展示已取消的预约卡片
- 状态标签显示灰色"已取消"
- 支持区分"个人取消"和"管理人员取消"两种取消来源
**交互说明:**
- 点击预约卡片,跳转到已取消预约详情页面
- 其他交互同预约列表-进行中
---
### 19. 发起预约(appointment-form.html
![页面截图](screenshots/appointment-form.jpg)
**功能说明:** 员工填写大病就医预约表单,提交后进入待确认状态。
**业务规则:**
- 表单提交后创建一条"待确认"状态的预约记录
- 预约医院为下拉选择,选项来自系统配置的医院列表
- 挂号类别支持专家号和普通号
**表单字段表:**
| 字段名 | 类型 | 必填 | 校验规则 |
|--------|--------------|------|----------|
| 预约医院 | 下拉选择 | 是 | 从系统配置医院列表中选择 |
| 就诊卡号 | 文本输入 | 否 | 无 |
| 挂号类别 | 下拉选择 | 是 | 专家号/普通号 |
| 期望预约时间 | 日期时间选择,精确到时分 | 是 | 不可选择过去时间 |
| 预约科室 | 文本输入 | 是 | 无 |
| 预约医生 | 文本输入 | 是 | 无 |
| 病情描述 | 多行文本 | 是 | 无 |
**交互说明:**
- 填写完成后点击"确定"按钮提交预约
- 必填字段未填写时提示校验错误
- 点击返回箭头,返回预约列表页面
---
### 20-23. 预约详情(4种状态页面)
![待确认](screenshots/appointment-detail-pending.jpg)
![已确认](screenshots/appointment-detail-confirmed.jpg)
![已完成](screenshots/appointment-detail-done.jpg)
![已取消](screenshots/appointment-detail-cancelled.jpg)
预约详情为同一页面的4种状态变体,共享统一的预约信息展示结构,根据预约状态展示不同的顶部状态区和底部操作按钮。
**通用结构:**
- 顶部状态区:状态大标题 + 状态说明文字
- 预约信息卡片:预约医院、科室、医生、挂号类别、期望预约时间、发起预约时间
**各状态差异:**
| 状态 | 文件名 | 状态颜色 | 状态说明 | 底部按钮 | 附加信息 |
|------|--------|----------|----------|----------|----------|
| 待确认 | appointment-detail-pending.html | 橙色 | 请耐心等待管理人员进行确认 | 取消预约(红色边框) | 无 |
| 已确认 | appointment-detail-confirmed.html | 蓝色 | 已派单至驻场人员(姓名) | 取消预约 + 联系驻场人员 | 无 |
| 已完成 | appointment-detail-done.html | 绿色 | 驻场人员已完成挂号 | 联系驻场人员 | 挂号结果卡片 |
| 已取消 | appointment-detail-cancelled.html | 灰色 | 个人取消 / 管理人员取消 | 无 | 取消信息卡片(取消时间、取消原因) |
**业务规则:**
- 待确认和已确认状态支持员工主动取消预约
- 取消预约需二次确认(弹窗确认)
- 已完成状态额外展示挂号结果信息
- 已取消状态展示取消来源(个人取消/管理人员取消)及取消原因
**交互说明:**
- 点击"取消预约"按钮,弹出确认弹窗,确认后取消预约并返回列表
- 点击"联系驻场人员"按钮,调起系统拨号联系驻场人员
- 点击弹窗中的"再想想",关闭弹窗
- 点击弹窗中的"确认取消",取消预约并跳转回预约列表
- 点击返回箭头,返回预约列表页面
Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

@@ -66,6 +66,7 @@
</div>
<div class="tab-bar">
<div class="tab-item" onclick="window.location.href='resource-map.html'">油田医院</div>
<div class="tab-item">合作医院</div>
<div class="tab-item" onclick="window.location.href='resource-map-clinic.html'">医疗点</div>
<div class="tab-item tab-item--active">AED</div>
<div class="tab-item" onclick="window.location.href='resource-map-ambulance.html'">救护车</div>
@@ -66,6 +66,7 @@
</div>
<div class="tab-bar">
<div class="tab-item" onclick="window.location.href='resource-map.html'">油田医院</div>
<div class="tab-item">合作医院</div>
<div class="tab-item" onclick="window.location.href='resource-map-clinic.html'">医疗点</div>
<div class="tab-item" onclick="window.location.href='resource-map-aed.html'">AED</div>
<div class="tab-item tab-item--active">救护车</div>
@@ -65,6 +65,7 @@
</div>
<div class="tab-bar">
<div class="tab-item" onclick="window.location.href='resource-map.html'">油田医院</div>
<div class="tab-item">合作医院</div>
<div class="tab-item tab-item--active">医疗点</div>
<div class="tab-item" onclick="window.location.href='resource-map-aed.html'">AED</div>
<div class="tab-item" onclick="window.location.href='resource-map-ambulance.html'">救护车</div>
@@ -66,6 +66,7 @@
</div>
<div class="tab-bar">
<div class="tab-item" onclick="window.location.href='resource-map.html'">油田医院</div>
<div class="tab-item">合作医院</div>
<div class="tab-item" onclick="window.location.href='resource-map-clinic.html'">医疗点</div>
<div class="tab-item" onclick="window.location.href='resource-map-aed.html'">AED</div>
<div class="tab-item" onclick="window.location.href='resource-map-ambulance.html'">救护车</div>
@@ -88,6 +88,7 @@
<!-- [交互] 资源分类Tab -->
<div class="tab-bar">
<div class="tab-item tab-item--active">油田医院</div>
<div class="tab-item">合作医院</div>
<div class="tab-item" onclick="window.location.href='resource-map-clinic.html'">医疗点</div>
<div class="tab-item" onclick="window.location.href='resource-map-aed.html'">AED</div>
<div class="tab-item" onclick="window.location.href='resource-map-ambulance.html'">救护车</div>
+79 -20
View File
@@ -91,9 +91,13 @@ stateDiagram-v2
| 25 | video-detail-rejected.html | 视频咨询详情 - 已拒绝 | 页面 |
| 26 | rate-doctor.html | 评价医生 | 页面 |
| 27 | my-records.html | 我的咨询 | 页面 |
| 28 | record-detail.html | 咨询详情 | 页面 |
| 29 | assistant-chat.html | 咨询小助手 | 页面 |
| 30 | assistant-chat-history.html | 小助手历史对话 | 页面 |
| 28 | record-detail-rated.html | 咨询详情 - 已评价 | 页面 |
| 29 | record-detail-unrated.html | 咨询详情 - 未评价 | 页面 |
| 30 | record-detail-timeout.html | 咨询详情 - 已超时 | 页面 |
| 31 | select-record.html | 发送档案 | 页面 |
| 32 | assistant-chat.html | 咨询小助手 | 页面 |
| 33 | assistant-chat-history.html | 小助手历史对话 | 页面 |
| 34 | consult-flowchart.html | 员工咨询业务流程图 | 页面 |
---
@@ -788,9 +792,9 @@ stateDiagram-v2
**业务规则**
- 咨询状态及对应样式`进行中``已完成``待开始``待确认``已取消``已拒绝``已超时`
- 图文咨询状态:`进行中``已完成``已超时`
- 视频咨询状态:`待确认` `待开始` `进行中` `已完成``已取消` `已拒绝`
- 已完成的咨询如已评价则显示"已评价"标记,未评价则显示"待评价"标记
- 视频咨询 `待确认` `待开始``已取消` `已拒绝` 显示预约时间,`已完成` 显示通话时长,
- 小助手咨询仅有「进行中」和「已完成」两种状态
**交互说明**
@@ -804,30 +808,81 @@ stateDiagram-v2
---
### 5.3 咨询详情(record-detail.html
![页面截图](screenshots/record-detail.jpg)
### 5.3 咨询详情 - 已评价record-detail-rated.html
**功能说明**
结束的图文咨询点击咨询记录展示单条图文咨询记录详情。包含医生信息栏、咨询信息卡片、咨询人健康档案入口、历史对话入口、医生咨询小结。根据咨询是否已评价,显示不同的 UI:
- **已评价状态**:显示"我的评价"区域(5 星评价)、医生咨询小结,底部按钮为"再次咨询"(蓝色边框)+ "已评价"(灰色禁用)
- **未评价状态**:隐藏"我的评价"区域,显示医生咨询小结,底部按钮为"再次咨询"(蓝色边框)+ "评价"(蓝色填充)
完成且已评价的图文咨询详情页。展示医生信息栏(头像、姓名、科室、"已完成"状态标签)、咨询信息卡片(咨询类型、咨询人、咨询时间、结束时间、咨询时长)、"我的评价"区域(5 星评价 + 评价文字 + 匿名标识)、咨询人健康档案入口、历史对话入口。
**业务规则**
- 已完成的咨询显示医生咨询小结
- 已评价的咨询显示评价星级,"评价"按钮变为"已评价"禁用状态
- 未评价的咨询隐藏评价区域,显示"评价"按钮
- 显示"我的评价"区域,包含星级评分和评价文字
- 底部无操作按钮(已评价状态无需额外操作)
**交互说明**
- 点击对话入口卡片跳转到图文咨询历史对话页(只读状态)
- 点击「再次咨询」跳转到本次咨询的专家主页
- 点击「咨询人健康档案」入口跳转到健康档案详情页,从快速咨询产生的业务因没有咨询人健康档案信息,自动隐藏该区域
- 点击「评价」按钮(未评价状态)跳转到评价医生页
- 导航栏返回 → 我的咨询记录页
- 点击「咨询人健康档案」入口 → 跳转 consult-person-detail.html
- 点击「查看历史对话记录」→ 跳转 text-chat-history.html?from=record-detail-rated
- 导航栏返回 → my-records.html
---
### 5.4 咨询详情 - 未评价(record-detail-unrated.html
**功能说明**
已完成但未评价的图文咨询详情页。展示医生信息栏、咨询信息卡片、咨询人健康档案入口、历史对话入口。底部显示"评价"按钮引导用户完成评价。
**业务规则**
- 不显示评价区域
- 底部显示蓝色"评价"按钮
**交互说明**
- 点击「评价」按钮 → 跳转 rate-doctor.html
- 点击「咨询人健康档案」入口 → 跳转 consult-person-detail.html
- 点击「查看历史对话记录」→ 跳转 text-chat-history.html?from=record-detail-unrated
- 导航栏返回 → my-records.html
---
### 5.5 咨询详情 - 已超时(record-detail-timeout.html
**功能说明**
因超时自动关闭的图文咨询详情页。展示医生信息栏("已超时"橙色状态标签)、咨询信息卡片(含结束原因"超时自动关闭"红色文字)、超时提示卡片(橙色背景 + 左侧红色边框,说明超过七天无回复已自动关闭)、咨询人健康档案入口、历史对话入口。
**业务规则**
- 咨询信息卡片中"结束原因"显示为红色"超时自动关闭"
- 显示醒目的超时提示卡片,告知用户如需继续咨询请重新发起
- 底部无操作按钮
**交互说明**
- 点击「咨询人健康档案」入口 → 跳转 consult-person-detail.html
- 点击「查看历史对话记录」→ 跳转 text-chat-history.html?from=record-detail-timeout
- 导航栏返回 → my-records.html
---
### 5.6 发送档案(select-record.html
**功能说明**
图文咨询聊天中发送健康档案的选择页面。顶部显示当前咨询人信息(头像、姓名、基本信息、与本人关系标签),下方列出该咨询人的健康档案列表,每条档案卡片包含图标、档案名称、描述摘要、标签(如持续时间)、创建日期,右侧为单选勾选框。
**业务规则**
- 单选模式,同一时间只能选中一条档案
- 选中档案后底部"发送档案"按钮变为蓝色可点击状态
**交互说明**
- 点击档案卡片 → 选中该档案(取消其他选中)
- 点击「发送档案」按钮 → 返回聊天页(history.back
- 导航栏返回 → 返回上一页
---
@@ -881,3 +936,7 @@ stateDiagram-v2
- 导航栏返回 → 我的咨询记录页
- 消息区可上下滚动浏览历史对话
---
Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@@ -1,331 +0,0 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>咨询详情</title>
<style>
/* 全局重置 */
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: #f0f2f5;
display: flex;
justify-content: center;
align-items: flex-start;
min-height: 100vh;
padding: 20px;
font-family: -apple-system, BlinkMacSystemFont, 'PingFang SC', 'Helvetica Neue', sans-serif;
}
/* 手机壳模拟器 */
.phone-shell {
width: 390px;
min-height: 844px;
background: #f5f5f5;
border-radius: 44px;
box-shadow: 0 20px 60px rgba(0,0,0,0.25), inset 0 0 0 2px #e0e0e0;
overflow: hidden;
position: relative;
display: flex;
flex-direction: column;
}
/* 状态栏 */
.phone-status-bar {
height: 44px;
background: #fff;
display: flex;
align-items: center;
justify-content: space-between;
padding: 0 24px;
font-size: 12px;
font-weight: 600;
flex-shrink: 0;
}
.phone-status-bar .time { font-size: 15px; font-weight: 700; }
.phone-status-bar .icons { display: flex; gap: 6px; align-items: center; }
/* 导航栏 */
.nav-bar {
height: 44px;
display: flex;
align-items: center;
padding: 0 16px;
background: #fff;
border-bottom: 1px solid #f0f0f0;
flex-shrink: 0;
position: relative;
}
.nav-bar .nav-back { font-size: 14px; color: #1a1a1a; cursor: pointer; text-decoration: none; }
.nav-bar .nav-title { position: absolute; left: 50%; transform: translateX(-50%); font-size: 17px; font-weight: 600; color: #1a1a1a; }
/* 可滚动内容区 */
.scroll-content { flex: 1; overflow-y: auto; }
.scroll-content::-webkit-scrollbar { display: none; }
/* 医生信息栏 */
.detail-doctor-bar { display: flex; align-items: center; gap: 12px; padding: 16px; background: #fff; border-bottom: 1px solid #f0f0f0; }
.detail-doctor-bar .dd-avatar { width: 50px; height: 50px; border-radius: 50%; background: linear-gradient(135deg,#e8f4ff,#bdd7ff); display: flex; align-items: center; justify-content: center; font-size: 24px; flex-shrink: 0; }
.detail-doctor-bar .dd-info { flex: 1; }
.detail-doctor-bar .dd-name { font-size: 16px; font-weight: 700; color: #1a1a1a; }
.detail-doctor-bar .dd-dept { font-size: 13px; color: #999; margin-top: 2px; }
.detail-doctor-bar .dd-status { font-size: 12px; padding: 3px 10px; border-radius: 20px; background: #e6f4ff; color: #1677ff; white-space: nowrap; }
/* 咨询信息卡片 */
.detail-info-card { margin: 12px 16px; background: #f8f9fa; border-radius: 14px; padding: 14px 16px; }
.detail-info-card .dic-row { display: flex; justify-content: space-between; font-size: 13px; padding: 5px 0; border-bottom: 1px solid #f0f0f0; }
.detail-info-card .dic-row:last-child { border-bottom: none; }
.detail-info-card .dic-label { color: #999; }
.detail-info-card .dic-value { color: #1a1a1a; font-weight: 500; }
/* 对话入口卡片 */
.chat-entry {
margin: 12px 16px;
background: #fff;
border-radius: 14px;
padding: 16px;
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
text-decoration: none;
color: inherit;
transition: transform 0.15s;
}
.chat-entry:active { transform: scale(0.98); }
.chat-entry .ce-icon { font-size: 28px; flex-shrink: 0; }
.chat-entry .ce-info { flex: 1; }
.chat-entry .ce-title { font-size: 15px; font-weight: 600; color: #1a1a1a; }
.chat-entry .ce-sub { font-size: 12px; color: #999; margin-top: 2px; }
.chat-entry .ce-arrow { font-size: 18px; color: #ccc; flex-shrink: 0; }
/* 我的评价区域 */
.rating-section { margin: 12px 16px; background: #fff; border-radius: 14px; padding: 16px; display: none; }
.rating-section.show { display: block; }
.rating-section .rs-label { font-size: 13px; color: #999; margin-bottom: 8px; }
.rating-section .rs-stars { display: flex; gap: 4px; }
.rating-section .rs-stars .star { font-size: 20px; }
/* 咨询人健康档案 */
.health-record-entry {
margin: 12px 16px;
background: #fff;
border-radius: 14px;
padding: 16px;
display: flex;
align-items: center;
gap: 12px;
cursor: pointer;
box-shadow: 0 2px 8px rgba(0,0,0,0.06);
text-decoration: none;
color: inherit;
transition: transform 0.15s;
}
.health-record-entry:active { transform: scale(0.98); }
.health-record-entry .hre-icon { font-size: 24px; flex-shrink: 0; }
.health-record-entry .hre-title { font-size: 15px; font-weight: 600; color: #1a1a1a; flex: 1; }
.health-record-entry .hre-arrow { font-size: 18px; color: #ccc; flex-shrink: 0; }
/* 医生咨询小结 */
.doctor-summary {
margin: 12px 16px;
background: #fffbe6;
border-radius: 14px;
padding: 16px;
border-left: 4px solid #faad14;
}
.doctor-summary .ds-title { font-size: 14px; font-weight: 600; color: #d46b08; margin-bottom: 8px; display: flex; align-items: center; gap: 6px; }
.doctor-summary .ds-content { font-size: 13px; color: #ad6800; line-height: 1.6; }
/* 底部操作栏 */
.detail-footer { padding: 12px 16px; background: #fff; border-top: 1px solid #f0f0f0; flex-shrink: 0; display: flex; gap: 10px; }
.detail-footer .btn-outline {
flex: 1;
height: 44px;
background: #fff;
color: #1677ff;
border: 2px solid #1677ff;
border-radius: 22px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: opacity 0.15s;
}
.detail-footer .btn-outline:active { opacity: 0.85; }
.detail-footer .btn-primary {
flex: 1;
height: 44px;
background: #1677ff;
color: #fff;
border: none;
border-radius: 22px;
font-size: 15px;
font-weight: 600;
cursor: pointer;
transition: opacity 0.15s;
}
.detail-footer .btn-primary:active { opacity: 0.85; }
.detail-footer .btn-disabled {
flex: 1;
height: 44px;
background: #f0f0f0;
color: #bfbfbf;
border: none;
border-radius: 22px;
font-size: 15px;
font-weight: 600;
cursor: not-allowed;
}
/* 底部安全区留白 */
.bottom-spacer { height: 34px; flex-shrink: 0; background: #fff; }
</style>
</head>
<body>
<!-- 手机壳模拟器 -->
<div class="phone-shell">
<!-- 状态栏:时间 + 信号电池图标 -->
<div class="phone-status-bar">
<span class="time">10:24</span>
<div class="icons">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M1 6l5 5 5-5"/><path d="M4 9l3 3 3-3" opacity="0.5"/></svg>
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><rect x="1" y="6" width="18" height="12" rx="2"/><path d="M21 10v4"/></svg>
</div>
</div>
<!-- [交互] 导航栏:返回按钮 → my-records.html + 标题 -->
<div class="nav-bar">
<a class="nav-back" href="my-records.html">← 返回</a>
<span class="nav-title">咨询详情</span>
</div>
<!-- 可滚动内容区 -->
<div class="scroll-content">
<!-- 医生信息栏:头像 + 姓名科室 + 状态标签 -->
<div class="detail-doctor-bar">
<div class="dd-avatar">👨‍⚕️</div>
<div class="dd-info">
<div class="dd-name">张建国医生</div>
<div class="dd-dept">北京协和医院 · 心内科</div>
</div>
<span class="dd-status">进行中</span>
</div>
<!-- 咨询信息卡片:类型、时间、状态、时长 -->
<div class="detail-info-card">
<div class="dic-row">
<span class="dic-label">咨询类型</span>
<span class="dic-value">💬 图文咨询</span>
</div>
<div class="dic-row">
<span class="dic-label">咨询时间</span>
<span class="dic-value">2026-04-07 10:20</span>
</div>
<div class="dic-row">
<span class="dic-label">咨询人</span>
<span class="dic-value">张三(父亲)</span>
</div>
<div class="dic-row">
<span class="dic-label">咨询状态</span>
<span class="dic-value">已完成</span>
</div>
<div class="dic-row">
<span class="dic-label">咨询时长</span>
<span class="dic-value">32分钟</span>
</div>
</div>
<!-- [条件显示] 我的评价区域:已评价时显示 -->
<div id="ratingSection" class="rating-section">
<div class="rs-label">我的评价</div>
<div class="rs-stars">
<span class="star"></span>
<span class="star"></span>
<span class="star"></span>
<span class="star"></span>
<span class="star"></span>
</div>
</div>
<!-- [交互] 咨询人健康档案入口 -->
<a class="health-record-entry" href="#">
<span class="hre-icon">📋</span>
<span class="hre-title">咨询人健康档案</span>
<span class="hre-arrow"></span>
</a>
<!-- [交互] 对话入口卡片:点击跳转 text-chat.html 查看历史对话 -->
<a class="chat-entry" href="text-chat.html?from=record-detail">
<span class="ce-icon">💬</span>
<div class="ce-info">
<div class="ce-title">查看历史对话记录</div>
<div class="ce-sub">点击查看完整对话内容</div>
</div>
<span class="ce-arrow"></span>
</a>
<!-- [条件显示] 医生咨询小结:已完成的咨询显示 -->
<div id="doctorSummary" class="doctor-summary" style="display: none;">
<div class="ds-title">📋 医生咨询小结</div>
<div class="ds-content">建议完善心内科相关检查:心电图、超声心动图,同时加强血压日常监测,低盐低脂饮食,避免剧烈运动,如症状加重请及时就诊。</div>
</div>
</div>
<!-- [交互] 底部操作栏:根据评价状态显示不同按钮 -->
<div class="detail-footer">
<button id="btnContinue" class="btn-outline" onclick="window.location.href='text-chat.html?from=record-detail'">再次咨询</button>
<button id="btnRate" class="btn-primary" onclick="handleRate()">评价</button>
<button id="btnRated" class="btn-disabled" disabled>已评价</button>
</div>
<!-- 底部安全区留白 -->
<div class="bottom-spacer"></div>
</div>
<script>
/**
* 页面初始化:根据咨询状态设置UI
* 数据来源:实际应从后端API获取,这里使用示例数据
*/
function initPage() {
// 示例:从URL参数或数据属性获取是否已评价的状态
// 实际应用中应从后端API获取真实数据
const isRated = true; // 改为 false 可查看未评价状态
const ratingSection = document.getElementById('ratingSection');
const doctorSummary = document.getElementById('doctorSummary');
const btnRate = document.getElementById('btnRate');
const btnRated = document.getElementById('btnRated');
if (isRated) {
// 已评价状态
ratingSection.classList.add('show');
doctorSummary.style.display = 'block';
btnRate.style.display = 'none';
btnRated.style.display = 'block';
} else {
// 未评价状态
ratingSection.classList.remove('show');
doctorSummary.style.display = 'block';
btnRate.style.display = 'block';
btnRated.style.display = 'none';
}
}
/**
* 处理评价按钮点击
*/
function handleRate() {
// 跳转到评价页面或打开评价弹窗
alert('跳转到评价页面');
}
// 页面加载完成后初始化
document.addEventListener('DOMContentLoaded', initPage);
</script>
</body>
</html>