import { dateUtil } from '/@/utils/dateUtil'; import { duplicateCheck } from '/@/views/system/user/user.api'; import { Rule } from '/@/components/Form'; import { message } from 'ant-design-vue'; export const rules = { rule(type, required): Rule[] { if (type === 'email') { return this.email(required); } if (type === 'phone') { return this.phone(required); } if (type === 'idcard') { return this.idcard(required); } return []; }, idcard(required): Rule[] { return [ { required: required ? required : false, validator: async (_rule, value) => { if (required == true && !value) { return Promise.reject('请输入身份证号!'); } if (value && !new RegExp(/^\d{6}(18|19|20)?\d{2}(0[1-9]|1[012])(0[1-9]|[12]\d|3[01])\d{3}(\d|[xX])$/).test(value)) { return Promise.reject('请输入正确的身份证号!'); } return Promise.resolve(); }, trigger: 'change', }, ]; }, email(required): Rule[] { return [ { required: required ? required : false, validator: async (_rule, value) => { if (required == true && !value) { return Promise.reject('请输入邮箱!'); } if ( value && !new RegExp( /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ ).test(value) ) { return Promise.reject('请输入正确邮箱格式!'); } return Promise.resolve(); }, trigger: 'change', }, ]; }, phone(required): Rule[] { return [ { required: required, validator: async (_, value) => { if (!value) { return required ? Promise.reject('请输入手机号码!') : Promise.resolve(); } if (!/^1[3456789]\d{9}$/.test(value)) { return Promise.reject('手机号码格式有误'); } return Promise.resolve(); }, trigger: 'change', }, ]; }, telPhone(required: boolean, tip?: string = '电话号码格式有误'): Rule[] { return [ { required: required, validator: async (_, value) => { if (!value) { return required ? Promise.reject('请输入电话号码!') : Promise.resolve(); } if (!/^(0\d{2,3}-\d{7,8})$|^(0\d{2,3}\d{7,8})|^(\(\d{3,4}\)-\d{7,8})$|^(\(\d{3,4}\)\d{7,8})$/.test(value)) { return Promise.reject(tip); } return Promise.resolve(); }, trigger: 'change', }, ]; }, phoneAndTelPhone(required: boolean, tip?: string = '电话号码格式有误'): Rule[] { return [ { required: required, validator: async (_, value) => { if (!value) { return required ? Promise.reject('请输入号码!') : Promise.resolve(); } if (!/^(0\d{2,3}-\d{7,8})$|^(0\d{2,3}\d{7,8})|^(\(\d{3,4}\)-\d{7,8})$|^(\(\d{3,4}\)\d{7,8})$|^1[3456789]\d{9}$/.test(value)) { return Promise.reject(tip); } return Promise.resolve(); }, trigger: 'change', }, ]; }, // 多个电话号码验证 multiplePhone(required: boolean): Rule[] { return [ { required: required, validator: async (_, value) => { if (!value) { return required ? Promise.reject('请输入号码!') : Promise.resolve(); } const phoneRegex = /^(?:1[3-9]\d{9}(?:,|$))*$/; if (!phoneRegex.test(value)) { return Promise.reject('请检查格式'); } return Promise.resolve(); }, trigger: 'change', }, ]; }, startTime(endTime, required): Rule[] { return [ { required: required ? required : false, validator: (_, value) => { if (required && !value) { return Promise.reject('请选择开始时间'); } if (endTime && value && dateUtil(endTime).isBefore(value)) { return Promise.reject('开始时间需小于结束时间'); } return Promise.resolve(); }, trigger: 'change', }, ]; }, endTime(startTime, required): Rule[] { return [ { required: required ? required : false, validator: (_, value) => { if (required && !value) { return Promise.reject('请选择结束时间'); } if (startTime && value && dateUtil(value).isBefore(startTime)) { return Promise.reject('结束时间需大于开始时间'); } return Promise.resolve(); }, trigger: 'change', }, ]; }, confirmPassword(values, required): Rule[] { return [ { required: required ? required : false, validator: (_, value) => { if (!value) { return Promise.reject('密码不能为空'); } if (value !== values.password) { return Promise.reject('两次输入的密码不一致!'); } return Promise.resolve(); }, }, ]; }, duplicateCheckRule(tableName, fieldName, model, schema, required?): Rule[] { return [ { validator: (_, value) => { if (!value && required) { return Promise.reject(`请输入${schema.label}`); } return new Promise((resolve, reject) => { duplicateCheck({ tableName, fieldName, fieldVal: value, dataId: model.id, }) .then((res) => { res.success ? resolve() : reject(res.message || '校验失败'); }) .catch((err) => { reject(err.message || '验证失败'); }); }); }, trigger: 'blur', }, ]; }, duplicateCheckRuleAndDelFlag(tableName, fieldName, delFlag, model, schema, required?): Rule[] { return [ { validator: (_, value) => { if (!value && required) { return Promise.reject(`请输入${schema.label}`); } return new Promise((resolve, reject) => { duplicateCheck({ tableName, fieldName, delFlag, fieldVal: value, dataId: model.id, }) .then((res) => { res.success ? resolve() : reject(res.message || '校验失败'); }) .catch((err) => { reject(err.message || '验证失败'); }); }); }, trigger: 'blur', }, ]; }, //模拟实测中数据验证 //数字大于0 numberGreaterThanZero(value: number) { const patternNumber = /^\d*(\.\d+)?$/; if (!patternNumber.test(value) || value < 0) { message.warn('请输入大于0的数字'); return false; } return true; }, //数字大于0的整数 numberGreaterThanZeroInt(value: number) { const patternNumber = /^\d+$/; if (!patternNumber.test(value) || value < 0) { message.warn('请输入大于0的整数'); return false; } return true; }, }; //update-begin-author:taoyan date:2022-6-16 for: 代码生成-原生表单用 /** * 唯一校验函数,给原生使用,vben的表单校验建议使用上述rules * @param tableName 表名 * @param fieldName 字段名 * @param fieldVal 字段值 * @param dataId 数据ID */ export async function duplicateValidate(tableName, fieldName, fieldVal, dataId) { try { const params = { tableName, fieldName, fieldVal, dataId: dataId, }; const res = await duplicateCheck(params); if (res.success) { return Promise.resolve(); } else { return Promise.reject(res.message || '校验失败'); } } catch (e) { return Promise.reject('校验失败,可能是断网等问题导致的校验失败'); } } //update-end-author:taoyan date:2022-6-16 for: 代码生成-原生表单用