Initial commit: One Pipe System

完整的管理系统,包含账户管理、卡片管理、套餐管理、财务管理等功能模块。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
sexygoat
2026-01-22 16:35:33 +08:00
commit 222e5bb11a
495 changed files with 145440 additions and 0 deletions

View File

@@ -0,0 +1,172 @@
/**
* 登录表单验证规则
*/
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'
}
]