# 手术人员字段不显示问题解决方案 ## 问题描述 主刀医生、麻醉医生、助手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 {{ viewData.mainSurgeonName }} {{ viewData.anesthetistName }} {{ viewData.assistant1Name }} {{ viewData.assistant2Name }} {{ viewData.operatingRoomName }} {{ viewData.orgName }} ``` **确认**:这些字段名是否正确(注意驼峰命名)。 ### 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 响应数据**:后端返回的完整数据