From e6543185ab894db2534735b0a5e8d049e9fb6723 Mon Sep 17 00:00:00 2001 From: bin <719488417@qq.com> Date: Fri, 28 Nov 2025 17:49:29 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E7=BD=AE=E5=AF=86=E7=A0=81=E5=BC=BA?= =?UTF-8?q?=E5=BA=A6=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/pages/System/User/components/ResetPwd.tsx | 51 +++++++++++++++---- src/services/system/user.ts | 1 + 2 files changed, 41 insertions(+), 11 deletions(-) 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, }); }