feat(users): 统一员工密码策略并修复新增员工表单残留

This commit is contained in:
yelan
2026-09-30 09:58:15 +08:00
parent 0db94b22bf
commit 3ad95cc795
4 changed files with 143 additions and 17 deletions
+54
View File
@@ -0,0 +1,54 @@
/**
* 员工账号密码策略。
*
* 组织架构的「新增员工」与「重置密码」共用同一套规则,
* 避免两处各写一份导致口径分叉:长度不少于 12 位,且同时包含大写和小写字母。
*/
/** 密码最小长度 */
export const PASSWORD_MIN_LENGTH = 12
export interface PasswordPolicyChecks {
/** 长度是否达到最小值 */
minLength: boolean
/** 是否包含大写字母 */
hasUppercase: boolean
/** 是否包含小写字母 */
hasLowercase: boolean
}
export interface PasswordPolicyRule {
key: keyof PasswordPolicyChecks
label: string
}
/** 规则清单,供表单实时展示校验进度(顺序即提示顺序) */
export const PASSWORD_POLICY_RULES: PasswordPolicyRule[] = [
{ key: 'minLength', label: `长度不少于 ${PASSWORD_MIN_LENGTH} 位` },
{ key: 'hasUppercase', label: '包含大写字母 A-Z' },
{ key: 'hasLowercase', label: '包含小写字母 a-z' },
]
/** 逐条计算密码是否满足策略,返回每个规则的通过情况 */
export function checkPasswordPolicy(password: string): PasswordPolicyChecks {
return {
minLength: password.length >= PASSWORD_MIN_LENGTH,
hasUppercase: /[A-Z]/.test(password),
hasLowercase: /[a-z]/.test(password),
}
}
/** 密码是否完全满足策略 */
export function isPasswordPolicySatisfied(password: string): boolean {
const checks = checkPasswordPolicy(password)
return checks.minLength && checks.hasUppercase && checks.hasLowercase
}
/** 返回第一条未满足的规则提示,全部满足时返回 null */
export function firstPasswordPolicyIssue(password: string): string | null {
if (!password) return '请输入密码'
const checks = checkPasswordPolicy(password)
if (!checks.minLength) return `密码长度不少于 ${PASSWORD_MIN_LENGTH} 位`
if (!checks.hasUppercase || !checks.hasLowercase) return '密码必须同时包含大写和小写字母'
return null
}