Files
hzdyjs/docs/变更管理/code-adjust-record-2025-08-01-performance-indicator-save-fix.md
T
2025-08-01 08:35:47 +08:00

4.3 KiB
Raw Blame History

绩效指标保存和总分值占比问题修复记录

日期: 2025-08-01
操作人员: Assistant
修复类型: 修复绩效指标无法保存到数据库和总分值占比不能实时更新的问题

🚨 问题描述

问题1:绩效指标数据不能插入数据库

  • 症状:前端显示"绩效指标数据已随草稿数据一起保存,数量: 0"
  • 原因:绩效指标组件的收集条件过于严格,要求goalName和targetValue都不为空才收集
  • 影响:用户填写了部分数据(如只填了目标名称)的指标无法保存

问题2:总分值占比不能实时更新

  • 症状:修改分值占比后,页面上的"总分值占比"显示不更新
  • 原因:Vue的响应式系统没有正确触发更新

🔧 解决方案

修复1:放宽绩效指标收集条件

文件: web/src/views/cw/application/components/PerformanceIndicators.vue

修改内容:

  1. 修改emitChange方法,只要有goalName就收集指标
  2. 确保targetValue至少是空字符串而不是null/undefined
  3. 添加详细的调试日志
  4. 在emitChange结束时调用this.$forceUpdate()强制更新视图
// 旧代码:
if (item.goalName && item.targetValue) {
    // 只有两个字段都有值才收集
}

// 新代码:
if (item.goalName && item.goalName.trim()) {
    // 只要有goalName就收集
    indicator.targetValue = indicator.targetValue || '';
}

修复2:放宽后端验证条件

文件: backend/ruoyi-modules/ruoyi-cw/src/main/java/org/dromara/cw/service/impl/CwPerformanceIndicatorServiceImpl.java

修改内容:

  1. 注释掉targetValue不能为空的验证
  2. 确保targetValue为null时设置为空字符串
// 注释掉严格的验证
// if (StringUtils.isBlank(bo.getTargetValue())) {
//     throw new RuntimeException("第" + (i + 1) + "个绩效指标的目标值不能为空");
// }

// 确保targetValue至少是空字符串
if (bo.getTargetValue() == null) {
    bo.setTargetValue("");
}

修复3:修改验证方法

文件: web/src/views/cw/application/components/PerformanceIndicators.vue

修改内容: 放宽validate方法的验证条件,与emitChange保持一致

// 旧代码:
const isValid = item.goalName && item.goalName.trim() && item.targetValue && item.targetValue.trim();

// 新代码:
const isValid = item.goalName && item.goalName.trim();

✅ 验证步骤

测试场景1:部分填写的指标能够保存

  1. 填写绩效指标时,只填写目标名称和分值占比,不填写目标值
  2. 点击保存草稿
  3. 验证:
    • 前端显示"绩效指标数据已随草稿数据一起保存,数量: X"(X > 0)
    • 后端日志显示"开始保存绩效指标,数量: X"
    • 数据库中有相应的记录

测试场景2:总分值占比实时更新

  1. 修改任意指标的分值占比
  2. 验证页面上的"总分值占比"立即更新

测试场景3:完整的绩效指标保存流程

  1. 填写多个指标(部分有目标值,部分没有)
  2. 确保总分值占比 = 100%
  3. 保存草稿并提交
  4. 查询数据库验证数据完整性

📊 期望结果

前端控制台日志

=== emitChange 被调用 ===
开始收集产出指标...
  项目 0: {goalName: "测试指标", targetValue: "", weightPercentage: 25}
    ✅ 添加到结果
最终收集到的指标数量: 4

后端控制台日志

=== 控制器接收到保存草稿请求 ===
绩效指标数量: 4
=== 开始保存草稿 ===
开始保存绩效指标,数量: 4

数据库查询结果

SELECT * FROM cw_performance_indicator WHERE application_id = ?;
-- 应该返回4条记录,部分target_value字段可能为空字符串

🎯 关键改进

  1. 用户体验优化:允许用户分步填写绩效指标,不必一次性填写所有字段
  2. 数据完整性:即使部分字段为空,也能保存用户已填写的数据
  3. 界面响应性:总分值占比能够实时反映用户的修改

📝 注意事项

  1. targetValue为空的指标在后续编辑时需要补充完整
  2. 提交审批前应该验证所有指标的targetValue都已填写
  3. 导出Excel时需要处理空的targetValue字段

通过这些修复,用户可以更灵活地填写绩效指标,系统也能正确保存和显示数据。