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

195 lines
6.1 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检查数据库字段是否存在
执行以下 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
<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数据库中有值但前端不显示
**症状**:数据库查询有值,前端响应也有值,但表格不显示
**原因**
1. 前端 prop 属性名与后端字段名不一致(大小写问题)
2. 前端数据未正确绑定
**解决**
1. 检查 prop 属性名,确保与后端返回的 JSON 字段名一致
2. 检查浏览器控制台是否有 JavaScript 错误
### 问题4MyBatis 映射未生效
**症状**:后端保存成功,但查询时字段为 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 错误信息