4.8 KiB
4.8 KiB
员工实体关系状态字段修复报告
问题描述
员工实体关系新增提交后存在两个问题:
- 新增时默认状态变成"停用"(0),应该是"有效"(1)
- 前端展示时,状态1显示为"无效",0显示为"有效",显示错误
根因分析
问题1:新增默认值错误
数据流追踪:
-
前端表单初始化 (index.vue:543-555):
reset() { this.form = { status: '1', // 初始化为字符串 '1' ... }; } -
关键发现 (index.vue:195-202):
<el-col :span="12" v-if="!isAdd"> <el-form-item label="状态" prop="status"> <el-select v-model="form.status"> <el-option label="有效" value="1" /> <el-option label="无效" value="0" /> </el-select> </el-form-item> </el-col>状态字段只在编辑时显示 (
v-if="!isAdd"),新增时隐藏! -
后端处理逻辑 (CcdiStaffEnterpriseRelationServiceImpl.java:118-120):
if (relation.getStatus() == null) { relation.setStatus(1); }只在status为null时设置默认值,如果前端传了值(即使是0),就不会覆盖
根本原因:
- 虽然前端初始化了
status: '1',但可能由于某些原因(浏览器缓存、代码版本不一致等),实际运行时可能发送了status: 0 - 后端的默认值逻辑只在
null时生效,无法防御这种情况
问题2:前端字典映射错误
数据库字典对比:
| 字典类型 | dict_value | dict_label | 说明 |
|---|---|---|---|
| sys_normal_disable | 0 | 正常 | 若依系统通用字典 |
| sys_normal_disable | 1 | 停用 | 若依系统通用字典 |
| ccdi_relation_status | 0 | 无效 | CCDI业务字典 |
| ccdi_relation_status | 1 | 有效 | CCDI业务字典 |
问题:
- 前端使用了
sys_normal_disable字典(0=正常,1=停用) - 而业务定义是 0=无效,1=有效
- 完全相反!
修复方案
修复1:后端强制设置默认状态
**修改文件:
** ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java
修改内容:
// 修改前 (第118-120行):
if (relation.getStatus() == null) {
relation.setStatus(1);
}
// 修改后:
// 新增时强制设置状态为有效
relation.setStatus(1);
修复逻辑:
- 强制将新增记录的
status设置为1(有效) - 即使前端传递了其他值,也会被覆盖为有效状态
- 编辑功能不受影响,仍可正常修改状态
修复2:前端使用正确的字典
修改文件: ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue
修改内容:
- 第354行 - 字典声明:
// 修改前:
dicts: ['sys_normal_disable', 'ccdi_data_source'],
// 修改后:
dicts: ['ccdi_relation_status', 'ccdi_data_source'],
- 第98行 - 列表展示:
<!-- 修改前: -->
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>
<!-- 修改后: -->
<dict-tag :options="dict.type.ccdi_relation_status" :value="scope.row.status"/>
- 第228行 - 详情展示:
<!-- 修改前: -->
<dict-tag :options="dict.type.sys_normal_disable" :value="relationDetail.status"/>
<!-- 修改后: -->
<dict-tag :options="dict.type.ccdi_relation_status" :value="relationDetail.status"/>
验证结果
后端验证
使用测试脚本 doc/implementation/test_staff_enterprise_relation_status_fix.bat 进行验证:
测试用例1:不传status字段
- 预期结果:status = 1 (有效)
- 实际结果:✅ status = 1
测试用例2:传status=0
- 预期结果:status = 1 (有效,被强制覆盖)
- 实际结果:✅ status = 1
前端验证
刷新页面后验证:
- ✅ 状态字段显示为"有效"(绿色标签)
- ✅ 列表展示正确
- ✅ 详情展示正确
影响范围
修改文件清单
ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.javaruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue
数据库变更
无数据库变更,使用已存在的 ccdi_relation_status 字典。
部署说明
后端部署
- 重新编译后端项目
- 重启后端服务
前端部署
- 重新构建前端项目:
npm run build:prod - 刷新浏览器缓存(Ctrl+F5)
注意事项
- 编辑功能不受影响:编辑时仍可正常修改状态字段
- 导入功能不受影响:批量导入时也会使用新的默认值逻辑
- 历史数据不受影响:修改只影响新增操作,已有数据保持不变
修复时间
2026-02-09
修复人
Claude Code