UNPKG

ttk-app-core

Version:

@ttk/recat enterprise develop framework

73 lines (70 loc) 2.2 kB
let depends = null /** * 收集单条规则的依赖校验 * @param {String} key * @param {Array | Object} rule * [{ type: 'string', required: true, message: '请输入编码' }, { min: 6, max: 8, message: '编码长度不得小于6、大于8' }] */ export function collectDepends(key, rule) { if (!Array.isArray(rule)) { rule = [rule] } rule.forEach((item, index) => { if (item.dependValidator) { depends = depends || {} depends[key] = depends[key] || [] depends[key].push(item.dependValidator) } }) return depends } /** * * @param {*} depends 收集的依赖对象 * @param {Object} result async-validator的校验结果(报错的部分) * @param {*} formData 表单总数据 * { * code: {state: 'error', message: '编码不能重复'} * } * @return 返回一个长度为2的数组,第一个为boolean值,代表是否验证通过。第二个是错误消息状态,错误消息状态如下 * { * code: {state: 'error', message: '编码不能重复'} * name: {state: 'success', message: ''} * } */ export function validateDepends(result, fields, formData) { return async function () { if (!depends) { return result } for (let key in depends) { if (result[key] && result[key].state === 'error') { // 该字段已校验失败的话,就不再校验 continue } let depend = depends[key] if (!Array.isArray(depend)) { depend = [depend] } for (let validateFunc of depend) { let res = null await validateFunc(formData, fields[key], function(msg, dependKey) { dependKey = dependKey || key if (!msg) { // 若校验通过,则需消除依赖字段的校验状态 res = { [dependKey]: { state: 'success', message: '' } } } else { res = { [dependKey]: { state: 'error', message: msg } } } }) if (res) { // 按rules的顺序校验,只要出错就返回,一个字段永远只显示一条校验错误 result = { ...res, ...result } break; } } } depends = null return result }() }