From dc65dfc382d5db0866d3f901236203614f1a56c0 Mon Sep 17 00:00:00 2001 From: MSuMshk <2039814060@qq.com> Date: Fri, 6 Feb 2026 16:18:05 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E8=AE=B0=E4=BD=8F=E8=B4=A6=E5=8F=B7=E5=92=8C=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common-ui/src/ui/authentication/login.vue | 56 ++++++++++++++++--- .../src/langs/en-US/authentication.json | 2 +- .../src/langs/zh-CN/authentication.json | 2 +- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/packages/effects/common-ui/src/ui/authentication/login.vue b/packages/effects/common-ui/src/ui/authentication/login.vue index 34b4d81..62eab82 100644 --- a/packages/effects/common-ui/src/ui/authentication/login.vue +++ b/packages/effects/common-ui/src/ui/authentication/login.vue @@ -59,19 +59,58 @@ const [Form, formApi] = useVbenForm( const router = useRouter(); const REMEMBER_ME_KEY = `REMEMBER_ME_ACCOUNT_${location.hostname}`; +interface RememberMeLoginData { + account: string; + password: string; +} -const localAccount = localStorage.getItem(REMEMBER_ME_KEY) || ''; +function getRememberMeLoginData(): null | RememberMeLoginData { + const localValue = localStorage.getItem(REMEMBER_ME_KEY); + if (!localValue) { + return null; + } -const rememberMe = ref(!!localAccount); + try { + const parsedValue = JSON.parse(localValue) as Partial; + if ( + typeof parsedValue.account === 'string' && + typeof parsedValue.password === 'string' + ) { + return { + account: parsedValue.account, + password: parsedValue.password, + }; + } + } catch { + return { + account: localValue, + password: '', + }; + } + + return null; +} + +const localLoginData = getRememberMeLoginData(); + +const rememberMe = ref(!!localLoginData?.account); async function handleSubmit() { const { valid } = await formApi.validate(); const values = await formApi.getValues(); if (valid) { - localStorage.setItem( - REMEMBER_ME_KEY, - rememberMe.value ? values?.account : '', - ); + if (rememberMe.value) { + localStorage.setItem( + REMEMBER_ME_KEY, + JSON.stringify({ + account: `${values?.account ?? ''}`, + password: `${values?.password ?? ''}`, + }), + ); + } else { + localStorage.removeItem(REMEMBER_ME_KEY); + } + emit('submit', values); } } @@ -81,8 +120,9 @@ function handleGo(path: string) { } onMounted(() => { - if (localAccount) { - formApi.setFieldValue('account', localAccount); + if (localLoginData?.account) { + formApi.setFieldValue('account', localLoginData.account); + formApi.setFieldValue('password', localLoginData.password); } }); diff --git a/packages/locales/src/langs/en-US/authentication.json b/packages/locales/src/langs/en-US/authentication.json index 7dd3462..87fe068 100644 --- a/packages/locales/src/langs/en-US/authentication.json +++ b/packages/locales/src/langs/en-US/authentication.json @@ -12,7 +12,7 @@ "passwordErrorTip": "Password is incorrect", "passwordTip": "Please enter password", "verifyRequiredTip": "Please complete the verification first", - "rememberMe": "Remember Me", + "rememberMe": "Remember Account and Password", "createAnAccount": "Create an Account", "createAccount": "Create Account", "alreadyHaveAccount": "Already have an account?", diff --git a/packages/locales/src/langs/zh-CN/authentication.json b/packages/locales/src/langs/zh-CN/authentication.json index ade52ac..8b2ea28 100644 --- a/packages/locales/src/langs/zh-CN/authentication.json +++ b/packages/locales/src/langs/zh-CN/authentication.json @@ -12,7 +12,7 @@ "passwordTip": "请输入密码", "verifyRequiredTip": "请先完成验证", "passwordErrorTip": "密码错误", - "rememberMe": "记住账号", + "rememberMe": "记住账号和密码", "createAnAccount": "创建一个账号", "createAccount": "创建账号", "alreadyHaveAccount": "已经有账号了?",