Files
his/手术人员字段不显示问题解决方案.md
chenqi b0850257c8 feat(surgery): 完善手术管理功能模块
- 添加手术申请相关API接口,包括根据患者ID查询就诊列表功能
- 在医生工作站界面集成手术申请功能选项卡
- 实现手术管理页面的完整功能,包括手术申请的增删改查
- 添加手术排期、开始、完成等状态流转功能
- 优化手术管理页面表格展示,增加手术类型、等级、计划时间等字段
- 实现手术申请表单的完整编辑和查看模式
- 集成患者信息和就诊记录关联功能
- 添加手术室、医生、护士等资源选择功能
- 更新系统依赖配置,添加core-common模块
- 优化图标资源和manifest配置文件
- 调整患者档案和门诊记录相关状态枚举
2026-01-06 16:23:15 +08:00

255 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 手术人员字段不显示问题解决方案
## 问题描述
主刀医生、麻醉医生、助手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. 查看响应内容
**检查**:响应数据中是否包含这些字段,值是什么。
## 常见问题
### 问题 1UPDATE SQL 执行失败
**症状**:报错 "relation does not exist" 或 "column does not exist"
**解决**
1. 检查表名是否正确sys_user 或 adm_practitioner
2. 检查字段名是否正确user_id 或 practitioner_id
### 问题 2UPDATE 后字段仍为 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 响应数据**:后端返回的完整数据