diff --git a/src/layouts/components/Menu/BasicMenu.vue b/src/layouts/components/Menu/BasicMenu.vue index c9ddff26..1f9be972 100644 --- a/src/layouts/components/Menu/BasicMenu.vue +++ b/src/layouts/components/Menu/BasicMenu.vue @@ -132,6 +132,16 @@ const onMenuClose = (index: string) => { expandedMenuIndexes.value = expandedMenuIndexes.value.filter((item) => item !== index); }; +/** + * 监听展开的菜单项变化,更新父菜单样式 + */ +watch( + () => expandedMenuIndexes.value, + () => { + updateParentMenuStyles(); + } +); + /** * 监听菜单模式变化:当菜单模式切换为水平模式时,关闭所有展开的菜单项, * 避免在水平模式下菜单项显示错位。 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; 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("头像上传失败");