# 员工实体关系状态字段修复报告

## 问题描述

员工实体关系新增提交后存在两个问题：

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
   <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"`)，新增时隐藏！**

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
<!-- 修改前: -->
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.status"/>

<!-- 修改后: -->
<dict-tag :options="dict.type.ccdi_relation_status" :value="scope.row.status"/>
```

3. **第228行 - 详情展示：**

```vue
<!-- 修改前: -->
<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

### 前端验证

**刷新页面后验证：**

- ✅ 状态字段显示为"有效"（绿色标签）
- ✅ 列表展示正确
- ✅ 详情展示正确

## 影响范围

### 修改文件清单

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
