Files
hzdyjs/docs/变更管理/code-adjust-record-2025-08-01-simplify-weight-input.md
T
2025-08-01 08:35:47 +08:00

3.6 KiB
Raw Blame History

简化分值占比输入修复

日期: 2025-08-01
问题: 复杂的分值占比实时计算影响其他输入框正常使用 解决方案: 简化为普通百分比输入,提交时验证总和是否为100%

🚨 用户反馈问题

  • 输入分值占比会导致其他输入框不能正常填入参数
  • 复杂的响应式更新机制过度干扰了正常的表单操作
  • 希望简化为最基本的百分比输入,只在提交时验证

🔧 简化修复措施

修复1: 简化handleWeightInput方法

// 从复杂的响应式更新简化为:
handleWeightInput(item, value) {
  // 确保是数字类型,限制范围
  let numValue = Number(value) || 0;
  if (numValue < 0) numValue = 0;
  if (numValue > 100) numValue = 100;
  
  // 直接赋值
  item.weightPercentage = numValue;
  
  // 简单触发父组件事件
  this.emitChange();
}

移除的复杂逻辑:

  • ❌ 强制响应式更新 (forceReactiveUpdate)
  • ❌ 手动计算验证 (calculateTotalWeight)
  • ❌ 多层强制更新 ($forceUpdate, $nextTick)
  • ❌ 大量调试日志

修复2: 移除实时总分值显示

<!-- 从动态显示改为静态提示 -->
<el-alert
  title="绩效指标分值占比"
  type="info"
  show-icon
  description="请确保各项绩效指标的分值占比总和等于100%。提交时会进行验证。"
/>

移除的实时计算:

  • ❌ totalWeight() 计算属性
  • ❌ 动态标题显示 :title="总分值占比:${totalWeight}%"
  • ❌ 动态状态变化 :type="totalWeight === 100 ? 'success' : 'warning'"

修复3: 保留提交时验证

在 validate() 方法中保留必要的验证逻辑:

validate() {
  // 计算总分值
  let totalWeight = 0;
  // [计算所有指标的权重总和]
  
  // 验证是否为100%
  if (Math.abs(totalWeight - 100) > 0.1) {
    const message = `绩效指标总分值占比必须等于100%,当前为${totalWeight}%`;
    return { valid: false, message };
  }
  
  return { valid: true };
}

修复4: 删除不必要的方法

  • ❌ forceReactiveUpdate() - 强制响应式更新
  • ❌ calculateTotalWeight() - 手动计算总权重
  • ❌ 所有测试方法

🎯 简化后的优势

性能优化

  • ✅ 移除了频繁的响应式更新
  • ✅ 减少了不必要的计算开销
  • ✅ 降低了组件的复杂度

用户体验改善

  • ✅ 其他输入框不再受到干扰
  • ✅ 表单操作更加流畅
  • ✅ 界面响应更加稳定

代码维护性

  • ✅ 代码逻辑更简单易懂
  • ✅ 调试更容易
  • ✅ 减少了潜在的bug

🧪 测试验证

基础功能测试

  1. 分值输入测试:

    • 数量指标输入25 → 应能正常输入
    • 质量指标输入25 → 不影响数量指标的值
    • 其他输入框(目标名称、目标值等)应能正常输入
  2. 范围限制测试:

    • 输入负数 → 自动调整为0
    • 输入超过100 → 自动调整为100
  3. 提交验证测试:

    • 总分值不为100% → 显示验证错误
    • 总分值为100% → 验证通过

兼容性测试

  • 保存草稿功能正常
  • 绩效指标数据正确传递给父组件
  • 其他表单字段不受影响

🎉 预期效果

简化完成后应该能够:

  • ✅ 分值占比输入框正常工作,不影响其他输入框
  • ✅ 表单操作流畅,无卡顿或干扰
  • ✅ 提交时正确验证总分值是否为100%
  • ✅ 代码更简洁,维护性更好

修复策略: 从"实时计算显示"改为"提交时验证",大幅简化了组件复杂度

请立即测试验证功能是否正常,特别是其他输入框是否不再受到干扰!