You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1007 B
52 lines
1007 B
2 years ago
|
import rules from './rules';
|
||
|
|
||
|
/**
|
||
|
* 表单验证
|
||
|
*
|
||
|
* @param {Object} fmData [表单数据]
|
||
|
* @param {Object} opts [参数]
|
||
|
* @return {Object} [descrsiption]
|
||
|
*/
|
||
|
export default function(fmData, opts){
|
||
|
let res = {
|
||
|
valid: true,
|
||
|
error: '',
|
||
|
errors: [],
|
||
|
fields: {}
|
||
|
};
|
||
|
Object.keys(opts).forEach(key => {
|
||
|
|
||
|
let value = fmData[key],
|
||
|
item = opts[key],
|
||
|
resItem = {
|
||
|
valid: true,
|
||
|
error: '',
|
||
|
errors: []
|
||
|
};
|
||
|
|
||
|
item.forEach(ruleItem => {
|
||
|
let {rule, message, param} = ruleItem;
|
||
|
if (rules[rule]) {
|
||
|
if (!rules[rule].check(value, param)) {
|
||
|
message = message
|
||
|
? message
|
||
|
: rules[rule].message;
|
||
|
if (res.valid) {
|
||
|
res.valid = false;
|
||
|
res.error = message;
|
||
|
}
|
||
|
if (resItem.valid) {
|
||
|
resItem.valid = false;
|
||
|
resItem.error = message;
|
||
|
}
|
||
|
resItem.errors.push(message);
|
||
|
res.errors.push(message);
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
res.fields[key] = resItem;
|
||
|
});
|
||
|
|
||
|
return res;
|
||
|
}
|