4.1 KiB
4.1 KiB
绩效指标保存和总分值占比问题最终修复
日期: 2025-08-01
操作人员: Assistant
修复类型: 解决绩效指标无法保存和总分值占比不实时更新的问题
🚨 问题总结
- 绩效指标无法保存:条件过于严格,要求goalName和targetValue都不为空
- 总分值占比不更新:Vue响应式系统没有正确追踪weightPercentage的变化
🔧 已实施的修复
修复1: 放宽数据收集条件
- 前端:只要有goalName就收集指标,targetValue可以为空
- 后端:移除targetValue必填验证,允许为空字符串
修复2: 增强响应式更新
- 添加
handleWeightPercentageChange专门处理分值占比变化 - 使用
$forceUpdate()强制触发Vue响应式更新 - 使用
$nextTick()确保计算属性在DOM更新后执行
修复3: 改进事件绑定
- 分值占比输入框绑定到专门的事件处理器
- 添加@input、@change、@blur多重事件监听
🧪 测试验证步骤
步骤1: 重启前端开发服务器
cd web
npm run dev
步骤2: 测试绩效指标保存
- 进入新增项目页面
- 填写基础信息
- 在绩效指标中只填写目标名称和分值占比,不填写目标值
- 观察控制台:
=== 分值占比变化 === 设置后的item.weightPercentage: 25 当前总权重: 25 === emitChange 被调用 === 最终收集到的指标数量: 1
步骤3: 测试总分值占比实时更新
- 修改任一指标的分值占比
- 观察页面上的"总分值占比"立即变化
- 多个指标的占比总和应该实时显示
步骤4: 测试完整保存流程
- 填写多个指标,确保总占比=100%
- 点击"保存草稿"
- 验证:
- 前端显示"绩效指标数据已随草稿数据一起保存,数量: 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%时显示橙色警告提示
🎯 用户体验改进
- 分步填写:允许用户先填写目标名称和占比,后续补充目标值
- 实时反馈:总分值占比立即显示,帮助用户调整
- 数据保护:即使部分填写也能保存,避免数据丢失
📝 注意事项
- targetValue为空的处理:后续编辑时需要提醒用户补充
- 提交验证:在正式提交审批前应验证所有必填字段
- 数据完整性:确保weightPercentage总和为100%
🔄 如果问题仍然存在
调试checklist:
- 前端控制台是否显示"分值占比变化"日志?
- 总权重计算是否执行?
- emitChange是否被调用?
- form.performanceIndicators长度是否大于0?
- 后端是否接收到绩效指标数据?
快速测试:
在绩效指标页面的控制台执行:
// 手动触发计算
document.querySelector('.el-button').click(); // 点击"测试计算"按钮
// 查看输出结果
通过这些修复,绩效指标保存和总分值占比更新问题应该得到完全解决。