feat: 工单详情页新增角色权限控制,补充PRD文档与模块文档结构
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@@ -235,7 +235,7 @@ const SITE_MAP = [
|
||||
{ file:'report-detail-dialog.html', label:'报表详情弹窗', dialog:true },
|
||||
{ file:'expert-schedule-dialog.html', label:'专家排班弹窗', dialog:true }
|
||||
]},
|
||||
{ name:'应急就医(管理员)', dir:'web-admin/emergency-dispatch/admin', entry:'archive-personal.html', pages:[
|
||||
{ name:'应急就医(管理员)', dir:'web-admin/emergency-dispatch/admin', entry:'archive-personal.html', prd:'web-admin/emergency-dispatch/admin/doc/PRD.md', pages:[
|
||||
{ file:'archive-personal.html', label:'个人应急数据' },
|
||||
{ file:'archive-personal-detail.html', label:'个人应急数据详情' },
|
||||
{ file:'archive-personal-detail-illness.html', label:'个人大病就医详情' },
|
||||
@@ -283,14 +283,14 @@ const SITE_MAP = [
|
||||
{ file:'exception-dirty.html', label:'系统脏数据' },
|
||||
{ file:'exception-result.html', label:'结果异常' }
|
||||
]},
|
||||
{ name:'应急就医(操作人员)', dir:'web-admin/emergency-dispatch/operator', entry:'emergency-active.html', pages:[
|
||||
{ name:'应急就医(操作人员)', dir:'web-admin/emergency-dispatch/operator', entry:'emergency-active.html', prd:'web-admin/emergency-dispatch/operator/doc/PRD.md', pages:[
|
||||
{ file:'emergency-active.html', label:'正在应急' },
|
||||
{ file:'work-order.html', label:'应急工单' },
|
||||
{ file:'call-record.html', label:'通话记录' },
|
||||
{ file:'duty-group.html', label:'值班小组' },
|
||||
{ file:'serious-illness.html', label:'大病就医' }
|
||||
]},
|
||||
{ name:'应急就医(专业人员)', dir:'web-admin/emergency-dispatch/professional', entry:'professional.html', pages:[
|
||||
{ name:'应急就医(专业人员)', dir:'web-admin/emergency-dispatch/professional', entry:'professional.html', prd:'web-admin/emergency-dispatch/professional/doc/PRD.md', pages:[
|
||||
{ file:'professional.html', label:'正在应急' }
|
||||
]},
|
||||
{ name:'一线医疗', dir:'web-admin/frontline-medical', pages:[] }
|
||||
|
||||
@@ -236,26 +236,26 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
</div>
|
||||
<!-- 待确认操作按钮 -->
|
||||
<div class="action-bar" data-group="pending" id="pendingActions">
|
||||
<button class="btn btn--danger" onclick="openRejectModal()">驳回</button>
|
||||
<button class="btn btn--danger" onclick="openRejectModal()">取消预约</button>
|
||||
<button class="btn btn--primary" onclick="openDispatchModal()">立即派单</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- 驳回弹窗 -->
|
||||
<!-- 取消弹窗 -->
|
||||
<div class="modal-mask" id="rejectModal" onclick="if(event.target===this)closeRejectModal()">
|
||||
<div class="modal-box" style="width:480px;">
|
||||
<div class="modal-header"><span class="modal-title">驳回申请</span><button class="modal-close" onclick="closeRejectModal()">✕</button></div>
|
||||
<div class="modal-header"><span class="modal-title">取消申请</span><button class="modal-close" onclick="closeRejectModal()">✕</button></div>
|
||||
<div class="modal-body">
|
||||
<div class="field">
|
||||
<div class="field__label">驳回原因<span class="req">*</span></div>
|
||||
<textarea class="field__textarea" id="rejectReason" placeholder="请输入驳回原因..."></textarea>
|
||||
<div class="field__label">取消原因<span class="req">*</span></div>
|
||||
<textarea class="field__textarea" id="rejectReason" placeholder="请输入取消原因..."></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn" onclick="closeRejectModal()">取消</button>
|
||||
<button class="btn btn--primary" onclick="submitReject()">确认驳回</button>
|
||||
<button class="btn" onclick="closeRejectModal()">返回</button>
|
||||
<button class="btn btn--primary" onclick="submitReject()">确认取消</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -92,6 +92,9 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
.card__header-btn:hover{background:var(--primary-light);}
|
||||
|
||||
/* 表单样式(编辑模式) */
|
||||
/* 只读表单字段 */
|
||||
.form-row--readonly{opacity:.7;pointer-events:none;}
|
||||
.form-row--readonly .form-input{background:#f5f5f5;border-color:#e8e8e8;color:var(--text-secondary);}
|
||||
.form-row{margin-bottom:20px;}
|
||||
.form-group{display:flex;align-items:flex-start;gap:8px;}
|
||||
.form-label{font-size:var(--font-sm);color:var(--text-primary);white-space:nowrap;min-width:96px;text-align:right;line-height:36px;}
|
||||
@@ -232,7 +235,10 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
|
||||
<!-- 基本信息 -->
|
||||
<div class="card">
|
||||
<div class="card__title">基本信息</div>
|
||||
<div class="card__header">
|
||||
<div class="card__title">基本信息</div>
|
||||
<button class="btn btn-danger btn-sm" id="btnEndEmergency" style="display:none;" onclick="openEndConfirm()">结束应急</button>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-cell"><span class="info-cell__label">工单编号:</span><span class="info-cell__value">YJ5633256</span></div>
|
||||
<div class="info-cell"><span class="info-cell__label">应急中心:</span><span class="info-cell__value">西安应急中心</span></div>
|
||||
@@ -250,7 +256,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
<div class="info-row">
|
||||
<div class="info-cell"><span class="info-cell__label">操作人员:</span><span class="info-cell__value">刘旭</span></div>
|
||||
<div class="info-cell"><span class="info-cell__label">专业人员:</span><span class="info-cell__value">刘旭</span></div>
|
||||
<div class="info-cell"><span class="info-cell__label">工单状态:</span><span class="info-cell__value status status--doing" id="orderStatus">处理中</span> <button class="btn btn-danger btn-sm" id="btnEndEmergency" style="display:none;margin-left:12px;" onclick="openEndConfirm()">结束应急</button></div>
|
||||
<div class="info-cell"><span class="info-cell__label">工单状态:</span><span class="info-cell__value status status--doing" id="orderStatus">处理中</span></div>
|
||||
</div>
|
||||
<div class="info-row">
|
||||
<div class="info-cell"><span class="info-cell__label">完成时间:</span><span class="info-cell__value">2026-03-21 16:45:00</span></div>
|
||||
@@ -284,7 +290,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
</div>
|
||||
<!-- 编辑视图 -->
|
||||
<div id="rescueEditView" style="display:none;">
|
||||
<div class="form-row">
|
||||
<div class="form-row" data-field="opinion">
|
||||
<div class="form-group" style="flex:1;">
|
||||
<label class="form-label">救助意见:</label>
|
||||
<div class="form-control-wrap">
|
||||
@@ -292,7 +298,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-row" data-field="result">
|
||||
<div class="form-group" style="flex:1;">
|
||||
<label class="form-label">救助结果:</label>
|
||||
<div class="form-control-wrap">
|
||||
@@ -300,7 +306,7 @@ body{font-family:-apple-system,BlinkMacSystemFont,'PingFang SC','Microsoft YaHei
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-row" data-field="photos">
|
||||
<div class="form-group" style="flex:1;">
|
||||
<label class="form-label">相关照片:</label>
|
||||
<div class="form-control-wrap">
|
||||
@@ -707,6 +713,38 @@ function addSummary(){
|
||||
var bc=document.querySelector('.breadcrumb a');
|
||||
if(bc)bc.href='center-work-order.html?role=operator';
|
||||
}
|
||||
/* ===== 角色权限控制 ===== */
|
||||
var _hide=function(el){if(el)el.style.display='none';};
|
||||
if(!role||role==='admin'){
|
||||
// 管理员:隐藏所有编辑按钮和结束应急
|
||||
_hide(document.getElementById('rescueEditBtn'));
|
||||
_hide(document.getElementById('ambEditBtn'));
|
||||
_hide(document.getElementById('btnEndEmergency'));
|
||||
// 隐藏补充小结操作按钮和新增
|
||||
document.querySelectorAll('#summaryList .summary-item__btn').forEach(function(b){b.style.display='none';});
|
||||
_hide(document.querySelector('.summary-add'));
|
||||
}
|
||||
// 将指定字段设为只读态
|
||||
var _readonly=function(sel){
|
||||
var el=document.querySelector(sel);
|
||||
if(!el)return;
|
||||
el.classList.add('form-row--readonly');
|
||||
el.querySelectorAll('input,textarea').forEach(function(inp){inp.disabled=true;});
|
||||
};
|
||||
if(role==='operator'){
|
||||
// 操作人员:救助意见只读
|
||||
_readonly('#rescueEditView [data-field="opinion"]');
|
||||
}
|
||||
if(role==='professional'){
|
||||
// 专业人员:救助结果、相关照片只读
|
||||
_readonly('#rescueEditView [data-field="result"]');
|
||||
_readonly('#rescueEditView [data-field="photos"]');
|
||||
// 隐藏救护车编辑按钮
|
||||
_hide(document.getElementById('ambEditBtn'));
|
||||
// 隐藏补充小结操作按钮和新增
|
||||
document.querySelectorAll('#summaryList .summary-item__btn').forEach(function(b){b.style.display='none';});
|
||||
_hide(document.querySelector('.summary-add'));
|
||||
}
|
||||
})();
|
||||
/* ===== 救助信息编辑 ===== */
|
||||
function editRescue(){
|
||||
@@ -737,8 +775,11 @@ function confirmEndEmergency(){
|
||||
st.textContent='已完成';st.className='info-cell__value status status--done';
|
||||
document.getElementById('btnEndEmergency').style.display='none';
|
||||
}
|
||||
/* 页面加载时判断工单状态,非已完成则显示结束应急按钮 */
|
||||
/* 页面加载时判断工单状态,非管理员且非已完成则显示结束应急按钮 */
|
||||
(function(){
|
||||
var params=new URLSearchParams(window.location.search);
|
||||
var role=params.get('role');
|
||||
if(!role||role==='admin')return; // 管理员不显示结束应急
|
||||
var st=document.getElementById('orderStatus');
|
||||
if(st&&st.textContent.trim()!=='已完成'){
|
||||
document.getElementById('btnEndEmergency').style.display='';
|
||||
|
||||
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 9.3 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 127 KiB |
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 78 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 122 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 118 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 92 KiB |
|
After Width: | Height: | Size: 52 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 58 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 89 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 93 KiB |
@@ -0,0 +1,377 @@
|
||||
# 应急就医(操作人员端)产品需求文档
|
||||
|
||||
> **所属端**:Web 管理端(操作人员视角)
|
||||
> **模块路径**:`web-admin/emergency-dispatch/operator/`
|
||||
> **最后更新**:2026-04-28
|
||||
|
||||
---
|
||||
|
||||
## 模块概述
|
||||
|
||||
操作人员端用于承接员工端发起的应急求助,负责实时沟通、资源调度、驻场派单、救护车支援、救助过程留痕与工单闭环,并与专业人员(提供医学救助意见)和管理端(工单台账 / 排班 / 统计)协同完成处置。
|
||||
|
||||
该目录下共 5 个页面:其中 1 个为操作人员核心处置页面(`emergency-active.html`),4 个为角色路由页(自动跳转至管理端通用页面并携带 `role=operator` 参数)。
|
||||
|
||||
---
|
||||
|
||||
## 页面导航结构
|
||||
|
||||
```text
|
||||
应急就医(操作人员)
|
||||
├── 正在应急(实时处置主界面)
|
||||
│ ├── 查看员工求助位置(地图弹窗)
|
||||
│ ├── 驻场派单(表单态 / 已派单信息态)
|
||||
│ ├── 救护车支援(表单态 / 已支援信息态)
|
||||
│ ├── 救助信息(补充小结 + 救助结果)
|
||||
│ └── 结束应急(确认弹窗 → 已结束结果态)
|
||||
├── 应急工单(路由页)→ 管理端应急工单页(operator 权限视图)
|
||||
├── 通话记录(路由页)→ 管理端通话记录页(operator 权限视图)
|
||||
├── 大病就医(路由页)→ 管理端大病就医页(operator 权限视图)
|
||||
└── 值班小组(路由页)→ 管理端排班配置页(operator 权限视图)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 应急处置状态流转图
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 待受理 : 员工端发起求助
|
||||
待受理 --> 进行中 : 操作人员进入"正在应急"
|
||||
进行中 --> 资源调度中 : 触发驻场派单 / 救护车支援
|
||||
资源调度中 --> 进行中 : 派单成功,持续沟通
|
||||
进行中 --> 已结束 : 点击"结束应急"并二次确认
|
||||
已结束 --> [*]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 页面清单
|
||||
|
||||
| 序号 | 二级菜单 | 页面/弹窗 | 文件 | 类型 |
|
||||
|------|----------|-----------|------|------|
|
||||
| 1 | 正在应急 | 正在应急主界面 | emergency-active.html | 页面 |
|
||||
| 1-1 | 正在应急 | 查看员工求助位置 | emergency-active.html | 弹窗 |
|
||||
| 1-2 | 正在应急 | 驻场派单(表单态) | emergency-active.html | 弹窗 |
|
||||
| 1-3 | 正在应急 | 驻场派单(已派单信息态) | emergency-active.html | 弹窗状态 |
|
||||
| 1-4 | 正在应急 | 救护车支援(表单态) | emergency-active.html | 弹窗 |
|
||||
| 1-5 | 正在应急 | 救护车支援(已支援信息态) | emergency-active.html | 弹窗状态 |
|
||||
| 1-6 | 正在应急 | 救助信息 | emergency-active.html | 弹窗 |
|
||||
| 1-7 | 正在应急 | 结束应急确认 | emergency-active.html | 弹窗 |
|
||||
| 2 | 应急工单 | 应急工单(路由页) | work-order.html | 路由页 |
|
||||
| 3 | 通话记录 | 通话记录(路由页) | call-record.html | 路由页 |
|
||||
| 4 | 大病就医 | 大病就医(路由页) | serious-illness.html | 路由页 |
|
||||
| 5 | 值班小组 | 值班小组(路由页) | duty-group.html | 路由页 |
|
||||
|
||||
---
|
||||
|
||||
## 逐页说明
|
||||
|
||||
## 一、实时处置
|
||||
|
||||
### 1. 正在应急(emergency-active.html)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
操作人员核心工作台,采用三栏布局:左侧联系人列表(320px)+ 中间对话区 + 右侧值班面板(320px)。支持与员工实时文字沟通、查看患者定位、调取周边医疗资源,并执行驻场派单、救护车支援、救助信息记录、结束应急等关键处置操作。
|
||||
|
||||
**页面布局说明:**
|
||||
|
||||
左侧联系人列表:
|
||||
- 顶部搜索框(搜索应急人员)+ 刷新按钮
|
||||
- 联系人卡片:头像、姓名、性别年龄、最后消息时间、最后消息预览文本、未读消息数角标
|
||||
- 当前选中卡片高亮显示
|
||||
|
||||
中间对话区:
|
||||
- 顶部患者信息栏:患者姓名 + 基本信息(性别 年龄 | 员工编号 | 单位·部门)
|
||||
- 顶部操作按钮组:驻场派单(warning 样式)、救护车支援(default)、救助信息(default)、结束应急(danger)
|
||||
- 聊天消息区:时间分隔线、左侧员工消息气泡、右侧操作人员消息气泡
|
||||
- 底部操作按钮行:查看员工求助位置
|
||||
- 发送输入框:工具栏(表情 / 图片 / 文件 / 语音通话 / 视频通话)+ 文本输入区 + 发送按钮
|
||||
|
||||
右侧值班面板:
|
||||
- 标题"值班信息"
|
||||
- 统计卡片 2×2 网格:当日应急人数(红色)、当月应急人数(蓝色)、应急响应及时率(绿色)、应急任务完成率(橙色)
|
||||
- 月视图日历:年月切换箭头、星期行、日期网格(今日高亮、有排班日期带蓝色圆点标记)
|
||||
- 今日值班人员列表:头像、姓名(含职称)、角色标签
|
||||
|
||||
**业务规则:**
|
||||
- 当前应急会话绑定员工身份、所属单位及工单上下文,不可跨会话混用。
|
||||
- 地图资源按类型分 Tab 展示:油田医院 / 合作医院 / 医疗点 / 救护车 / AED / 急救包。
|
||||
- 驻场派单需先选择驻场人员后方可确认;派单成功后按钮进入"已派单信息态",不可重复提交。
|
||||
- 救护车支援需选择车辆后方可提交;驾驶人信息由系统自动带出,只读展示。
|
||||
- 结束应急需二次确认;确认后结束按钮置灰禁用,底部操作按钮行与输入区隐藏,聊天区追加"本次应急已结束"系统卡片消息,页面进入已结束结果态。
|
||||
|
||||
**交互说明:**
|
||||
- 点击"查看员工求助位置",打开地图弹窗,支持资源 Tab 切换与联系电话拨号。
|
||||
- 点击"驻场派单",打开派单弹窗(表单态);确认后弹窗切换为已派单信息态,展示派单时间、人员、医院、说明、状态标签。
|
||||
- 点击"救护车支援",打开支援弹窗(表单态);确认后弹窗切换为已支援信息态,展示车牌、驾驶人、联系电话、目的地、随行人等信息,并提供"修改"入口。
|
||||
- 点击"救助信息",打开救助信息弹窗,可新增 / 编辑 / 删除补充小结,并填写救助结果说明与上传相关照片。
|
||||
- 点击"结束应急",打开确认弹窗;确认后进入结束态,不可继续发送消息与执行调度操作。
|
||||
|
||||
---
|
||||
|
||||
### 弹窗1:查看员工求助位置(地图弹窗)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
展示患者当前位置及周边医疗资源,辅助操作人员快速决策调度方案。
|
||||
|
||||
**布局说明:**
|
||||
左右两栏布局:
|
||||
- 左侧上方:模拟地图区域(网格背景、道路线、建筑物标注、患者位置红色脉冲标记、各类资源标记点)
|
||||
- 左侧下方:患者信息区(患者姓名·性别·年龄、详细地址、求助时间、坐标信息)
|
||||
- 右侧:附近医疗资源面板
|
||||
- Tab 切换:油田医院 / 合作医院 / 医疗点 / 救护车 / AED / 急救包
|
||||
- 资源卡片列表:图标、名称、所属单位、距离、联系电话(可拨号)、地址
|
||||
|
||||
**业务规则:**
|
||||
- 患者位置信息来源于员工端求助时上报的 GPS 坐标,实时展示。
|
||||
- 各类资源按距离由近到远排序展示。
|
||||
- 联系电话支持点击直接拨号。
|
||||
|
||||
**交互说明:**
|
||||
- 点击右侧资源卡片,地图上对应标记点高亮;点击地图标记点,右侧对应资源卡片高亮并滚动至可见区域。
|
||||
- Tab 切换时,地图标记点同步过滤,仅展示当前 Tab 类型的资源。
|
||||
|
||||
---
|
||||
|
||||
### 弹窗2:驻场派单
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
操作人员向驻场人员下发处置任务,指定人员赶赴现场提供救助支持。
|
||||
|
||||
#### 表单态
|
||||
|
||||
**表单字段:**
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| 驻场人员 | 可搜索下拉选择 | 是 | 支持按姓名 / 医院搜索,选中后自动带出联系电话 |
|
||||
| 联系电话 | 只读文本 | — | 由驻场人员自动带出,不可手动编辑 |
|
||||
| 派单说明 | 多行文本 | 否 | 建议填写处置要求与注意事项 |
|
||||
|
||||
**业务规则:**
|
||||
- 驻场人员未选择时,"确定派单"按钮禁用。
|
||||
- 联系电话随驻场人员选择自动填充,切换人员时同步更新。
|
||||
|
||||
**交互说明:**
|
||||
- 底部按钮:取消(关闭弹窗)/ 确定派单(提交并切换为已派单信息态)。
|
||||
|
||||
#### 已派单信息态
|
||||
|
||||

|
||||
|
||||
**展示字段:**
|
||||
|
||||
| 字段名 | 说明 |
|
||||
|--------|------|
|
||||
| 派单时间 | 系统记录的提交时间戳 |
|
||||
| 驻场人员 | 已选择的驻场人员姓名 |
|
||||
| 所在医院 | 驻场人员所属医院 |
|
||||
| 联系电话 | 驻场人员联系电话 |
|
||||
| 派单说明 | 提交时填写的说明内容 |
|
||||
| 派单状态 | 标签:进行中(蓝色)/ 已完成(绿色) |
|
||||
|
||||
**交互说明:**
|
||||
- 底部按钮:关闭 / 确认。
|
||||
- 已派单信息态为只读展示,不支持直接修改派单内容。
|
||||
|
||||
---
|
||||
|
||||
### 弹窗3:救护车支援
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
操作人员调度救护车前往患者位置或指定目的地,完成转运支援任务。
|
||||
|
||||
#### 表单态
|
||||
|
||||
**表单字段:**
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| 救护车 | 可搜索下拉选择 | 是 | 支持按车牌号 / 医疗点 / 机构搜索 |
|
||||
| 驾驶人姓名 | 只读文本 | — | 随车辆选择自动带出,不可编辑 |
|
||||
| 驾驶人电话 | 只读文本 | — | 随车辆选择自动带出,不可编辑 |
|
||||
| 随行人 | 文本输入 | 否 | 与随行人电话并排两列布局 |
|
||||
| 随行人电话 | 文本输入 | 否 | 与随行人并排两列布局 |
|
||||
| 目的地 | 文本输入 | 否 | 填写转运目标地点 |
|
||||
| 备注信息 | 多行文本 | 否 | 补充说明转运注意事项 |
|
||||
|
||||
**业务规则:**
|
||||
- 救护车未选择时,"确定支援"按钮禁用。
|
||||
- 驾驶人信息(姓名 + 电话)随车辆选择自动填充,切换车辆时同步更新。
|
||||
|
||||
**交互说明:**
|
||||
- 底部按钮:取消(关闭弹窗)/ 确定支援(提交并切换为已支援信息态)。
|
||||
|
||||
#### 已支援信息态
|
||||
|
||||

|
||||
|
||||
**展示字段:**
|
||||
|
||||
| 字段名 | 说明 |
|
||||
|--------|------|
|
||||
| 救护车 | 已选择的车牌号 |
|
||||
| 所属医疗点 | 车辆归属医疗点名称 |
|
||||
| 所属机构 | 车辆归属机构名称 |
|
||||
| 驾驶人 | 驾驶人姓名 |
|
||||
| 驾驶人电话 | 驾驶人联系电话 |
|
||||
| 随行人 | 随行人姓名 |
|
||||
| 随行人电话 | 随行人联系电话 |
|
||||
| 目的地 | 转运目标地点 |
|
||||
| 备注信息 | 补充说明内容 |
|
||||
|
||||
**交互说明:**
|
||||
- 底部按钮:关闭 / 修改(点击"修改"重新进入表单态,允许更新支援信息)。
|
||||
|
||||
---
|
||||
|
||||
### 弹窗4:救助信息
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
操作人员在应急处置过程中记录补充小结(过程留痕)与最终救助结果,作为工单闭环的重要依据。
|
||||
|
||||
**布局说明:**
|
||||
- 上半部分"补充小结"区域(分隔线与下半部分分隔)
|
||||
- 下半部分"救助结果"区域
|
||||
|
||||
**补充小结区域:**
|
||||
- 小结卡片列表,每条包含:时间戳、内容文本、编辑按钮、删除按钮
|
||||
- 编辑态:内容区替换为文本域,显示保存 / 取消按钮;保存后更新卡片内容
|
||||
- "新增小结"按钮:点击在列表末尾追加新的编辑态卡片
|
||||
|
||||
**救助结果区域:**
|
||||
|
||||
| 字段名 | 类型 | 必填 | 说明 |
|
||||
|--------|------|------|------|
|
||||
| 结果说明 | 多行文本域 | 建议必填 | 描述本次应急处置的最终结果 |
|
||||
| 相关照片 | 图片上传 | 否 | 支持上传多张,显示已上传数量(如 2/6),展示缩略图 |
|
||||
|
||||
**业务规则:**
|
||||
- 补充小结支持多条,按时间顺序排列,可随时新增、编辑、删除。
|
||||
- 相关照片最多上传 6 张,超出限制时上传入口禁用。
|
||||
- 救助结果建议在结束应急前填写完整,以保证工单记录完整性。
|
||||
|
||||
**交互说明:**
|
||||
- 弹窗底部左侧显示"共 X 条小结"计数,右侧为"确定"按钮(保存并关闭弹窗)。
|
||||
- 删除小结时直接移除对应卡片,不需要二次确认。
|
||||
- 编辑态下点击"取消"恢复原内容,不保存修改。
|
||||
|
||||
---
|
||||
|
||||
### 弹窗5:结束应急确认
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
防止操作人员误触结束应急,通过二次确认机制保障工单状态流转的准确性。
|
||||
|
||||
**布局说明:**
|
||||
- 警告图标(黄色圆形感叹号)居中展示
|
||||
- 提示文字:"请确定本次应急求助已完成后再执行该操作"
|
||||
- 底部按钮:取消 / 确认结束(danger 样式)
|
||||
|
||||
**业务规则:**
|
||||
- 点击"确认结束"后,工单状态从"进行中"流转为"已结束",不可撤销。
|
||||
- 确认后:结束应急按钮置灰禁用;底部操作按钮行(查看员工求助位置)隐藏;消息输入区隐藏;聊天区末尾追加"本次应急已结束"系统卡片消息。
|
||||
- 已结束状态下,驻场派单、救护车支援、救助信息按钮仍可点击查看历史信息,但不可修改。
|
||||
|
||||
**交互说明:**
|
||||
- 点击"取消"关闭弹窗,不执行任何状态变更。
|
||||
- 点击"确认结束"执行结束操作,页面进入已结束结果态。
|
||||
|
||||
---
|
||||
|
||||
## 二、台账入口(路由页)
|
||||
|
||||
### 2. 应急工单(work-order.html)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
角色路由页,不承载独立业务 UI。页面加载后自动跳转至管理端"应急工单"页面,并注入 `role=operator` 参数,使页面按操作人员权限与导航展示。
|
||||
|
||||
**路由目标:** `../admin/center-work-order.html?role=operator`
|
||||
|
||||
**业务规则:**
|
||||
- 由管理端通用工单页承载筛选、列表、详情、导出等能力。
|
||||
- 操作人员视图下可见"新增应急工单"入口(管理端页面内按角色参数控制显示)。
|
||||
- 工单列表展示操作人员权限范围内的全部应急工单记录。
|
||||
|
||||
**交互说明:**
|
||||
- 页面加载即自动跳转,无需用户操作。
|
||||
|
||||
---
|
||||
|
||||
### 3. 通话记录(call-record.html)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
角色路由页,自动跳转至管理端"通话记录"页面(operator 视图)。
|
||||
|
||||
**路由目标:** `../admin/center-call-record.html?role=operator`
|
||||
|
||||
**业务规则:**
|
||||
- 管理端承载通话记录的筛选、列表、导出与明细跳转能力。
|
||||
- 通话记录与应急工单联动,用于应急过程复盘与追踪。
|
||||
- 操作人员可在通话记录中新建应急工单(管理端页面内按角色参数控制显示)。
|
||||
|
||||
**交互说明:**
|
||||
- 页面加载即自动跳转,无需用户操作。
|
||||
|
||||
---
|
||||
|
||||
### 4. 大病就医(serious-illness.html)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
角色路由页,自动跳转至管理端"大病就医"页面(operator 视图)。
|
||||
|
||||
**路由目标:** `../admin/center-serious-illness.html?role=operator`
|
||||
|
||||
**业务规则:**
|
||||
- 管理端承载大病就医预约单的筛选、状态管理、详情查看等能力。
|
||||
- 操作人员在该视图中承接员工端预约后续处理(如确认、派驻场人员跟进)。
|
||||
|
||||
**交互说明:**
|
||||
- 页面加载即自动跳转,无需用户操作。
|
||||
|
||||
---
|
||||
|
||||
### 5. 值班小组(duty-group.html)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
角色路由页,自动跳转至管理端"值班小组"页面(排班配置,operator 视图)。
|
||||
|
||||
**路由目标:** `../admin/center-schedule.html?role=operator`
|
||||
|
||||
**业务规则:**
|
||||
- 管理端页面支持按应急中心维护周排班,人员包含操作人员与专业人员。
|
||||
- 专业人员不具备值班小组维护权限,仅操作人员 / 管理员可编辑排班。
|
||||
- 排班信息同步展示在"正在应急"页面右侧值班面板的日历与今日值班人员列表中。
|
||||
|
||||
**交互说明:**
|
||||
- 页面加载即自动跳转,无需用户操作。
|
||||
|
||||
---
|
||||
|
||||
## 跨角色协同说明
|
||||
|
||||
- **员工端 → 操作人员:** 员工端通过拨打 120、应急视频、应急电话等方式发起求助后,由操作人员接入并创建 / 推进工单。
|
||||
- **操作人员 ↔ 专业人员:** 操作人员负责调度与执行,专业人员在会话中给出救助意见;操作人员根据意见执行驻场派单与转运安排。
|
||||
- **操作人员 ↔ 管理端(admin):** 工单台账、通话记录、大病就医、排班配置统一由管理端页面承载,操作人员通过 `role=operator` 视图进行业务处理。
|
||||
- **操作人员 ↔ 驻场人员:** 操作人员通过"驻场派单"下发任务,驻场人员线下执行救助、接送与挂号等动作,并反馈完成状态。
|
||||
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 84 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 138 KiB |
@@ -0,0 +1,211 @@
|
||||
# 应急就医(专业人员)产品需求文档
|
||||
|
||||
> **所属端**:Web 管理端(专业人员视角)
|
||||
> **模块路径**:`web-admin/emergency-dispatch/professional/`
|
||||
> **最后更新**:2026-04-28
|
||||
|
||||
## 模块概述
|
||||
|
||||
专业人员端用于承接操作人员转接的应急求助会话,负责与求助员工实时沟通、提供专业医学判断、输出救助意见,并在处置完成后结束应急。该目录下共 1 个独立页面 + 1 个路由导航页,专业人员的核心职责是”医学判断与救助意见输出”,不承担驻场派单与救护车调度职责。
|
||||
|
||||
### 页面导航结构
|
||||
|
||||
```text
|
||||
应急就医(专业人员)
|
||||
├── 正在应急(实时处置主界面)
|
||||
│ ├── 查看员工求助位置(地图弹窗)
|
||||
│ ├── 救助意见(填写弹窗 → 聊天区卡片消息)
|
||||
│ └── 结束应急(确认弹窗 → 结束结果态)
|
||||
└── 应急工单(路由页)→ 管理端应急工单页(professional 权限视图)
|
||||
```
|
||||
|
||||
### 应急处置状态流转图
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 进行中: 专业人员进入”正在应急”
|
||||
进行中 --> 意见已提交: 点击”救助意见”并提交
|
||||
意见已提交 --> 进行中: 继续沟通
|
||||
进行中 --> 已结束: 点击”结束应急”并确认
|
||||
已结束 --> [*]
|
||||
```
|
||||
|
||||
### 跨角色协作时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant E as 员工端
|
||||
participant O as 操作人员
|
||||
participant P as 专业人员
|
||||
participant A as 管理端台账
|
||||
|
||||
E->>O: 发起应急求助(视频/电话/120)
|
||||
O->>P: 拉起会话并共享患者信息
|
||||
P->>E: 实时沟通,了解症状
|
||||
P->>P: 填写救助意见
|
||||
P->>E: 发送救助意见卡片消息
|
||||
O->>O: 参考救助意见执行驻场派单/救护车支援
|
||||
P->>A: 留存专业意见与处置结论
|
||||
P->>P: 确认处置完成,点击结束应急
|
||||
P->>A: 工单状态更新为已结束
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 页面清单
|
||||
|
||||
| 序号 | 二级菜单 | 页面/弹窗 | 文件 | 类型 |
|
||||
|------|----------|-----------|------|------|
|
||||
| 1 | 正在应急 | 正在应急主界面 | professional.html | 页面 |
|
||||
| 1-1 | 正在应急 | 查看员工求助位置 | professional.html | 弹窗 |
|
||||
| 1-2 | 正在应急 | 填写救助意见 | professional.html | 弹窗 |
|
||||
| 1-3 | 正在应急 | 结束应急确认 | professional.html | 弹窗 |
|
||||
|
||||
---
|
||||
|
||||
## 逐页说明
|
||||
|
||||
## 一、实时处置
|
||||
|
||||
### 1. 正在应急(professional.html)
|
||||
|
||||

|
||||
|
||||
**功能说明:**
|
||||
- 专业人员核心工作台,采用”左侧联系人列表(320px)+ 中间对话区 + 右侧值班面板(320px)”三栏布局。
|
||||
- 支持与求助员工实时文字沟通、查看员工定位与周边医疗资源、输出专业救助意见、结束应急处置。
|
||||
- 专业人员不承担驻场派单与救护车调度职责,核心操作为”救助意见”与”结束应急”。
|
||||
|
||||
**业务规则:**
|
||||
- 当前应急会话绑定员工身份、所属单位、工单上下文。
|
||||
- 左侧联系人列表展示所有进行中的应急会话,选中态蓝色高亮,未读消息显示角标。
|
||||
- 中间对话区顶部展示患者姓名、性别、年龄、员工编号、单位·部门等基本信息。
|
||||
- 救助意见提交后,在聊天区追加”专业救助意见”卡片消息,消息不可撤回。
|
||||
- 结束应急需二次确认;确认后结束按钮置灰禁用,底部操作按钮行与发送输入区隐藏,页面进入”已结束结果态”。
|
||||
- 已结束状态下不可继续发送消息,救助意见按钮同步置灰禁用。
|
||||
|
||||
**交互说明:**
|
||||
- 点击左侧联系人卡片,切换当前会话,中间对话区与右侧值班面板随之更新。
|
||||
- 点击”查看员工求助位置”,打开地图弹窗,支持资源 Tab 切换与电话拨号。
|
||||
- 点击”救助意见”(primary 蓝色按钮),打开填写救助意见弹窗。
|
||||
- 点击”结束应急”(danger 红色按钮),打开结束应急确认弹窗。
|
||||
- 右侧值班面板展示当日/当月统计数据、月视图日历(含排班标记)、今日值班人员列表。
|
||||
|
||||
**页面布局说明:**
|
||||
|
||||
左侧联系人列表:
|
||||
- 顶部搜索框(搜索员工姓名)+ 刷新按钮
|
||||
- 联系人卡片:头像(姓氏首字)、姓名、性别年龄、最后消息时间、最后消息预览、未读消息角标
|
||||
- 选中态蓝色高亮背景
|
||||
|
||||
中间对话区:
|
||||
- 顶部患者信息栏:患者姓名 + 基本信息(性别 年龄 | 员工编号 | 单位·部门)
|
||||
- 顶部操作按钮组:救助意见(primary 蓝色)、结束应急(danger 红色)
|
||||
- 聊天消息区:时间分隔线、左侧员工消息气泡(蓝色边框白底)、右侧专业人员消息气泡(蓝色底白字)
|
||||
- 底部操作按钮行:查看员工求助位置
|
||||
- 发送输入框:工具栏(表情 / 图片 / 文件 / 语音通话 / 视频通话)+ 文本输入区(placeholder”输入医嘱或指导信息...”)+ 发送按钮
|
||||
|
||||
右侧值班面板:
|
||||
- 标题”值班信息”
|
||||
- 统计卡片 2×2 网格:当日应急人数(红色)、当月应急人数(蓝色)、应急响应及时率(绿色)、应急任务完成率(橙色)
|
||||
- 月视图日历:年月切换、星期行、日期网格(今日蓝色圆形高亮、有排班日期带蓝色圆点)
|
||||
- 今日值班人员列表:头像(姓氏首字)、姓名(含职称)、角色标签(操作人员 / 专业人员)
|
||||
|
||||
---
|
||||
|
||||
### 弹窗1:查看员工求助位置(地图弹窗)
|
||||
|
||||
**功能说明:**
|
||||
- 展示求助员工的实时定位、详细地址、求助时间与坐标信息。
|
||||
- 展示患者周边医疗资源,支持按资源类型 Tab 切换,辅助专业人员判断就近转运方案。
|
||||
|
||||
**业务规则:**
|
||||
- 地图区域为模拟静态地图,包含网格背景、道路线、建筑物标注、患者位置红色脉冲标记、各类资源标记点。
|
||||
- 资源按类型分组:油田医院 / 合作医院 / 医疗点 / 救护车 / AED / 急救包,共 6 个 Tab。
|
||||
- 点击资源卡片,对应地图标记高亮;点击地图标记,对应资源卡片高亮并滚动到可视区域。
|
||||
- 联系电话为可拨号链接(`tel:` 协议)。
|
||||
|
||||
**交互说明:**
|
||||
- 弹窗采用左右两栏布局。
|
||||
- 左侧上方:模拟地图区域,展示患者位置红色脉冲标记与各类资源标记点。
|
||||
- 左侧下方:患者信息(患者姓名·性别·年龄、详细地址、求助时间、坐标信息)。
|
||||
- 右侧:附近医疗资源面板,Tab 切换资源类型,资源卡片展示图标、名称、所属单位、距离、联系电话、地址。
|
||||
- 点击右上角关闭按钮或弹窗遮罩外区域,关闭弹窗。
|
||||
|
||||
---
|
||||
|
||||
### 弹窗2:填写救助意见
|
||||
|
||||
**功能说明:**
|
||||
- 专业人员在会话过程中,基于员工症状描述与沟通内容,填写专业医学救助意见。
|
||||
- 提交后,救助意见以卡片消息形式追加到聊天区,供员工端与操作人员查阅。
|
||||
|
||||
**业务规则:**
|
||||
- 救助意见为必填字段,不可为空提交;为空时前端高亮提示。
|
||||
- 提交成功后,聊天区追加”专业救助意见”卡片消息:绿色渐变头部 + 绿色背景内容区 + 底部医生信息和提交时间。
|
||||
- 同一会话可多次提交救助意见,每次提交均追加新卡片消息。
|
||||
- 已结束的应急会话不可再提交救助意见(按钮置灰禁用)。
|
||||
|
||||
**交互说明:**
|
||||
- 弹窗顶部展示求助员工基本信息卡片(灰色背景,两列网格):求助员工(姓名·性别·年龄)、员工编号、所属单位(单位·部门)、求助时间。
|
||||
- 表单区域:救助意见(必填,多行文本域,placeholder”请输入专业救助意见,包括现场急救指导、用药建议、转运注意事项等”)。
|
||||
- 底部按钮:取消(关闭弹窗,不保存)/ 提交意见(校验必填后提交)。
|
||||
- 提交成功后弹窗关闭,聊天区滚动到最新消息。
|
||||
|
||||
**救助意见表单字段:**
|
||||
|
||||
| 字段名 | 类型 | 必填 | 校验规则 |
|
||||
|--------|------|------|----------|
|
||||
| 救助意见 | 多行文本域 | 是 | 不可为空;建议包含现场急救指导、用药建议、转运注意事项 |
|
||||
|
||||
---
|
||||
|
||||
### 弹窗3:结束应急确认
|
||||
|
||||
**功能说明:**
|
||||
- 专业人员确认本次应急处置已完成后,通过二次确认弹窗触发工单结束流程。
|
||||
- 防止误操作导致会话提前关闭。
|
||||
|
||||
**业务规则:**
|
||||
- 确认结束后,工单状态由”进行中”转为”已结束”。
|
||||
- 结束应急按钮置灰禁用(灰色背景、灰色文字、`cursor: not-allowed`),不可再次触发。
|
||||
- 底部操作按钮行(含”查看员工求助位置”)隐藏。
|
||||
- 发送输入区(工具栏 + 文本框 + 发送按钮)隐藏。
|
||||
- 聊天区追加”本次应急已结束”卡片消息(红色图标 + 结束时间)。
|
||||
- 已结束状态下,救助意见按钮同步置灰禁用。
|
||||
|
||||
**交互说明:**
|
||||
- 弹窗内容:警告图标(黄色圆形感叹号)+ 提示文字”请确定本次应急求助已完成后再执行该操作”。
|
||||
- 底部按钮:取消(关闭弹窗,不执行结束)/ 确认结束(danger 红色,执行结束流程)。
|
||||
- 点击”确认结束”后,弹窗关闭,页面进入已结束结果态。
|
||||
|
||||
---
|
||||
|
||||
## 二、导航说明
|
||||
|
||||
顶部导航栏”应急工单”为直接链接(非独立路由页文件),点击后跳转至管理端应急工单页面 `../admin/center-work-order.html?role=professional`,专业人员在该视图中可查看与自身相关的应急工单记录,不具备新增工单与编辑权限。
|
||||
|
||||
---
|
||||
|
||||
## 与操作人员端的核心差异
|
||||
|
||||
| 对比项 | 操作人员端 | 专业人员端 |
|
||||
|--------|-----------|-----------|
|
||||
| 导航菜单数量 | 5 项(正在应急 / 应急工单 / 通话记录 / 大病就医 / 值班小组) | 2 项(正在应急 / 应急工单) |
|
||||
| 核心职责 | 调度执行(派单、救护车、工单闭环) | 医学判断(救助意见输出) |
|
||||
| 驻场派单按钮 | 有 | 无 |
|
||||
| 救护车支援按钮 | 有 | 无 |
|
||||
| 救助信息按钮 | 有(补充小结 + 救助结果) | 无 |
|
||||
| 救助意见按钮 | 无 | 有(primary 蓝色) |
|
||||
| 聊天输入框 placeholder | 输入消息... | 输入医嘱或指导信息... |
|
||||
| 独立页面数量 | 1 个独立页面 + 4 个路由页 | 1 个独立页面 + 1 个路由页 |
|
||||
|
||||
---
|
||||
|
||||
## 跨角色协同说明
|
||||
|
||||
- **员工端 → 专业人员:** 员工端发起应急求助后,由操作人员接入并将会话转接给专业人员,专业人员通过聊天区与员工实时沟通。
|
||||
- **专业人员 ↔ 操作人员:** 专业人员负责”判断与建议”,操作人员负责”调度与执行”(驻场派单、救护车支援、过程记录);两端共享同一工单上下文,专业人员的救助意见卡片在操作人员侧同步可见。
|
||||
- **专业人员 ↔ 管理端(admin):** 工单台账统一由管理端页面承载,专业人员通过 `role=professional` 视图查看相关工单记录,不具备工单编辑与派单权限。
|
||||
- **专业人员 → 员工端:** 救助意见卡片消息在聊天区实时可见,员工端可同步接收专业医学指导。
|
||||
- **闭环关系:** 工单通常由员工端发起或操作人员创建,专业人员输出救助意见,操作人员完成派单与处置;专业人员在确认医学处置完成后可独立执行”结束应急”操作。
|
||||
|
After Width: | Height: | Size: 107 KiB |