88 lines
2.9 KiB
JavaScript
88 lines
2.9 KiB
JavaScript
import { reactive } from "vue";
|
||
// 验证
|
||
import { validate_email, validate_password } from "@/utils/validate";
|
||
/**
|
||
* @returns BasisForm组件创建校验规则
|
||
*/
|
||
export function rulesHook(){
|
||
/**
|
||
* @param {*} data 配置额外组件
|
||
*/
|
||
const InitRules = (data = []) => {
|
||
if(data.length === 0) { return false; }
|
||
// 判断是否有required属性
|
||
data.forEach(item => {
|
||
//初始化规则数组
|
||
let rulesArr = [];
|
||
if(item.required) {
|
||
let json = { required: true, message: item.message || messageType(item), trigger: 'change' }
|
||
rulesArr.push(json)
|
||
}
|
||
// 是否有其他的校验规则
|
||
const rule = item.rule;
|
||
if(rule && Array.isArray(rule) && rule.length > 0) {
|
||
rulesArr = rulesArr.concat(rule);
|
||
}
|
||
// 用户名
|
||
if(item.value_type === 'username') {
|
||
const rule = {
|
||
validator(rule, value, callback, source, options) {
|
||
if(!value || value === ""){
|
||
callback(new Error("请输入用户名"));
|
||
}else if(!validate_email(value)) {
|
||
callback(new Error("邮箱格式不正确"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}
|
||
}
|
||
rulesArr = rulesArr.concat(rule);
|
||
}
|
||
// 密码
|
||
if(item.value_type === 'password') {
|
||
const rule = {
|
||
validator(rule, value, callback, source, options) {
|
||
if(!value || value === ""){
|
||
callback(new Error("请输入用密码"));
|
||
}else if(!validate_password(value)) {
|
||
callback(new Error("请输入>=6并且<=20位的密码,包含数字、字母"));
|
||
} else {
|
||
callback();
|
||
}
|
||
}
|
||
}
|
||
rulesArr = rulesArr.concat(rule);
|
||
}
|
||
// 定义rules属性赋值
|
||
item.rules = rulesArr;
|
||
});
|
||
return data;
|
||
}
|
||
/**
|
||
*
|
||
* @description 提示文本
|
||
*/
|
||
const messageType = (data) => {
|
||
let msg = "";
|
||
switch(data.type){
|
||
case "input":
|
||
case "wangeditor":
|
||
msg = "请输入";
|
||
break;
|
||
case "upload":
|
||
msg = "请上传";
|
||
break;
|
||
case "radio":
|
||
case "checkbox":
|
||
case "select":
|
||
case "date":
|
||
case "cascader":
|
||
msg = "请选择";
|
||
break;
|
||
default:
|
||
msg = "未定义";
|
||
}
|
||
return `${msg}${data.label}`;
|
||
}
|
||
return { InitRules };
|
||
} |