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 };
|
}
|