# 手术申请医生科室数据保存问题排查指南 ## 问题现象 新增手术后,列表页面和编辑查看页面没有显示申请医生名称和科室名称。 ## 排查步骤 ### 步骤1:检查数据库字段是否存在 执行以下 SQL 检查字段是否已添加: ```sql SELECT column_name, data_type FROM information_schema.columns WHERE table_name = 'cli_surgery' AND column_name IN ('apply_doctor_name', 'apply_dept_name'); ``` **预期结果**:应该返回两条记录 ``` apply_doctor_name | character varying apply_dept_name | character varying ``` **如果结果为空**:说明字段未添加,需要执行迁移脚本。 ### 步骤2:检查数据库迁移脚本是否执行 执行迁移脚本(如果未执行): ```sql -- 检查并添加申请医生姓名字段 DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'cli_surgery' AND column_name = 'apply_doctor_name' ) THEN ALTER TABLE public.cli_surgery ADD COLUMN apply_doctor_name VARCHAR(100); COMMENT ON COLUMN public.cli_surgery.apply_doctor_name IS '申请医生姓名'; END IF; END $$; -- 检查并添加申请科室名称字段 DO $$ BEGIN IF NOT EXISTS ( SELECT 1 FROM information_schema.columns WHERE table_name = 'cli_surgery' AND column_name = 'apply_dept_name' ) THEN ALTER TABLE public.cli_surgery ADD COLUMN apply_dept_name VARCHAR(100); COMMENT ON COLUMN public.cli_surgery.apply_dept_name IS '申请科室名称'; END IF; END $$; ``` ### 步骤3:重启后端服务 执行数据库迁移后,必须重启后端服务。 ### 步骤4:新增手术并查看后端日志 1. 打开后端控制台或日志文件 2. 在前端新增一条手术记录 3. 查看后端日志,应该能看到以下信息: ``` 设置申请医生信息 - doctorId: 123, doctorName: 张医生, deptId: 456, deptName: 普外科 前端提交的数据 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, applyDeptName: 普外科 准备插入手术记录 - applyDoctorId: 123, applyDoctorName: 张医生, applyDeptId: 456, deptName: 普外科 手术记录插入成功 - surgeryId: 1234567890123456789, surgeryNo: OP202501051234 ``` **如果看不到这些日志**:说明代码没有执行到这里,检查是否有异常抛出。 **如果看到 "前端提交的数据 - applyDoctorName: null"**:说明前端提交的数据为空,需要检查前端代码。 ### 步骤5:检查数据库中是否保存成功 执行以下 SQL 查询最新插入的记录: ```sql SELECT id, surgery_no, patient_id, apply_doctor_id, apply_doctor_name, apply_dept_id, apply_dept_name, surgery_name, status_enum, create_time FROM public.cli_surgery WHERE delete_flag = '0' ORDER BY create_time DESC LIMIT 5; ``` **如果 apply_doctor_name 和 apply_dept_name 字段为空**:说明数据没有保存成功。 **如果字段有值**:说明保存成功,问题出在前端显示。 ### 步骤6:检查前端 API 响应 1. 打开浏览器开发者工具(F12) 2. 切换到 Network 标签 3. 新增手术 4. 找到 `/clinical-manage/surgery/surgery-page` 请求 5. 点击查看响应内容 检查响应数据中是否包含 `applyDoctorName` 和 `applyDeptName` 字段。 **如果响应中没有这些字段**:说明 MyBatis 映射有问题,检查 XML 配置。 **如果响应中有这些字段但值为 null**:说明数据库中为空,回到步骤5。 ### 步骤7:检查前端表格显示 查看前端代码中的表格列配置: ```vue ``` 确保 `prop` 属性与后端返回的字段名一致(注意大小写)。 ## 常见问题和解决方案 ### 问题1:数据库字段未添加 **症状**:后端报错 "column apply_doctor_name does not exist" **解决**:执行数据库迁移脚本 ### 问题2:后端日志显示 applyDoctorName 为 null **症状**:日志中 "前端提交的数据 - applyDoctorName: null" **原因**:前端提交数据时,disabled 字段没有被包含 **解决**:检查前端 submitForm 函数,确保手动设置了这些字段 ### 问题3:数据库中有值,但前端不显示 **症状**:数据库查询有值,前端响应也有值,但表格不显示 **原因**: 1. 前端 prop 属性名与后端字段名不一致(大小写问题) 2. 前端数据未正确绑定 **解决**: 1. 检查 prop 属性名,确保与后端返回的 JSON 字段名一致 2. 检查浏览器控制台是否有 JavaScript 错误 ### 问题4:MyBatis 映射未生效 **症状**:后端保存成功,但查询时字段为 null **原因**:XML 映射文件未正确配置 **解决**: 1. 检查 SurgeryMapper.xml 中的 resultMap 配置 2. 检查 SQL 查询中是否包含这些字段 3. 重启后端服务 ## 验证清单 - [ ] 数据库迁移脚本已执行 - [ ] 数据库字段已添加(步骤1) - [ ] 后端服务已重启 - [ ] 后端日志显示申请医生信息(步骤4) - [ ] 数据库中已保存数据(步骤5) - [ ] 前端 API 响应包含这些字段(步骤6) - [ ] 前端表格正确显示(步骤7) ## 附加 SQL 脚本 ### 查看统计信息 ```sql SELECT COUNT(*) as total_count, COUNT(apply_doctor_name) as has_doctor_name_count, COUNT(apply_dept_name) as has_dept_name_count FROM public.cli_surgery WHERE delete_flag = '0'; ``` ### 手动更新测试数据 如果需要手动更新已有的测试数据: ```sql UPDATE public.cli_surgery SET apply_doctor_name = '测试医生', apply_dept_name = '测试科室' WHERE apply_doctor_name IS NULL AND delete_flag = '0'; ``` ## 联系支持 如果以上步骤都无法解决问题,请提供以下信息: 1. 数据库字段查询结果(步骤1) 2. 后端日志截图(步骤4) 3. 数据库查询结果(步骤5) 4. 浏览器 Network 响应截图(步骤6) 5. 浏览器 Console 错误信息