From 2746fe4ce92ba81b7950a54aae1185eae9034965 Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Thu, 13 Aug 2026 08:22:16 +0800 Subject: [PATCH] =?UTF-8?q?feat(app):=20=E4=BE=A7=E8=BE=B9=E6=A0=8F?= =?UTF-8?q?=E5=88=B7=E6=96=B0=E6=8C=89=E9=92=AE=E5=8D=87=E7=BA=A7=E4=B8=BA?= =?UTF-8?q?=E6=B8=85=E7=BC=93=E5=AD=98+=E5=85=A8=E9=87=8F=E9=87=8D?= =?UTF-8?q?=E6=8B=89=EF=BC=88=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF/?= =?UTF-8?q?=E8=8F=9C=E5=8D=95/=E7=AE=A1=E7=90=86=E5=91=98=E7=8A=B6?= =?UTF-8?q?=E6=80=81=EF=BC=89=EF=BC=8C=E9=81=BF=E5=85=8D=E6=97=A7=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E5=AF=BC=E8=87=B4=E5=AE=89=E8=A3=85=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E6=98=BE=E7=A4=BA=E9=94=99=E4=B9=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/layouts/DefaultLayout.vue | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 {