新增登录页图形验证码功能,支持通过Redis全局配置控制验证码的启用状态,优化登录流程以提升用户体验。新增相关API接口和前端配置项,确保验证码逻辑与后端同步。
This commit is contained in:
57
jeecgboot-vue3/src/utils/sys/sysPasswordRules.ts
Normal file
57
jeecgboot-vue3/src/utils/sys/sysPasswordRules.ts
Normal file
@@ -0,0 +1,57 @@
|
||||
/**
|
||||
* 系统登录密码校验:与「低代码开发 → 系统校验规则」中规则编码 sys_login_password 对应,
|
||||
* 服务端 /sys/checkRule/checkByCode 按 ruleJson 校验(多条全局规则顺序执行);库表见 Flyway V3.9.2_1 / V3.9.2_2。
|
||||
*/
|
||||
import type { Rule } from '/@/components/Form/src/types/form';
|
||||
import { validateCheckRule } from '/@/views/system/checkRule/check.rule.api';
|
||||
|
||||
/** 与 sys_check_rule.rule_code 一致,勿随意修改 */
|
||||
export const SYS_LOGIN_PASSWORD_CHECK_RULE_CODE = 'sys_login_password';
|
||||
|
||||
/** 与库中多条规则合并效果一致(规则不存在或接口失败时兜底) */
|
||||
export const SYS_LOGIN_PASSWORD_PATTERN =
|
||||
/^(?=.*[a-zA-Z])(?=.*\d)(?=.*[~!@#$%^&*()_+\-={}[\]:;"'<>,.?/]).{8,}$/;
|
||||
|
||||
export const SYS_LOGIN_PASSWORD_PATTERN_MESSAGE =
|
||||
'密码由 8 位及以上数字、大小写字母和特殊符号组成!';
|
||||
|
||||
export const SYS_LOGIN_PASSWORD_REQUIRED_MESSAGE = '请输入登录密码';
|
||||
|
||||
/** 适用于 FormSchema.rules:必填 + 调用系统校验规则(失败时本地正则兜底) */
|
||||
export function getSysLoginPasswordRules(): Rule[] {
|
||||
return [
|
||||
{
|
||||
required: true,
|
||||
message: SYS_LOGIN_PASSWORD_REQUIRED_MESSAGE,
|
||||
},
|
||||
{
|
||||
async validator(_rule, value: string) {
|
||||
if (value === undefined || value === null || String(value).trim() === '') {
|
||||
return Promise.reject(SYS_LOGIN_PASSWORD_REQUIRED_MESSAGE);
|
||||
}
|
||||
const str = String(value);
|
||||
try {
|
||||
const res = (await validateCheckRule(SYS_LOGIN_PASSWORD_CHECK_RULE_CODE, str)) as {
|
||||
success?: boolean;
|
||||
message?: string;
|
||||
};
|
||||
if (res?.success) {
|
||||
return Promise.resolve();
|
||||
}
|
||||
const msg = String(res?.message || '');
|
||||
if (msg.includes('不存在') || msg.includes('该编码')) {
|
||||
return SYS_LOGIN_PASSWORD_PATTERN.test(str)
|
||||
? Promise.resolve()
|
||||
: Promise.reject(SYS_LOGIN_PASSWORD_PATTERN_MESSAGE);
|
||||
}
|
||||
return Promise.reject(msg || SYS_LOGIN_PASSWORD_PATTERN_MESSAGE);
|
||||
} catch {
|
||||
return SYS_LOGIN_PASSWORD_PATTERN.test(str)
|
||||
? Promise.resolve()
|
||||
: Promise.reject(SYS_LOGIN_PASSWORD_PATTERN_MESSAGE);
|
||||
}
|
||||
},
|
||||
trigger: 'change',
|
||||
},
|
||||
] as Rule[];
|
||||
}
|
||||
Reference in New Issue
Block a user