3.6 KiB
3.6 KiB
简化分值占比输入修复
日期: 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
🧪 测试验证
基础功能测试
-
分值输入测试:
- 数量指标输入25 → 应能正常输入
- 质量指标输入25 → 不影响数量指标的值
- 其他输入框(目标名称、目标值等)应能正常输入
-
范围限制测试:
- 输入负数 → 自动调整为0
- 输入超过100 → 自动调整为100
-
提交验证测试:
- 总分值不为100% → 显示验证错误
- 总分值为100% → 验证通过
兼容性测试
- 保存草稿功能正常
- 绩效指标数据正确传递给父组件
- 其他表单字段不受影响
🎉 预期效果
简化完成后应该能够:
- ✅ 分值占比输入框正常工作,不影响其他输入框
- ✅ 表单操作流畅,无卡顿或干扰
- ✅ 提交时正确验证总分值是否为100%
- ✅ 代码更简洁,维护性更好
修复策略: 从"实时计算显示"改为"提交时验证",大幅简化了组件复杂度
请立即测试验证功能是否正常,特别是其他输入框是否不再受到干扰!