diff --git a/src/layouts/DefaultLayout.vue b/src/layouts/DefaultLayout.vue index 5431307..5ec293a 100644 --- a/src/layouts/DefaultLayout.vue +++ b/src/layouts/DefaultLayout.vue @@ -128,14 +128,21 @@ function openRoleSwitcher(): void { roleSwitcherVisible.value = true } -/** 强制刷新菜单(应用安装/卸载/菜单调整后手动同步侧边栏) */ +/** 强制刷新菜单(应用安装/卸载/菜单调整后手动同步侧边栏) + * 先清 localStorage 缓存(menus/userInfo/roles),再重新拉取用户信息+菜单+管理员状态, + * 一次点击彻底同步,避免旧缓存导致"已安装/未安装"显示错乱。 */ const menuRefreshing = ref(false) async function refreshMenus(): Promise { if (menuRefreshing.value) return menuRefreshing.value = true try { + // 清除本地缓存(user store 内部方法:清内存态 + localStorage) + userStore.reset() + // 重新拉取用户信息、菜单、管理员状态(reset 后 isLoggedIn=false,需重新获取) + await userStore.fetchUserInfo() await userStore.fetchMenus() - ElMessage.success('菜单已刷新') + await userStore.fetchAdminCheck() + ElMessage.success('已清缓存并刷新菜单') } catch { ElMessage.error('菜单刷新失败,请重试') } finally {