- 添加手术申请相关API接口,包括根据患者ID查询就诊列表功能 - 在医生工作站界面集成手术申请功能选项卡 - 实现手术管理页面的完整功能,包括手术申请的增删改查 - 添加手术排期、开始、完成等状态流转功能 - 优化手术管理页面表格展示,增加手术类型、等级、计划时间等字段 - 实现手术申请表单的完整编辑和查看模式 - 集成患者信息和就诊记录关联功能 - 添加手术室、医生、护士等资源选择功能 - 更新系统依赖配置,添加core-common模块 - 优化图标资源和manifest配置文件 - 调整患者档案和门诊记录相关状态枚举
255 lines
6.7 KiB
Markdown
255 lines
6.7 KiB
Markdown
# 手术人员字段不显示问题解决方案
|
||
|
||
## 问题描述
|
||
主刀医生、麻醉医生、助手1、助手2、执行科这些字段在手术查看页面中没有显示数据。
|
||
|
||
## 问题原因
|
||
这些字段在数据库中可能为 **null 或空值**,虽然保存了 ID(如 `main_surgeon_id`),但没有保存对应的姓名(如 `main_surgeon_name`)。
|
||
|
||
## 解决步骤
|
||
|
||
### 步骤 1:检查数据库中字段的实际值
|
||
|
||
执行以下 SQL 查看当前数据:
|
||
|
||
```sql
|
||
SELECT
|
||
id,
|
||
surgery_no,
|
||
main_surgeon_id,
|
||
main_surgeon_name,
|
||
anesthetist_id,
|
||
anesthetist_name,
|
||
assistant_1_id,
|
||
assistant_1_name,
|
||
assistant_2_id,
|
||
assistant_2_name,
|
||
operating_room_id,
|
||
operating_room_name,
|
||
org_id,
|
||
org_name
|
||
FROM public.cli_surgery
|
||
WHERE delete_flag = '0'
|
||
ORDER BY create_time DESC
|
||
LIMIT 5;
|
||
```
|
||
|
||
**请告诉我结果**:特别是 `main_surgeon_name`、`anesthetist_name`、`assistant_1_name`、`assistant_2_name`、`operating_room_name`、`org_name` 这些字段的值。
|
||
|
||
### 步骤 2:检查用户表结构
|
||
|
||
执行以下 SQL 查看用户表的结构:
|
||
|
||
```sql
|
||
SELECT
|
||
column_name,
|
||
data_type
|
||
FROM information_schema.columns
|
||
WHERE table_name = 'sys_user'
|
||
AND column_name IN ('user_id', 'nick_name', 'user_name', 'practitioner_id')
|
||
ORDER BY column_name;
|
||
```
|
||
|
||
**目的**:确定人员ID和姓名的对应关系。
|
||
|
||
### 步骤 3:填充人员姓名字段(推荐方法)
|
||
|
||
使用以下 SQL 脚本填充人员姓名:
|
||
|
||
```sql
|
||
-- 填充主刀医生姓名
|
||
UPDATE public.cli_surgery s
|
||
SET main_surgeon_name = u.nick_name
|
||
FROM public.sys_user u
|
||
WHERE s.main_surgeon_id = u.user_id
|
||
AND s.main_surgeon_name IS NULL
|
||
AND s.delete_flag = '0';
|
||
|
||
-- 填充麻醉医生姓名
|
||
UPDATE public.cli_surgery s
|
||
SET anesthetist_name = u.nick_name
|
||
FROM public.sys_user u
|
||
WHERE s.anesthetist_id = u.user_id
|
||
AND s.anesthetist_name IS NULL
|
||
AND s.delete_flag = '0';
|
||
|
||
-- 填充助手1姓名
|
||
UPDATE public.cli_surgery s
|
||
SET assistant_1_name = u.nick_name
|
||
FROM public.sys_user u
|
||
WHERE s.assistant_1_id = u.user_id
|
||
AND s.assistant_1_name IS NULL
|
||
AND s.delete_flag = '0';
|
||
|
||
-- 填充助手2姓名
|
||
UPDATE public.cli_surgery s
|
||
SET assistant_2_name = u.nick_name
|
||
FROM public.sys_user u
|
||
WHERE s.assistant_2_id = u.user_id
|
||
AND s.assistant_2_name IS NULL
|
||
AND s.delete_flag = '0';
|
||
|
||
-- 填充手术室名称
|
||
UPDATE public.cli_surgery s
|
||
SET operating_room_name = r.name
|
||
FROM public.cli_operating_room r
|
||
WHERE s.operating_room_id = r.id
|
||
AND s.operating_room_name IS NULL
|
||
AND s.delete_flag = '0';
|
||
|
||
-- 填充执行科室名称
|
||
UPDATE public.cli_surgery s
|
||
SET org_name = o.name
|
||
FROM public.adm_organization o
|
||
WHERE s.org_id = o.id
|
||
AND s.org_name IS NULL
|
||
AND s.delete_flag = '0';
|
||
```
|
||
|
||
### 步骤 4:验证更新结果
|
||
|
||
执行以下 SQL 验证是否更新成功:
|
||
|
||
```sql
|
||
SELECT
|
||
id,
|
||
surgery_no,
|
||
main_surgeon_id,
|
||
main_surgeon_name,
|
||
anesthetist_id,
|
||
anesthetist_name,
|
||
assistant_1_id,
|
||
assistant_1_name,
|
||
assistant_2_id,
|
||
assistant_2_name,
|
||
operating_room_id,
|
||
operating_room_name,
|
||
org_id,
|
||
org_name
|
||
FROM public.cli_surgery
|
||
WHERE delete_flag = '0'
|
||
ORDER BY create_time DESC
|
||
LIMIT 5;
|
||
```
|
||
|
||
**预期结果**:所有 `*_name` 字段都应该有值。
|
||
|
||
### 步骤 5:刷新前端页面
|
||
|
||
1. 刷新手术管理页面
|
||
2. 点击某个手术记录的"查看"按钮
|
||
3. 检查详情对话框中是否显示这些字段
|
||
|
||
## 前端代码检查
|
||
|
||
### 1. 检查详情对话框显示
|
||
|
||
打开 `surgerymanage/index.vue` 文件,查看详情对话框部分:
|
||
|
||
```vue
|
||
<el-descriptions-item label="主刀医生">{{ viewData.mainSurgeonName }}</el-descriptions-item>
|
||
<el-descriptions-item label="麻醉医生">{{ viewData.anesthetistName }}</el-descriptions-item>
|
||
<el-descriptions-item label="助手1">{{ viewData.assistant1Name }}</el-descriptions-item>
|
||
<el-descriptions-item label="助手2">{{ viewData.assistant2Name }}</el-descriptions-item>
|
||
<el-descriptions-item label="手术室">{{ viewData.operatingRoomName }}</el-descriptions-item>
|
||
<el-descriptions-item label="执行科室">{{ viewData.orgName }}</el-descriptions-item>
|
||
```
|
||
|
||
**确认**:这些字段名是否正确(注意驼峰命名)。
|
||
|
||
### 2. 检查浏览器控制台
|
||
|
||
1. 打开浏览器开发者工具(F12)
|
||
2. 切换到 Console 标签
|
||
3. 点击"查看"按钮
|
||
4. 查看是否有 JavaScript 错误
|
||
|
||
### 3. 检查 Network 响应
|
||
|
||
1. 切换到 Network 标签
|
||
2. 点击"查看"按钮
|
||
3. 找到 `/clinical-manage/surgery/surgery-detail` 请求
|
||
4. 查看响应内容
|
||
|
||
**检查**:响应数据中是否包含这些字段,值是什么。
|
||
|
||
## 常见问题
|
||
|
||
### 问题 1:UPDATE SQL 执行失败
|
||
|
||
**症状**:报错 "relation does not exist" 或 "column does not exist"
|
||
|
||
**解决**:
|
||
1. 检查表名是否正确(sys_user 或 adm_practitioner)
|
||
2. 检查字段名是否正确(user_id 或 practitioner_id)
|
||
|
||
### 问题 2:UPDATE 后字段仍为 null
|
||
|
||
**症状**:UPDATE 执行成功,但字段仍为 null
|
||
|
||
**原因**:关联表中没有对应的记录
|
||
|
||
**解决**:检查人员ID是否存在于人员表中
|
||
|
||
```sql
|
||
-- 检查主刀医生ID是否存在
|
||
SELECT s.main_surgeon_id, u.nick_name
|
||
FROM public.cli_surgery s
|
||
LEFT JOIN public.sys_user u ON s.main_surgeon_id = u.user_id
|
||
WHERE s.main_surgeon_id IS NOT NULL
|
||
AND u.user_id IS NULL
|
||
LIMIT 5;
|
||
```
|
||
|
||
### 问题 3:前端仍然不显示
|
||
|
||
**症状**:数据库中有值,但前端不显示
|
||
|
||
**原因**:
|
||
1. 前端字段名不匹配
|
||
2. 前端数据绑定有问题
|
||
|
||
**解决**:
|
||
1. 检查 MyBatis XML 映射是否正确
|
||
2. 检查后端返回的 JSON 数据结构
|
||
3. 检查前端变量名是否正确
|
||
|
||
## 后续改进建议
|
||
|
||
### 1. 保存时自动填充姓名
|
||
|
||
在前端或后端保存手术信息时,根据选择的医生ID自动查询并填充姓名字段。
|
||
|
||
### 2. 提供人员选择功能
|
||
|
||
在前端提供医生、科室等选择下拉框,而不是手动输入ID。
|
||
|
||
### 3. 添加数据完整性校验
|
||
|
||
在保存前检查:如果选择了人员ID,必须填充对应的姓名字段。
|
||
|
||
## 相关文件
|
||
|
||
1. **检查和填充脚本**:`e:/his/检查和填充手术人员字段.sql`
|
||
2. **填充脚本**:`e:/his/填充手术人员字段姓名.sql`
|
||
3. **MyBatis 映射**:`e:/his/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgeryMapper.xml`
|
||
|
||
## 验证清单
|
||
|
||
- [ ] 数据库查询显示字段为 null
|
||
- [ ] 执行了填充 SQL 脚本
|
||
- [ ] 验证更新后字段有值
|
||
- [ ] 刷新前端页面
|
||
- [ ] 详情对话框中正确显示
|
||
|
||
## 联系支持
|
||
|
||
如果以上步骤都无法解决问题,请提供:
|
||
|
||
1. **步骤 1 的查询结果**:当前数据库中这些字段的值
|
||
2. **步骤 2 的查询结果**:sys_user 表的结构
|
||
3. **UPDATE SQL 执行结果**:是否有错误,更新了多少条记录
|
||
4. **步骤 4 的验证结果**:更新后的字段值
|
||
5. **浏览器控制台错误**:是否有 JavaScript 错误
|
||
6. **Network 响应数据**:后端返回的完整数据
|