4.3 KiB
4.3 KiB
绩效指标保存和总分值占比问题修复记录
日期: 2025-08-01
操作人员: Assistant
修复类型: 修复绩效指标无法保存到数据库和总分值占比不能实时更新的问题
🚨 问题描述
问题1:绩效指标数据不能插入数据库
- 症状:前端显示"绩效指标数据已随草稿数据一起保存,数量: 0"
- 原因:绩效指标组件的收集条件过于严格,要求goalName和targetValue都不为空才收集
- 影响:用户填写了部分数据(如只填了目标名称)的指标无法保存
问题2:总分值占比不能实时更新
- 症状:修改分值占比后,页面上的"总分值占比"显示不更新
- 原因:Vue的响应式系统没有正确触发更新
🔧 解决方案
修复1:放宽绩效指标收集条件
文件: web/src/views/cw/application/components/PerformanceIndicators.vue
修改内容:
- 修改
emitChange方法,只要有goalName就收集指标 - 确保targetValue至少是空字符串而不是null/undefined
- 添加详细的调试日志
- 在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
修改内容:
- 注释掉targetValue不能为空的验证
- 确保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:部分填写的指标能够保存
- 填写绩效指标时,只填写目标名称和分值占比,不填写目标值
- 点击保存草稿
- 验证:
- 前端显示"绩效指标数据已随草稿数据一起保存,数量: X"(X > 0)
- 后端日志显示"开始保存绩效指标,数量: X"
- 数据库中有相应的记录
测试场景2:总分值占比实时更新
- 修改任意指标的分值占比
- 验证页面上的"总分值占比"立即更新
测试场景3:完整的绩效指标保存流程
- 填写多个指标(部分有目标值,部分没有)
- 确保总分值占比 = 100%
- 保存草稿并提交
- 查询数据库验证数据完整性
📊 期望结果
前端控制台日志
=== emitChange 被调用 ===
开始收集产出指标...
项目 0: {goalName: "测试指标", targetValue: "", weightPercentage: 25}
✅ 添加到结果
最终收集到的指标数量: 4
后端控制台日志
=== 控制器接收到保存草稿请求 ===
绩效指标数量: 4
=== 开始保存草稿 ===
开始保存绩效指标,数量: 4
数据库查询结果
SELECT * FROM cw_performance_indicator WHERE application_id = ?;
-- 应该返回4条记录,部分target_value字段可能为空字符串
🎯 关键改进
- 用户体验优化:允许用户分步填写绩效指标,不必一次性填写所有字段
- 数据完整性:即使部分字段为空,也能保存用户已填写的数据
- 界面响应性:总分值占比能够实时反映用户的修改
📝 注意事项
- targetValue为空的指标在后续编辑时需要补充完整
- 提交审批前应该验证所有指标的targetValue都已填写
- 导出Excel时需要处理空的targetValue字段
通过这些修复,用户可以更灵活地填写绩效指标,系统也能正确保存和显示数据。