|
|
@@ -379,11 +379,17 @@ const RATE_HINTS = {
|
|
|
* 由两个输入框的 change 事件主动触发校验)。
|
|
|
* 复测 P1-13:socialBaseMin/Max 与 fundBaseMin/Max 都是后端 required,
|
|
|
* 原实现要么没有规则、要么规则挂在没有 prop 的表单项上 → 永不触发。
|
|
|
+ *
|
|
|
+ * ★ 2026-10-20 修复「全都填了仍提示必填未补全」:
|
|
|
+ * async-validator@1.8.5 以普通函数调用执行自定义校验器(lib/index.js L234)且全程 'use strict',
|
|
|
+ * validator 里的 this = undefined —— 这里绝不能写 this.form,必须经闭包把组件实例(vm)传进来。
|
|
|
+ * 原来的 this.form 每次校验必抛 TypeError,被 handleSave 的 try/catch 兜成 valid=false,
|
|
|
+ * 表现为不管填没填全、点保存必弹「请先补全表单中的必填项」。
|
|
|
*/
|
|
|
-const baseRangeRule = (label, minKey, maxKey) => ({
|
|
|
+const baseRangeRule = (label, minKey, maxKey, vm) => ({
|
|
|
validator(rule, value, callback) {
|
|
|
- const min = this.form[minKey];
|
|
|
- const max = this.form[maxKey];
|
|
|
+ const min = vm.form[minKey];
|
|
|
+ const max = vm.form[maxKey];
|
|
|
if (min == null || min === '' || isNaN(Number(min)) || Number(min) < 0) {
|
|
|
callback(new Error(`请输入${label}下限`));
|
|
|
return;
|
|
|
@@ -453,9 +459,9 @@ export default {
|
|
|
effectiveDate: [{ required: true, message: '请选择生效日期', trigger: 'change' }],
|
|
|
/* 后端保存参数 required 含 location(参保地)—— 选到省/市即可,很多城市按市统筹 */
|
|
|
location: [locationRequired],
|
|
|
- /* 基数上下限:挂在虚拟 prop 上,由两个输入框的 change 主动触发 */
|
|
|
- socialBaseRange: [baseRangeRule('社保基数', 'socialBaseMin', 'socialBaseMax')],
|
|
|
- fundBaseRange: [baseRangeRule('公积金基数', 'fundBaseMin', 'fundBaseMax')]
|
|
|
+ /* 基数上下限:挂在虚拟 prop 上,由两个输入框的 change 主动触发(vm 见 baseRangeRule 注释) */
|
|
|
+ socialBaseRange: [baseRangeRule('社保基数', 'socialBaseMin', 'socialBaseMax', this)],
|
|
|
+ fundBaseRange: [baseRangeRule('公积金基数', 'fundBaseMin', 'fundBaseMax', this)]
|
|
|
}
|
|
|
};
|
|
|
},
|