# 员工实体关系状态字段修复报告
## 问题描述
员工实体关系新增提交后存在两个问题:
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