From b8a58091ad3eb6b34adeb69fd1f70973fb69af70 Mon Sep 17 00:00:00 2001 From: rd <1344903914@qq.com> Date: Mon, 8 Sep 2025 17:19:56 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E9=94=99=E8=AF=AF=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../login/components/login-form/index.vue | 85 ++++++++++++------- .../login/components/register-form/index.vue | 79 +++++++++-------- 2 files changed, 99 insertions(+), 65 deletions(-) diff --git a/src/views/login/components/login-form/index.vue b/src/views/login/components/login-form/index.vue index 77fc2ae..b93d1b3 100644 --- a/src/views/login/components/login-form/index.vue +++ b/src/views/login/components/login-form/index.vue @@ -3,16 +3,22 @@
- +
- + - + +

+ {{ errMsg }} +

- + +

+ {{ errMsg }} +

@@ -134,6 +146,7 @@ const selectAccountModalRef = ref(null); const accounts = ref([]); const activeKey = ref('1'); const isLegalMobile = ref(false); +const errMsg = ref(''); const loginForm = reactive({ mobile: '', @@ -149,9 +162,9 @@ const formRules = { validator: (_rule: any, value: string) => { if (!value) { isLegalMobile.value = false; - return Promise.reject('手机号不能为空'); + // return Promise.reject('手机号不能为空'); } - if (!/^1[3-9]\d{9}$/.test(value)) { + if (value && !/^1[3-9]\d{9}$/.test(value)) { isLegalMobile.value = false; return Promise.reject('手机号格式不正确'); } else { @@ -164,33 +177,33 @@ const formRules = { ], password: [ { - required: true, - validator: (_rule: any, value: string) => { - if (!value) { - return Promise.reject('请输入密码'); - } - if (value.length < 6) { - return Promise.reject('密码长度不能小于6位'); - } - return Promise.resolve(); - }, - trigger: ['blur'], + // required: true, + // validator: (_rule: any, value: string) => { + // if (!value) { + // return Promise.reject('请输入密码'); + // } + // if (value.length < 6) { + // return Promise.reject('密码长度不能小于6位'); + // } + // return Promise.resolve(); + // }, + // trigger: ['blur'], }, ], captcha: [ { - required: true, - validator: (_rule: any, value: string) => { - if (!value) { - return Promise.reject('请输入验证码'); - } - if (!/^\d{6}$/.test(value)) { - return Promise.reject('验证码必须是6位数字'); - } else { - return Promise.resolve(); - } - }, - trigger: ['blur'], + // required: true, + // validator: (_rule: any, value: string) => { + // if (!value) { + // return Promise.reject('请输入验证码'); + // } + // if (!/^\d{6}$/.test(value)) { + // return Promise.reject('验证码必须是6位数字'); + // } else { + // return Promise.resolve(); + // } + // }, + // trigger: ['blur'], }, ], }; @@ -202,6 +215,10 @@ const canGetCaptcha = computed(() => { return isLegalMobile.value && countdown.value === 0; }); +const clearErrorMsg = () => { + errMsg.value = ''; +}; + const disabledSubmitBtn = computed(() => { if (isCaptchaLogin.value) { return !hasCheck.value || !isLegalMobile.value || !loginForm.captcha.trim() || !/^\d{6}$/.test(loginForm.captcha); @@ -243,6 +260,10 @@ const handleVerificationSubmit = async () => { } }; +const onTabChange = () => { + errMsg.value = ''; +}; + // 获取用户信息 const getProfileInfo = async () => { const { code, data } = await fetchProfileInfo(); @@ -280,7 +301,7 @@ const handleSubmit = async () => { submitting.value = true; const _fn = isCaptchaLogin.value ? fetchAuthorizationsCaptcha : postLoginPassword; - const { code, data } = await _fn(loginForm); + const { code, data, message: errorInfo } = await _fn(loginForm); if (code === 200) { // 处理登录成功逻辑 @@ -298,7 +319,9 @@ const handleSubmit = async () => { getProfileInfo(); } } catch (error) { - // 错误信息会显示在输入框下方 + if (error?.status === 400) { + errMsg.value = error.data?.message; + } } finally { submitting.value = false; } diff --git a/src/views/login/components/register-form/index.vue b/src/views/login/components/register-form/index.vue index 3035cb2..381be4e 100644 --- a/src/views/login/components/register-form/index.vue +++ b/src/views/login/components/register-form/index.vue @@ -10,24 +10,30 @@
- + - + - + - +