- 添加手术申请相关API接口,包括根据患者ID查询就诊列表功能 - 在医生工作站界面集成手术申请功能选项卡 - 实现手术管理页面的完整功能,包括手术申请的增删改查 - 添加手术排期、开始、完成等状态流转功能 - 优化手术管理页面表格展示,增加手术类型、等级、计划时间等字段 - 实现手术申请表单的完整编辑和查看模式 - 集成患者信息和就诊记录关联功能 - 添加手术室、医生、护士等资源选择功能 - 更新系统依赖配置,添加core-common模块 - 优化图标资源和manifest配置文件 - 调整患者档案和门诊记录相关状态枚举
6.1 KiB
6.1 KiB
手术申请医生科室数据保存问题排查指南
问题现象
新增手术后,列表页面和编辑查看页面没有显示申请医生名称和科室名称。
排查步骤
步骤1:检查数据库字段是否存在
执行以下 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:检查数据库迁移脚本是否执行
执行迁移脚本(如果未执行):
-- 检查并添加申请医生姓名字段
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:新增手术并查看后端日志
- 打开后端控制台或日志文件
- 在前端新增一条手术记录
- 查看后端日志,应该能看到以下信息:
设置申请医生信息 - 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 查询最新插入的记录:
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 响应
- 打开浏览器开发者工具(F12)
- 切换到 Network 标签
- 新增手术
- 找到
/clinical-manage/surgery/surgery-page请求 - 点击查看响应内容
检查响应数据中是否包含 applyDoctorName 和 applyDeptName 字段。
如果响应中没有这些字段:说明 MyBatis 映射有问题,检查 XML 配置。
如果响应中有这些字段但值为 null:说明数据库中为空,回到步骤5。
步骤7:检查前端表格显示
查看前端代码中的表格列配置:
<el-table-column label="申请医生" align="center" prop="applyDoctorName" width="100" />
<el-table-column label="申请科室" align="center" prop="applyDeptName" width="120" show-overflow-tooltip />
确保 prop 属性与后端返回的字段名一致(注意大小写)。
常见问题和解决方案
问题1:数据库字段未添加
症状:后端报错 "column apply_doctor_name does not exist" 解决:执行数据库迁移脚本
问题2:后端日志显示 applyDoctorName 为 null
症状:日志中 "前端提交的数据 - applyDoctorName: null" 原因:前端提交数据时,disabled 字段没有被包含 解决:检查前端 submitForm 函数,确保手动设置了这些字段
问题3:数据库中有值,但前端不显示
症状:数据库查询有值,前端响应也有值,但表格不显示 原因:
- 前端 prop 属性名与后端字段名不一致(大小写问题)
- 前端数据未正确绑定 解决:
- 检查 prop 属性名,确保与后端返回的 JSON 字段名一致
- 检查浏览器控制台是否有 JavaScript 错误
问题4:MyBatis 映射未生效
症状:后端保存成功,但查询时字段为 null 原因:XML 映射文件未正确配置 解决:
- 检查 SurgeryMapper.xml 中的 resultMap 配置
- 检查 SQL 查询中是否包含这些字段
- 重启后端服务
验证清单
- 数据库迁移脚本已执行
- 数据库字段已添加(步骤1)
- 后端服务已重启
- 后端日志显示申请医生信息(步骤4)
- 数据库中已保存数据(步骤5)
- 前端 API 响应包含这些字段(步骤6)
- 前端表格正确显示(步骤7)
附加 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';
手动更新测试数据
如果需要手动更新已有的测试数据:
UPDATE public.cli_surgery
SET apply_doctor_name = '测试医生',
apply_dept_name = '测试科室'
WHERE apply_doctor_name IS NULL
AND delete_flag = '0';
联系支持
如果以上步骤都无法解决问题,请提供以下信息:
- 数据库字段查询结果(步骤1)
- 后端日志截图(步骤4)
- 数据库查询结果(步骤5)
- 浏览器 Network 响应截图(步骤6)
- 浏览器 Console 错误信息