From 4122571f86f385596f68cc1c944dd3294dc185f6 Mon Sep 17 00:00:00 2001 From: TradeMate Dev Date: Sat, 30 May 2026 09:06:01 +0800 Subject: [PATCH] fix: friendly Chinese error messages on login/register pages Map backend English error details to user-facing Chinese text on all 3 frontends (uni-app, user-frontend, admin-frontend). Previously raw English like 'Invalid credentials' was shown directly to users. --- admin-frontend/src/views/Landing.vue | 3 ++- admin-frontend/src/views/Login.vue | 3 ++- uni-app/src/pages/login/login.vue | 10 +++++++--- user-frontend/src/views/WorkspaceLanding.vue | 6 ++++-- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/admin-frontend/src/views/Landing.vue b/admin-frontend/src/views/Landing.vue index 492c42e..3dc6c62 100644 --- a/admin-frontend/src/views/Landing.vue +++ b/admin-frontend/src/views/Landing.vue @@ -90,7 +90,8 @@ async function submit() { localStorage.setItem('admin_user', JSON.stringify(res.user || {})) ElMessage.success('登录成功') } catch (e) { - error.value = e?.detail || '登录失败' + const map = { 'Invalid credentials': '用户名或密码错误' } + error.value = map[e?.detail] || e?.detail || '登录失败' } finally { loading.value = false } diff --git a/admin-frontend/src/views/Login.vue b/admin-frontend/src/views/Login.vue index 0df6066..5700052 100644 --- a/admin-frontend/src/views/Login.vue +++ b/admin-frontend/src/views/Login.vue @@ -43,7 +43,8 @@ async function submit() { const redirect = route.query.redirect || '/dashboard' router.push(redirect) } catch (e) { - error.value = e?.detail || '登录失败' + const map = { 'Invalid credentials': '用户名或密码错误' } + error.value = map[e?.detail] || e?.detail || '登录失败' } finally { loading.value = false } diff --git a/uni-app/src/pages/login/login.vue b/uni-app/src/pages/login/login.vue index 533d2bb..dfa5eb4 100644 --- a/uni-app/src/pages/login/login.vue +++ b/uni-app/src/pages/login/login.vue @@ -229,10 +229,14 @@ const handleSubmit = async () => { } } catch (err) { console.error('登录失败', err) - error.value = (err.errMsg || err.message || '操作失败,请重试') - if (err.statusCode === 401) { - error.value = '手机号或密码错误' + const msg = err.errMsg || err.message || err.detail || '' + const map = { + 'Invalid credentials': '手机号或密码错误', + 'Phone already registered': '该手机号已被注册', + 'Invalid refresh token': '登录已过期,请重新登录', + 'phone required': '请输入手机号', } + error.value = map[msg] || msg || '操作失败,请重试' } finally { loading.value = false } diff --git a/user-frontend/src/views/WorkspaceLanding.vue b/user-frontend/src/views/WorkspaceLanding.vue index 05db10c..a1fc044 100644 --- a/user-frontend/src/views/WorkspaceLanding.vue +++ b/user-frontend/src/views/WorkspaceLanding.vue @@ -172,7 +172,8 @@ async function submit() { const redirect = route.query.redirect || '/workspace' router.push(redirect) } catch (e) { - error.value = e?.detail || '登录失败' + const map = { 'Invalid credentials': '手机号或密码错误', 'Invalid refresh token': '登录已过期,请重新登录', 'phone required': '请输入手机号' } + error.value = map[e?.detail] || e?.detail || '登录失败' } finally { loading.value = false } @@ -191,7 +192,8 @@ async function register() { regForm.phone = '' regForm.password = '' } catch (e) { - regError.value = e?.detail || '注册失败' + const map = { 'Phone already registered': '该手机号已被注册', 'Invalid credentials': '手机号或密码错误' } + regError.value = map[e?.detail] || e?.detail || '注册失败' } finally { regLoading.value = false }