用户密码支持自定义配置规则

This commit is contained in:
RuoYi
2026-04-17 14:48:04 +08:00
parent 91185005ce
commit 8c49d541ba
7 changed files with 126 additions and 52 deletions

View File

@@ -0,0 +1,71 @@
/**
* 密码强度规则
* 根据参数 chrtype 动态生成校验规则
*
* chrtype 说明:
* 0 - 任意字符(默认)
* 1 - 纯数字0-9
* 2 - 纯字母a-z / A-Z
* 3 - 字母 + 数字(必须同时包含)
* 4 - 字母 + 数字 + 特殊字符(必须同时包含,特殊字符:~!@#$%^&*()-=_+
*/
import cache from '@/plugins/cache'
// 各类型对应的正则、错误提示
const PWD_RULES = {
'0': { pattern: /^[^<>"'|\\]+$/, message: '密码不能包含非法字符:< > " \' \\ |' },
'1': { pattern: /^[0-9]+$/, message: '密码只能为数字0-9' },
'2': { pattern: /^[a-zA-Z]+$/, message: '密码只能为英文字母a-z、A-Z' },
'3': { pattern: /^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$/, message: '密码必须同时包含字母和数字' },
'4': { pattern: /^(?=.*[A-Za-z])(?=.*\d)(?=.*[~!@#$%^&*()\-=_+])[A-Za-z\d~!@#$%^&*()\-=_+]+$/, message: '密码必须同时包含字母、数字和特殊字符(~!@#$%^&*()-=_+' }
}
export default {
data() {
return {
// 密码限制类型
pwdChrType: cache.session.get('pwrChrtype') || '0'
}
},
computed: {
// 默认密码校验
pwdValidator() {
const rule = PWD_RULES[this.pwdChrType] || PWD_RULES['0']
return [
{ required: true, message: '密码不能为空', trigger: 'blur' },
{ min: 6, max: 20, message: '密码长度必须介于 6 和 20 之间', trigger: 'blur' },
{ pattern: rule.pattern, message: rule.message, trigger: 'blur' }
]
},
// 校验prompt的inputValidator函数
pwdPromptValidator() {
const rule = PWD_RULES['0']
return (value) => {
if (!value || value.length < 6 || value.length > 20) {
return '密码长度必须介于 6 和 20 之间'
}
if (!rule.pattern.test(value)) {
return rule.message
}
}
},
// 个人中心密码校验
infoPwdValidator() {
const rule = PWD_RULES[this.pwdChrType] || PWD_RULES['0']
return [
{ required: true, message: '新密码不能为空', trigger: 'blur' },
{ min: 6, max: 20, message: '新密码长度必须介于 6 和 20 之间', trigger: 'blur' },
{ pattern: rule.pattern, message: rule.message, trigger: 'blur' }
]
},
// 注册页面密码校验
registerPwdValidator() {
const rule = PWD_RULES['0']
return [
{ required: true, message: '请输入您的密码', trigger: 'blur' },
{ min: 6, max: 20, message: '用户密码长度必须介于 6 和 20 之间', trigger: 'blur' },
{ pattern: rule.pattern, message: rule.message, trigger: 'blur' }
]
}
}
}