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

4.1 KiB
Raw Blame History

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

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

🚨 问题总结

  1. 绩效指标无法保存:条件过于严格,要求goalName和targetValue都不为空
  2. 总分值占比不更新:Vue响应式系统没有正确追踪weightPercentage的变化

🔧 已实施的修复

修复1: 放宽数据收集条件

  • 前端:只要有goalName就收集指标,targetValue可以为空
  • 后端:移除targetValue必填验证,允许为空字符串

修复2: 增强响应式更新

  • 添加handleWeightPercentageChange专门处理分值占比变化
  • 使用$forceUpdate()强制触发Vue响应式更新
  • 使用$nextTick()确保计算属性在DOM更新后执行

修复3: 改进事件绑定

  • 分值占比输入框绑定到专门的事件处理器
  • 添加@input、@change、@blur多重事件监听

🧪 测试验证步骤

步骤1: 重启前端开发服务器

cd web
npm run dev

步骤2: 测试绩效指标保存

  1. 进入新增项目页面
  2. 填写基础信息
  3. 在绩效指标中只填写目标名称和分值占比,不填写目标值
  4. 观察控制台:
    === 分值占比变化 ===
    设置后的item.weightPercentage: 25
    当前总权重: 25
    === emitChange 被调用 ===
    最终收集到的指标数量: 1
    

步骤3: 测试总分值占比实时更新

  1. 修改任一指标的分值占比
  2. 观察页面上的"总分值占比"立即变化
  3. 多个指标的占比总和应该实时显示

步骤4: 测试完整保存流程

  1. 填写多个指标,确保总占比=100%
  2. 点击"保存草稿"
  3. 验证:
    • 前端显示"绩效指标数据已随草稿数据一起保存,数量: X"(X > 0)
    • 后端日志显示"开始保存绩效指标,数量: X"

步骤5: 验证数据库保存

-- 查询最新的申报记录
SELECT id, application_no, project_name FROM cw_project_application 
WHERE deleted = 0 ORDER BY create_time DESC LIMIT 1;

-- 查询绩效指标数据
SELECT application_id, goal_name, target_value, weight_percentage 
FROM cw_performance_indicator 
WHERE application_id = [上面查询到的ID] AND deleted = 0;

📊 期望结果

前端控制台日志

=== 分值占比变化 === item: {...} newValue: 25
设置后的item.weightPercentage: 25
当前总权重: 100
=== emitChange 被调用 ===
最终收集到的指标数量: 4
=== 绩效指标组件数据变化 ===
indicators长度: 4
=== 前端保存草稿调试信息 ===
form.performanceIndicators 长度: 4

后端控制台日志

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

页面效果

  • 总分值占比实时显示(如:总分值占比:100%)
  • 分值占比为100%时显示绿色成功提示
  • 分值占比不为100%时显示橙色警告提示

🎯 用户体验改进

  1. 分步填写:允许用户先填写目标名称和占比,后续补充目标值
  2. 实时反馈:总分值占比立即显示,帮助用户调整
  3. 数据保护:即使部分填写也能保存,避免数据丢失

📝 注意事项

  1. targetValue为空的处理:后续编辑时需要提醒用户补充
  2. 提交验证:在正式提交审批前应验证所有必填字段
  3. 数据完整性:确保weightPercentage总和为100%

🔄 如果问题仍然存在

调试checklist:

  • 前端控制台是否显示"分值占比变化"日志?
  • 总权重计算是否执行?
  • emitChange是否被调用?
  • form.performanceIndicators长度是否大于0?
  • 后端是否接收到绩效指标数据?

快速测试:

在绩效指标页面的控制台执行:

// 手动触发计算
document.querySelector('.el-button').click(); // 点击"测试计算"按钮
// 查看输出结果

通过这些修复,绩效指标保存和总分值占比更新问题应该得到完全解决。