ttk-app-core
Version:
@ttk/recat enterprise develop framework
73 lines (70 loc) • 2.2 kB
JavaScript
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
}()
}