Files
ccdi/assets/implementation/reports/staff-enterprise-relation-status-fix-report.md
2026-03-03 16:14:16 +08:00

4.8 KiB
Raw Blame History

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

问题描述

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

  1. 新增时默认状态变成"停用"(0),应该是"有效"(1)
  2. 前端展示时状态1显示为"无效"0显示为"有效",显示错误

根因分析

问题1新增默认值错误

数据流追踪:

  1. 前端表单初始化 (index.vue:543-555):

    reset() {
      this.form = {
        status: '1',  // 初始化为字符串 '1'
        ...
      };
    }
    
  2. 关键发现 (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"),新增时隐藏!

  3. 后端处理逻辑 (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

修改内容:

  1. 第354行 - 字典声明:
// 修改前:
dicts: ['sys_normal_disable', 'ccdi_data_source'],

// 修改后:
dicts: ['ccdi_relation_status', 'ccdi_data_source'],
  1. 第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"/>
  1. 第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

前端验证

刷新页面后验证:

  • 状态字段显示为"有效"(绿色标签)
  • 列表展示正确
  • 详情展示正确

影响范围

修改文件清单

  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