diff --git a/apps/desktop-client/src/renderer/composables/useDesktopSession.ts b/apps/desktop-client/src/renderer/composables/useDesktopSession.ts index c9f5476..5569513 100644 --- a/apps/desktop-client/src/renderer/composables/useDesktopSession.ts +++ b/apps/desktop-client/src/renderer/composables/useDesktopSession.ts @@ -391,10 +391,23 @@ function formatLoginError(err: unknown): string { login_in_progress: '登录请求正在处理中', login_guard_unavailable: '登录保护暂时不可用', } - const message = messages[err.message] ?? err.message.replaceAll('_', ' ') - return err.detail ? `${message},${err.detail}` : message + if (err.message in messages) { + const message = messages[err.message]! + return err.message === 'login_locked' && err.detail ? `${message},${err.detail}` : message + } + if (err.status === 404) return '登录接口不存在,请确认服务器地址' + if (err.status && err.status >= 500) return '服务器内部错误,请稍后重试' + if (err.status && err.status >= 400) return '请求被服务器拒绝,请检查账号信息' + if (!err.status) return '网络连接失败,请检查服务器地址或网络' + return err.message.replaceAll('_', ' ') } - return err instanceof Error ? err.message : '登录失败,请稍后重试' + if (err instanceof Error) { + const msg = err.message + if (msg.includes('Invalid URL') || msg.includes('Failed to construct')) { + return '服务器地址无效,请检查网关 API 地址设置' + } + } + return '登录失败,请稍后重试' } async function performLogin(payload: LoginRequest): Promise { diff --git a/apps/desktop-client/src/renderer/views/LoginView.vue b/apps/desktop-client/src/renderer/views/LoginView.vue index 769e616..3a5fc00 100644 --- a/apps/desktop-client/src/renderer/views/LoginView.vue +++ b/apps/desktop-client/src/renderer/views/LoginView.vue @@ -1,11 +1,12 @@ @@ -122,14 +156,25 @@ onBeforeUnmount(() => { /> -
+
+
@@ -139,11 +184,11 @@ onBeforeUnmount(() => {
- -

{{ error }}

+

{{ displayError }}

@@ -171,7 +216,6 @@ onBeforeUnmount(() => { spellcheck="false" /> -

修改后对本机下次登录生效。