- 新增手术室类型字段支持急诊、择期、日间、复合手术室四种类型 - 添加所属科室字段实现科室级别资源管理 - 前端列表页面新增类型和所属科室显示列 - 新增类型选择器和科室选择器组件 - 后端实体类和服务类添加对应字段处理逻辑 - 数据库添加room_type_enum字段和相关索引 - 创建手术室类型字典数据和字典项配置 - 生成手术室管理功能说明文档
6.7 KiB
6.7 KiB
手术人员字段不显示问题解决方案
问题描述
主刀医生、麻醉医生、助手1、助手2、执行科这些字段在手术查看页面中没有显示数据。
问题原因
这些字段在数据库中可能为 null 或空值,虽然保存了 ID(如 main_surgeon_id),但没有保存对应的姓名(如 main_surgeon_name)。
解决步骤
步骤 1:检查数据库中字段的实际值
执行以下 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 查看用户表的结构:
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 脚本填充人员姓名:
-- 填充主刀医生姓名
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 验证是否更新成功:
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. 检查详情对话框显示
打开 surgerymanage/index.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. 检查浏览器控制台
- 打开浏览器开发者工具(F12)
- 切换到 Console 标签
- 点击"查看"按钮
- 查看是否有 JavaScript 错误
3. 检查 Network 响应
- 切换到 Network 标签
- 点击"查看"按钮
- 找到
/clinical-manage/surgery/surgery-detail请求 - 查看响应内容
检查:响应数据中是否包含这些字段,值是什么。
常见问题
问题 1:UPDATE SQL 执行失败
症状:报错 "relation does not exist" 或 "column does not exist"
解决:
- 检查表名是否正确(sys_user 或 adm_practitioner)
- 检查字段名是否正确(user_id 或 practitioner_id)
问题 2:UPDATE 后字段仍为 null
症状:UPDATE 执行成功,但字段仍为 null
原因:关联表中没有对应的记录
解决:检查人员ID是否存在于人员表中
-- 检查主刀医生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:前端仍然不显示
症状:数据库中有值,但前端不显示
原因:
- 前端字段名不匹配
- 前端数据绑定有问题
解决:
- 检查 MyBatis XML 映射是否正确
- 检查后端返回的 JSON 数据结构
- 检查前端变量名是否正确
后续改进建议
1. 保存时自动填充姓名
在前端或后端保存手术信息时,根据选择的医生ID自动查询并填充姓名字段。
2. 提供人员选择功能
在前端提供医生、科室等选择下拉框,而不是手动输入ID。
3. 添加数据完整性校验
在保存前检查:如果选择了人员ID,必须填充对应的姓名字段。
相关文件
- 检查和填充脚本:
e:/his/检查和填充手术人员字段.sql - 填充脚本:
e:/his/填充手术人员字段姓名.sql - MyBatis 映射:
e:/his/openhis-server-new/openhis-application/src/main/resources/mapper/clinicalmanage/SurgeryMapper.xml
验证清单
- 数据库查询显示字段为 null
- 执行了填充 SQL 脚本
- 验证更新后字段有值
- 刷新前端页面
- 详情对话框中正确显示
联系支持
如果以上步骤都无法解决问题,请提供:
- 步骤 1 的查询结果:当前数据库中这些字段的值
- 步骤 2 的查询结果:sys_user 表的结构
- UPDATE SQL 执行结果:是否有错误,更新了多少条记录
- 步骤 4 的验证结果:更新后的字段值
- 浏览器控制台错误:是否有 JavaScript 错误
- Network 响应数据:后端返回的完整数据