From 8d2e17478db150df9cdde358adff072f493bd46b Mon Sep 17 00:00:00 2001 From: 13895237362 <2205451508@qq.com> Date: Wed, 13 Aug 2025 10:16:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E9=A1=B5=E9=9D=A2=E5=BC=95=E7=94=A8?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/common/layout/Layout.vue | 4 --- .../components/common/layout/NavContent.vue | 4 +-- frontend/src/views/Dashboard.vue | 10 ++++-- frontend/src/views/Login.vue | 32 ++++++++++++++----- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/frontend/src/components/common/layout/Layout.vue b/frontend/src/components/common/layout/Layout.vue index 6492262..20fa77e 100644 --- a/frontend/src/components/common/layout/Layout.vue +++ b/frontend/src/components/common/layout/Layout.vue @@ -46,10 +46,6 @@ interface NavItem { children?: NavItem[] } -interface BreadcrumbItem { - title: string - path?: string -} // 组件 Props interface Props { diff --git a/frontend/src/components/common/layout/NavContent.vue b/frontend/src/components/common/layout/NavContent.vue index a367f8b..8cad481 100644 --- a/frontend/src/components/common/layout/NavContent.vue +++ b/frontend/src/components/common/layout/NavContent.vue @@ -101,9 +101,7 @@ interface Props { } // 定义组件属性和默认值 -const props = withDefaults(defineProps(), { - notificationCount: 24 -}) +const { notificationCount = 24 } = defineProps() // 定义组件事件 const emit = defineEmits<{ diff --git a/frontend/src/views/Dashboard.vue b/frontend/src/views/Dashboard.vue index e9275cc..d6079f7 100644 --- a/frontend/src/views/Dashboard.vue +++ b/frontend/src/views/Dashboard.vue @@ -227,9 +227,13 @@ const recentData = [ left: 0; right: 0; bottom: 0; - background: url('/src/assets/dashboard-bg.svg') no-repeat center; - background-size: cover; - opacity: 0.1; + background: linear-gradient(45deg, rgba(255,255,255,0.08) 25%, transparent 25%), + linear-gradient(-45deg, rgba(255,255,255,0.08) 25%, transparent 25%), + linear-gradient(45deg, transparent 75%, rgba(255,255,255,0.08) 75%), + linear-gradient(-45deg, transparent 75%, rgba(255,255,255,0.08) 75%); + background-size: 20px 20px; + background-position: 0 0, 0 10px, 10px -10px, -10px 0px; + opacity: 0.15; border-radius: 8px; } } diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index af5a7ef..ce0b441 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -20,7 +20,7 @@
- + @@ -77,7 +77,7 @@ import { useI18n } from 'vue-i18n'; import { ElMessage, type FormInstance, type FormRules } from 'element-plus'; import { User, Lock } from '@element-plus/icons-vue'; import { Login, type LoginRequest } from "@/api/user"; -import { setI18nLanguage, SupportedLocale } from '@/i18n' +import { changeLanguage, type SupportedLocale } from '@/utils/language' const router = useRouter(); const { t, locale } = useI18n(); @@ -108,11 +108,10 @@ const loginRules: FormRules = { }; // 切换语言 -function changeLanguage(lang: string) { - locale.value = lang; +function handleLanguageChange(lang: string) { + // 使用统一的语言管理器切换语言 + changeLanguage(lang as SupportedLocale); currentLanguage.value = lang; - localStorage.setItem('userLanguage', lang); - setI18nLanguage(lang as SupportedLocale); } onMounted(() => { @@ -148,8 +147,10 @@ async function handleLogin() { }; const response = await Login(loginData); + console.log('登录响应:', response); - if (response.code === 200) { + // 检查响应是否成功 (支持 code 200 或 0) + if (response.code === 200 || response.code === 0) { // 登录成功 if (response.data && response.data.token) { localStorage.setItem("token", response.data.token); @@ -174,7 +175,22 @@ async function handleLogin() { } } catch (error: any) { console.error("登录错误:", error); - ElMessage.error(error.response?.data?.message || t("login.error.general")); + + // 优先使用后端返回的错误信息 + let errorMessage = t("login.error.general"); // 默认错误信息 + + if (error.backendMessage) { + // 使用 axios 拦截器处理过的后端错误信息 + errorMessage = error.backendMessage; + } else if (error.response?.data?.message) { + // 直接从响应中获取后端错误信息 + errorMessage = error.response.data.message; + } else if (error.message && error.message !== "Error") { + // 使用错误对象的消息(避免显示通用的 "Error") + errorMessage = error.message; + } + + ElMessage.error(errorMessage); } finally { loading.value = false; }