From 79521c4807f42fe58b76359e818652d86b00d21d Mon Sep 17 00:00:00 2001 From: zimo493 <2081182432@qq.com> Date: Thu, 7 Aug 2025 12:26:13 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20:bug:=20=E4=BF=AE=E5=A4=8D=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=A4=B4=E5=83=8F=E5=90=8E=E6=B2=A1=E6=9C=89=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=9C=80=E6=96=B0=E7=9A=84=E5=A4=B4=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除在 permission.ts 中的冗余用户信息检查 - 刷新页面确保获取最新的用户信息 - 更新 profile 页面中用户头像的显示逻辑 - 在头像上传成功后同步更新用户信息 #ICRONO --- src/plugins/permission.ts | 8 +++----- src/views/profile/index.vue | 9 ++++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/plugins/permission.ts b/src/plugins/permission.ts index 2890b6df..0493511a 100644 --- a/src/plugins/permission.ts +++ b/src/plugins/permission.ts @@ -35,13 +35,11 @@ export function setupPermission() { const permissionStore = usePermissionStore(); const userStore = useUserStore(); - // 确保用户信息已加载 - if (!userStore.userInfo.username) { - await userStore.getUserInfo(); - } - // 确保动态路由已生成 if (!permissionStore.isDynamicRoutesGenerated) { + /** 先获取最新的用户信息 */ + await userStore.getUserInfo(); + const dynamicRoutes = await permissionStore.generateRoutes(); dynamicRoutes.forEach((route: RouteRecordRaw) => { router.addRoute(route); diff --git a/src/views/profile/index.vue b/src/views/profile/index.vue index 947bb2fe..835db2f8 100644 --- a/src/views/profile/index.vue +++ b/src/views/profile/index.vue @@ -6,7 +6,7 @@
- + ({}); const enum DialogType { @@ -443,12 +446,12 @@ const handleFileChange = async (event: Event) => { // 调用文件上传API try { const data = await FileAPI.uploadFile(file); - // 更新用户头像 - userProfile.value.avatar = data.url; // 更新用户信息 await UserAPI.updateProfile({ avatar: data.url, }); + // 更新用户头像 + userStore.userInfo.avatar = data.url; } catch (error) { console.error("头像上传失败:" + error); ElMessage.error("头像上传失败"); From 1d0fc3119b7709276f57ca1de51cbbb4ff73c921 Mon Sep 17 00:00:00 2001 From: theo <971366405@qq.com> Date: Tue, 12 Aug 2025 10:31:16 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20:bug:=20=E4=BF=AE=E5=A4=8D=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E9=80=89=E4=B8=AD=E6=97=B6=EF=BC=8C=E5=90=8C=E7=BA=A7?= =?UTF-8?q?=E9=9D=9E=E5=8F=B6=E5=AD=90=E8=8F=9C=E5=8D=95=E6=A0=B7=E5=BC=8F?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E4=B8=8D=E5=AF=B9=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复菜单选中时,同级非叶子菜单样式展示不对的问题 --- src/layouts/components/Menu/BasicMenu.vue | 13 ++++++++----- src/layouts/components/Menu/components/MenuItem.vue | 6 +++--- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/layouts/components/Menu/BasicMenu.vue b/src/layouts/components/Menu/BasicMenu.vue index c9ddff26..c98458f7 100644 --- a/src/layouts/components/Menu/BasicMenu.vue +++ b/src/layouts/components/Menu/BasicMenu.vue @@ -121,6 +121,7 @@ function resolveFullPath(routePath: string) { */ const onMenuOpen = (index: string) => { expandedMenuIndexes.value.push(index); + updateParentMenuStyles(); }; /** @@ -130,6 +131,7 @@ const onMenuOpen = (index: string) => { */ const onMenuClose = (index: string) => { expandedMenuIndexes.value = expandedMenuIndexes.value.filter((item) => item !== index); + updateParentMenuStyles(); }; /** @@ -164,9 +166,9 @@ watch( watch( () => currentRoute.path, () => { - nextTick(() => { - updateParentMenuStyles(); - }); + // nextTick(() => { + // updateParentMenuStyles(); + // }); } ); @@ -189,12 +191,13 @@ function updateParentMenuStyles() { // 查找当前激活的菜单项 const activeMenuItem = menuEl.querySelector(".el-menu-item.is-active"); - + console.log("activeMenuItem", activeMenuItem); if (activeMenuItem) { // 向上查找父级 el-sub-menu 元素 let parent = activeMenuItem.parentElement; while (parent && parent !== menuEl) { - if (parent.classList.contains("el-sub-menu")) { + if (parent.classList.contains("el-sub-menu") && parent.classList.contains("is-active")) { + console.log("parent", parent); parent.classList.add("has-active-child"); } parent = parent.parentElement; diff --git a/src/layouts/components/Menu/components/MenuItem.vue b/src/layouts/components/Menu/components/MenuItem.vue index fe7d9377..fc2f9d4a 100644 --- a/src/layouts/components/Menu/components/MenuItem.vue +++ b/src/layouts/components/Menu/components/MenuItem.vue @@ -194,7 +194,7 @@ html.sidebar-color-blue { // 父菜单激活状态样式 - 当子菜单激活时,父菜单显示激活状态 .el-sub-menu { // 当父菜单包含激活子菜单时的样式 - &.has-active-child .el-sub-menu__title { + &.has-active-child > .el-sub-menu__title { color: var(--el-color-primary) !important; background-color: var(--el-color-primary-light-9) !important; @@ -205,7 +205,7 @@ html.sidebar-color-blue { // 深色主题下的父菜单激活状态 html.dark & { - &.has-active-child .el-sub-menu__title { + &.has-active-child > .el-sub-menu__title { color: var(--el-color-primary-light-3) !important; background-color: rgba(64, 128, 255, 0.15) !important; @@ -217,7 +217,7 @@ html.sidebar-color-blue { // 深蓝色侧边栏配色下的父菜单激活状态 html.sidebar-color-blue & { - &.has-active-child .el-sub-menu__title { + &.has-active-child > .el-sub-menu__title { color: var(--el-color-primary-light-3) !important; background-color: rgba(64, 128, 255, 0.2) !important; From 3c010168dfde0e7df7f297c495c5c14de2dace80 Mon Sep 17 00:00:00 2001 From: theo <971366405@qq.com> Date: Tue, 12 Aug 2025 10:54:02 +0800 Subject: [PATCH 3/3] =?UTF-8?q?refactor:=20:recycle:=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E5=88=A0=E9=99=A4=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化逻辑,删除日志输出 --- src/layouts/components/Menu/BasicMenu.vue | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/layouts/components/Menu/BasicMenu.vue b/src/layouts/components/Menu/BasicMenu.vue index c98458f7..1f9be972 100644 --- a/src/layouts/components/Menu/BasicMenu.vue +++ b/src/layouts/components/Menu/BasicMenu.vue @@ -121,7 +121,6 @@ function resolveFullPath(routePath: string) { */ const onMenuOpen = (index: string) => { expandedMenuIndexes.value.push(index); - updateParentMenuStyles(); }; /** @@ -131,9 +130,18 @@ const onMenuOpen = (index: string) => { */ const onMenuClose = (index: string) => { expandedMenuIndexes.value = expandedMenuIndexes.value.filter((item) => item !== index); - updateParentMenuStyles(); }; +/** + * 监听展开的菜单项变化,更新父菜单样式 + */ +watch( + () => expandedMenuIndexes.value, + () => { + updateParentMenuStyles(); + } +); + /** * 监听菜单模式变化:当菜单模式切换为水平模式时,关闭所有展开的菜单项, * 避免在水平模式下菜单项显示错位。 @@ -166,9 +174,9 @@ watch( watch( () => currentRoute.path, () => { - // nextTick(() => { - // updateParentMenuStyles(); - // }); + nextTick(() => { + updateParentMenuStyles(); + }); } ); @@ -191,13 +199,12 @@ function updateParentMenuStyles() { // 查找当前激活的菜单项 const activeMenuItem = menuEl.querySelector(".el-menu-item.is-active"); - console.log("activeMenuItem", activeMenuItem); + if (activeMenuItem) { // 向上查找父级 el-sub-menu 元素 let parent = activeMenuItem.parentElement; while (parent && parent !== menuEl) { - if (parent.classList.contains("el-sub-menu") && parent.classList.contains("is-active")) { - console.log("parent", parent); + if (parent.classList.contains("el-sub-menu")) { parent.classList.add("has-active-child"); } parent = parent.parentElement;