# 员工实体关系状态字段修复报告 ## 问题描述 员工实体关系新增提交后存在两个问题: 1. 新增时默认状态变成"停用"(0),应该是"有效"(1) 2. 前端展示时,状态1显示为"无效",0显示为"有效",显示错误 ## 根因分析 ### 问题1:新增默认值错误 **数据流追踪:** 1. **前端表单初始化** (index.vue:543-555): ```javascript reset() { this.form = { status: '1', // 初始化为字符串 '1' ... }; } ``` 2. **关键发现** (index.vue:195-202): ```vue ``` **状态字段只在编辑时显示 (`v-if="!isAdd"`),新增时隐藏!** 3. **后端处理逻辑** (CcdiStaffEnterpriseRelationServiceImpl.java:118-120): ```java 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` **修改内容:** ```java // 修改前 (第118-120行): if (relation.getStatus() == null) { relation.setStatus(1); } // 修改后: // 新增时强制设置状态为有效 relation.setStatus(1); ``` **修复逻辑:** - 强制将新增记录的 `status` 设置为 `1`(有效) - 即使前端传递了其他值,也会被覆盖为有效状态 - 编辑功能不受影响,仍可正常修改状态 ### 修复2:前端使用正确的字典 **修改文件:** `ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue` **修改内容:** 1. **第354行 - 字典声明:** ```javascript // 修改前: dicts: ['sys_normal_disable', 'ccdi_data_source'], // 修改后: dicts: ['ccdi_relation_status', 'ccdi_data_source'], ``` 2. **第98行 - 列表展示:** ```vue ``` 3. **第228行 - 详情展示:** ```vue ``` ## 验证结果 ### 后端验证 使用测试脚本 `doc/implementation/test_staff_enterprise_relation_status_fix.bat` 进行验证: **测试用例1:不传status字段** - 预期结果:status = 1 (有效) - 实际结果:✅ status = 1 **测试用例2:传status=0** - 预期结果:status = 1 (有效,被强制覆盖) - 实际结果:✅ status = 1 ### 前端验证 **刷新页面后验证:** - ✅ 状态字段显示为"有效"(绿色标签) - ✅ 列表展示正确 - ✅ 详情展示正确 ## 影响范围 ### 修改文件清单 1. `ruoyi-info-collection/src/main/java/com/ruoyi/ccdi/service/impl/CcdiStaffEnterpriseRelationServiceImpl.java` 2. `ruoyi-ui/src/views/ccdiStaffEnterpriseRelation/index.vue` ### 数据库变更 无数据库变更,使用已存在的 `ccdi_relation_status` 字典。 ## 部署说明 ### 后端部署 1. 重新编译后端项目 2. 重启后端服务 ### 前端部署 1. 重新构建前端项目:`npm run build:prod` 2. 刷新浏览器缓存(Ctrl+F5) ## 注意事项 1. **编辑功能不受影响**:编辑时仍可正常修改状态字段 2. **导入功能不受影响**:批量导入时也会使用新的默认值逻辑 3. **历史数据不受影响**:修改只影响新增操作,已有数据保持不变 ## 修复时间 2026-02-09 ## 修复人 Claude Code