antd-for-vue 表單驗證失效 自定義表單驗證使表單非空驗證失效(其他驗證失效)
antd 的 表單校驗方法包括 validateFields 和 validateFieldsAndScroll里面可以接收校驗字段數組, options, 和一個回調函數
- 錯誤代碼
organizationId: {rules: [ {required: true, message: '請輸入團支部!'}, { validator: tpMemberCount ,trigger: 'change'}, ], }, //導致失效的地方 //具體驗證方法 let tpMemberCount = (rule, value, callback) => { console.log(value) try { getAction("/tp/tpOrganization/queryById", {id: value}).then((res) => { if (res.success) { let MemberCount = res.result.tyNumber console.log(MemberCount) callback(); if (MemberCount < 1) { callback(new Error('該支部下無團員,請重新選擇。')); } } else { this.$message.warning("未查詢到[" + res.result.orgName + "]組織人數,請手動填入"); callback(); } }); } catch (err){ callback(); } };
當不設置自定義校驗方法時 其他校驗均有效
- 修改子自定義的校驗方法
- 解決過程代碼
-
let tpMemberCount = (rule, value, callback) => { console.log(1) getAction("/tp/tpOrganization/queryById", {id: value}).then((res) => { if (res.success) { let MemberCount = res.result.tyNumber if (MemberCount < 1) { callback(new Error('該支部下無團員,請重新選擇。')); console.log(2) }else { callback() } // if (value == undefined && value == null && value == ''){ // callback(new Error('請選擇請團支部')); // console.log(3) // } } else { this.$message.warning("未查詢到[" + res.result.orgName + "]組織人數,請手動填入"); callback(); console.log(4) } }); callback() console.log(5) };
結論在自定義的驗證的方法中出現了問題
-
修改后正確代碼
let tpMemberCount = (rule, value, callback) => { getAction("/tp/tpOrganization/queryById", {id: value}).then((res) => { if (res.success) { let MemberCount = res.result.tyNumber if (MemberCount < 1) { callback(new Error('該支部下無團員,請重新選擇。')); }else { callback() } } else { this.$message.warning("未查詢到[" + res.result.orgName + "]組織人數,請手動填入"); callback(); } }); };