完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
173 lines
3.4 KiB
TypeScript
173 lines
3.4 KiB
TypeScript
/**
|
|
* 登录表单验证规则
|
|
*/
|
|
|
|
import type { FormItemRule } from 'element-plus'
|
|
|
|
/**
|
|
* 用户名验证规则
|
|
*/
|
|
export const usernameRules = (t: (key: string) => string): FormItemRule[] => [
|
|
{
|
|
required: true,
|
|
message: t('login.placeholder[0]'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
min: 3,
|
|
max: 20,
|
|
message: t('login.validation.usernameLength'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
pattern: /^[a-zA-Z0-9_]+$/,
|
|
message: t('login.validation.usernamePattern'),
|
|
trigger: 'blur'
|
|
}
|
|
]
|
|
|
|
/**
|
|
* 密码验证规则
|
|
*/
|
|
export const passwordRules = (t: (key: string) => string): FormItemRule[] => [
|
|
{
|
|
required: true,
|
|
message: t('login.placeholder[1]'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
min: 6,
|
|
max: 20,
|
|
message: t('login.validation.passwordLength'),
|
|
trigger: 'blur'
|
|
}
|
|
]
|
|
|
|
/**
|
|
* 强密码验证规则(用于注册/修改密码)
|
|
*/
|
|
export const strongPasswordRules = (t: (key: string) => string): FormItemRule[] => [
|
|
{
|
|
required: true,
|
|
message: t('login.placeholder[1]'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
min: 8,
|
|
max: 20,
|
|
message: t('login.validation.strongPasswordLength'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
validator: (rule: any, value: any, callback: any) => {
|
|
if (!value) {
|
|
callback()
|
|
return
|
|
}
|
|
|
|
// 必须包含大小写字母、数字
|
|
const hasUpperCase = /[A-Z]/.test(value)
|
|
const hasLowerCase = /[a-z]/.test(value)
|
|
const hasNumber = /\d/.test(value)
|
|
|
|
if (!hasUpperCase || !hasLowerCase || !hasNumber) {
|
|
callback(new Error(t('login.validation.strongPasswordPattern')))
|
|
} else {
|
|
callback()
|
|
}
|
|
},
|
|
trigger: 'blur'
|
|
}
|
|
]
|
|
|
|
/**
|
|
* 确认密码验证规则
|
|
*/
|
|
export const confirmPasswordRules = (
|
|
t: (key: string) => string,
|
|
getPassword: () => string
|
|
): FormItemRule[] => [
|
|
{
|
|
required: true,
|
|
message: t('login.validation.confirmPasswordRequired'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
validator: (rule: any, value: any, callback: any) => {
|
|
if (!value) {
|
|
callback()
|
|
return
|
|
}
|
|
|
|
if (value !== getPassword()) {
|
|
callback(new Error(t('login.validation.confirmPasswordNotMatch')))
|
|
} else {
|
|
callback()
|
|
}
|
|
},
|
|
trigger: 'blur'
|
|
}
|
|
]
|
|
|
|
/**
|
|
* 手机号验证规则
|
|
*/
|
|
export const phoneRules = (t: (key: string) => string, required = false): FormItemRule[] => {
|
|
const rules: FormItemRule[] = []
|
|
|
|
if (required) {
|
|
rules.push({
|
|
required: true,
|
|
message: t('login.validation.phoneRequired'),
|
|
trigger: 'blur'
|
|
})
|
|
}
|
|
|
|
rules.push({
|
|
pattern: /^1[3-9]\d{9}$/,
|
|
message: t('login.validation.phonePattern'),
|
|
trigger: 'blur'
|
|
})
|
|
|
|
return rules
|
|
}
|
|
|
|
/**
|
|
* 邮箱验证规则
|
|
*/
|
|
export const emailRules = (t: (key: string) => string, required = false): FormItemRule[] => {
|
|
const rules: FormItemRule[] = []
|
|
|
|
if (required) {
|
|
rules.push({
|
|
required: true,
|
|
message: t('login.validation.emailRequired'),
|
|
trigger: 'blur'
|
|
})
|
|
}
|
|
|
|
rules.push({
|
|
type: 'email',
|
|
message: t('login.validation.emailPattern'),
|
|
trigger: 'blur'
|
|
})
|
|
|
|
return rules
|
|
}
|
|
|
|
/**
|
|
* 验证码验证规则
|
|
*/
|
|
export const captchaRules = (t: (key: string) => string): FormItemRule[] => [
|
|
{
|
|
required: true,
|
|
message: t('login.validation.captchaRequired'),
|
|
trigger: 'blur'
|
|
},
|
|
{
|
|
len: 4,
|
|
message: t('login.validation.captchaLength'),
|
|
trigger: 'blur'
|
|
}
|
|
]
|