diff --git a/src/pages/System/User/components/ResetPwd.tsx b/src/pages/System/User/components/ResetPwd.tsx index 5523cd6..fb253d2 100644 --- a/src/pages/System/User/components/ResetPwd.tsx +++ b/src/pages/System/User/components/ResetPwd.tsx @@ -35,12 +35,42 @@ const UpdateForm: React.FC = (props) => { props.onSubmit({ ...values, userId } as FormValueType); }; - const checkPassword = (rule: any, value: string) => { - if (value === loginPassword) { - // 校验条件自定义 - return Promise.resolve(); + // 密码强度校验 + const validatePasswordStrength = (rule: any, value: string) => { + if (!value) { + return Promise.reject(new Error('登录密码不可为空。')); } - return Promise.reject(new Error('两次密码输入不一致')); + + if (value.length < 8) { + return Promise.reject(new Error('密码长度至少8位。')); + } + + // 检查密码复杂度:至少包含大小写字母、数字、特殊字符中的三种 + const hasLowerCase = /[a-z]/.test(value); + const hasUpperCase = /[A-Z]/.test(value); + const hasNumber = /[0-9]/.test(value); + const hasSpecialChar = /[!@#$%^&*()_+\-=[\]{};':"\\|,.<>/?]/.test(value); + + const complexityCount = [hasLowerCase, hasUpperCase, hasNumber, hasSpecialChar].filter(Boolean).length; + + if (complexityCount < 3) { + return Promise.reject(new Error('密码需包含大小写字母、数字、特殊字符中的至少三种。')); + } + + return Promise.resolve(); + }; + + // 确认密码校验 + const checkPassword = (rule: any, value: string) => { + if (!value) { + return Promise.reject(new Error('确认密码不可为空。')); + } + + if (value !== loginPassword) { + return Promise.reject(new Error('两次密码输入不一致')); + } + + return Promise.resolve(); }; return ( @@ -71,25 +101,24 @@ const UpdateForm: React.FC = (props) => { label="登录密码" rules={[ { - required: true, - message: '登录密码不可为空。', + validator: validatePasswordStrength, }, ]} + placeholder="请输入新密码" /> ); }; -export default UpdateForm; +export default UpdateForm; \ No newline at end of file diff --git a/src/services/system/user.ts b/src/services/system/user.ts index 637f305..505eedb 100644 --- a/src/services/system/user.ts +++ b/src/services/system/user.ts @@ -100,6 +100,7 @@ export function resetUserPwd(userId: number, password: string) { return request('/api/system/user/resetPwd', { method: 'put', data: data, + isEncrypt: true, }); }