基于vue3.0和element-plus的组件库
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.

284 lines
7.9 KiB

2 years ago
import { i18n } from '../i18n';
const t = i18n.t;
2 years ago
2 years ago
export class SimpleRequired {
required = true;
trigger = 'blur';
2 years ago
name?: string;
selection?: boolean;
validator = (rule: any, value: any, callback: any) => {
if (value == null || value === '') {
const k = this.selection ? 'rule.pleaseSelect' : 'rule.pleaseEnter';
const msg = this.name ? t(k) + t(this.name).toLowerCase() : t('rule.notNull');
2 years ago
callback(new Error(msg));
2 years ago
}
2 years ago
callback();
};
constructor(name?: string, selection?: boolean) {
this.name = name;
this.selection = selection;
selection && (this.trigger = 'change');
2 years ago
}
}
export class SimpleCharacter {
2 years ago
max: number;
min?: number;
2 years ago
trigger: string = 'blur';
2 years ago
validator = (rule: any, value: any, callback: any) => {
if (value == null || value === '') {
callback();
} else if (value.length > this.max) {
callback(new Error(t('rule.maxLen', [this.max])));
} else if (this.min && value.length < this.min) {
callback(new Error(t('rule.minLen', [this.min])));
2 years ago
}
2 years ago
callback();
};
constructor(max?: number, min?: number) {
this.max = max || 255;
this.min = min;
2 years ago
}
}
export class Character {
pattern: RegExp;
trigger = 'blur';
2 years ago
validator = (rule: any, value: any, callback: any) => {
if (value == null || value === '') {
callback();
} else if (!this.pattern.test(value)) {
callback(new Error(t('rule.formatErr')));
}
callback();
};
2 years ago
constructor(pattern: RegExp) {
this.pattern = pattern;
}
}
export class SimpleNumber {
trigger: string = 'blur';
2 years ago
min?: number;
max?: number;
2 years ago
validator = (rule: any, value: any, callback: any) => {
if (value == null || value === '') {
callback();
}
if (!new RegExp(/^(0|-?[1-9]\d*)$/).test(value)) {
2 years ago
const msg = t('rule.pleaseEnter') + t('rule.int').toLowerCase();
callback(new Error(msg));
2 years ago
}
const num = parseInt(value);
if (rule.min != null && num < rule.min) {
2 years ago
callback(new Error(t('rule.min', [this.min])));
2 years ago
}
2 years ago
if (this.max != null && num > this.max) {
callback(new Error(t('rule.max', [this.max])));
2 years ago
}
callback();
};
2 years ago
constructor(min?: number, max?: number) {
2 years ago
this.min = min;
this.max = max;
}
}
export class Hexadecimal {
trigger = 'blur';
min?: Number;
max?: Number;
validator = (rule: any, value: any, callback: any) => {
if (value == null) {
callback();
} else if (value.trim().length == 0 || !new RegExp(/^[0-9a-fA-F\s]+$/).test(value)) {
2 years ago
callback(new Error(t('rule.hexadecimal')));
} else if (this.min != null && value.length < this.min) {
callback(new Error(t('rule.minLen', [this.min])));
} else if (this.max != null && value.length > this.max) {
callback(new Error(t('rule.maxLen', [this.max])));
2 years ago
} else {
callback();
}
};
constructor(min?: number, max?: Number) {
this.min = min;
this.max = max;
}
}
export class Longitude extends Character {
constructor() {
super(new RegExp(/^-?((0|1?[0-7]?[0-9]?)(([.][0-9]{1,6})?)|180(([.][0]{1,6})?))$/));
2 years ago
}
}
export class Latitude extends Character {
constructor() {
2 years ago
super(new RegExp(/^[\-\+]?((0|([1-8]\d?))(\.\d{1,10})?|90(\.0{1,10})?)$/));
2 years ago
}
}
export class Email extends Character {
constructor() {
super(new RegExp(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/));
2 years ago
}
}
export class Phone extends Character {
constructor() {
super(new RegExp(/^(0|86|17951)?(13[0-9]|15[012356789]|17[0135678]|18[0-9]|14[57])[0-9]{8}$/));
2 years ago
}
}
export class Ipv4 extends Character {
constructor() {
super(new RegExp(/^((25[0-5]|2[0-4]\d|[01]?\d\d?)($|(?!\.$)\.)){4}$/));
}
}
export class Ipv6 extends Character {
constructor() {
super(
new RegExp(
/^([0-9a-fA-F]{1,4}:){7,7}([0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,6}(:[0-9a-fA-F]{1,4}|:)|([0-9a-fA-F]{1,4}:){1,5}((:[0-9a-fA-F]{1,4}){1,2}|:)|([0-9a-fA-F]{1,4}:){1,4}((:[0-9a-fA-F]{1,4}){1,3}|:)|([0-9a-fA-F]{1,4}:){1,3}((:[0-9a-fA-F]{1,4}){1,4}|:)|([0-9a-fA-F]{1,4}:){1,2}((:[0-9a-fA-F]{1,4}){1,5}|:)|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6}|:)|:((:[0-9a-fA-F]{1,4}){1,7}|:)/
)
);
}
}
export class IdCard {
trigger = 'blur';
validator = (rule: any, value: any, callback: any) => {
if (value != null && value.length != 0) {
let iSum = 0;
const aCity = {
11: '北京',
12: '天津',
13: '河北',
14: '山西',
15: '内蒙古',
21: '辽宁',
22: '吉林',
23: '黑龙江',
31: '上海',
32: '江苏',
33: '浙江',
34: '安徽',
35: '福建',
36: '江西',
37: '山东',
41: '河南',
42: '湖北',
43: '湖南',
44: '广东',
45: '广西',
46: '海南',
50: '重庆',
51: '四川',
52: '贵州',
53: '云南',
54: '西藏',
61: '陕西',
62: '甘肃',
63: '青海',
64: '宁夏',
65: '新疆',
71: '台湾',
81: '香港',
82: '澳门',
91: '国外',
};
if (!/^\d{17}(\d|x)$/i.test(value)) {
2 years ago
callback(t('rule.idCard.format'));
2 years ago
}
value = value.replace(/x$/i, 'a');
if (aCity[parseInt(value.substr(0, 2))] == null) {
2 years ago
callback(new Error(t('rule.idCard.area')));
2 years ago
}
const sBirthday = value.substr(6, 4) + '-' + Number(value.substr(10, 2)) + '-' + Number(value.substr(12, 2));
2 years ago
const d = new Date(sBirthday.replace(/-/g, '/'));
if (sBirthday != d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate()) {
2 years ago
callback(new Error(t('rule.idCard.birth')));
2 years ago
}
for (let i = 17; i >= 0; i--) {
iSum += (Math.pow(2, i) % 11) * parseInt(value.charAt(17 - i), 11);
}
if (iSum % 11 != 1) {
2 years ago
callback(new Error(t('rule.idCard.error')));
2 years ago
}
}
callback();
};
}
2 years ago
export class SimplePassword {
required: boolean = true;
trigger = 'blur';
min?: Number = 8;
max?: Number = 16;
validator = (rule: any, value: any, callback: any) => {
if (value == null || value === '') {
2 years ago
callback(new Error(t('rule.pleaseEnter') + t('pwd.pwd').toLowerCase()));
2 years ago
} else if (value.length < 6 || value.length > 18) {
2 years ago
callback(new Error(t('pwd.length', [6, 18])));
2 years ago
} else if (!new RegExp('^[^ ]+$').test(value)) {
2 years ago
callback(new Error(t('pwd.noSpace')));
2 years ago
}
callback();
};
}
export class Username {
required: boolean = true;
trigger = 'blur';
min?: Number = 4;
max?: Number = 16;
validator = (rule: any, value: any, callback: any) => {
if (value != null && value.length != 0) {
if (!new RegExp('^[a-zA-Z0-9]{4,16}$').test(value)) {
callback(new Error(t('rule.username.0')));
}
if (/(^\_)|(\__)|(\_+$)/.test(value)) {
callback(new Error(t('rule.username.1')));
}
if (!new RegExp('^[^ ]+$').test(value)) {
callback(new Error(t('rule.username.2')));
}
}
callback();
};
}
2 years ago
export class Password {
required: boolean = true;
trigger = 'blur';
min?: Number = 8;
max?: Number = 16;
validator = (rule: any, value: any, callback: any) => {
if (value == null || value === '') {
2 years ago
callback(new Error(t('rule.pleaseEnter') + t('pwd.pwd').toLowerCase()));
2 years ago
} else if (value.length < 8 || value.length > 20) {
2 years ago
callback(new Error(t('pwd.length', [8, 20])));
} else if (!new RegExp('^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$').test(value)) {
2 years ago
callback(new Error(t('pwd.required')));
2 years ago
} else if (!new RegExp('^[^ ]+$').test(value)) {
2 years ago
callback(new Error(t('pwd.noSpace')));
2 years ago
}
callback();
};
}
export class Name {
pattern: RegExp = new RegExp('^[a-zA-Z\u4e00-\u9fa5]{1,10}$');
trigger = 'blur';
validator = (rule: any, value: any, callback: any) => {
if (value != null && value.length != 0 && !this.pattern.test(value)) {
callback(new Error(t('rule.name')));
}
callback();
};
}