- 新增手术室类型字段支持急诊、择期、日间、复合手术室四种类型 - 添加所属科室字段实现科室级别资源管理 - 前端列表页面新增类型和所属科室显示列 - 新增类型选择器和科室选择器组件 - 后端实体类和服务类添加对应字段处理逻辑 - 数据库添加room_type_enum字段和相关索引 - 创建手术室类型字典数据和字典项配置 - 生成手术室管理功能说明文档
195 lines
6.1 KiB
Markdown
195 lines
6.1 KiB
Markdown
# 手术申请医生科室数据保存问题排查指南
|
||
|
||
## 问题现象
|
||
新增手术后,列表页面和编辑查看页面没有显示申请医生名称和科室名称。
|
||
|
||
## 排查步骤
|
||
|
||
### 步骤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 错误
|
||
|
||
### 问题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 错误信息
|