From b28df4950834212652e1c9527ad4be1078eec771 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BA=84=E9=94=90=E6=B3=A2?= <10549902+zhuangruibo@user.noreply.gitee.com> Date: Tue, 9 Jun 2026 11:18:42 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=91=E7=9D=A3=E7=AB=AF-=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/layout/components/Navbar.vue | 27 +++--- .../zdxt-admin-plus-ui/src/router/index.ts | 1 + .../src/store/modules/permission.ts | 21 ++++- .../src/store/modules/user.ts | 13 ++- .../zdxt-admin-plus-ui/src/utils/request.ts | 17 ++-- .../zdxt-admin-plus-ui/src/views/index.vue | 85 +------------------ .../web/controller/AuthController.java | 14 +-- 7 files changed, 63 insertions(+), 115 deletions(-) diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/layout/components/Navbar.vue b/zdxt-web-client/zdxt-admin-plus-ui/src/layout/components/Navbar.vue index 36ee42c3..bb854856 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/layout/components/Navbar.vue +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/layout/components/Navbar.vue @@ -19,7 +19,7 @@ - - + --> - + - +
@@ -192,14 +192,13 @@ const logout = async () => { cancelButtonText: '取消', type: 'warning' } as ElMessageBoxOptions); - userStore.logout().then(() => { - router.replace({ - path: '/login', - query: { - redirect: encodeURIComponent(router.currentRoute.value.fullPath || '/') - } - }); - proxy?.$tab.closeAllPage(); + await userStore.logout(); + proxy?.$tab.closeAllPage(); + router.replace({ + path: '/login', + query: { + redirect: encodeURIComponent(router.currentRoute.value.fullPath || '/') + } }); }; diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/router/index.ts b/zdxt-web-client/zdxt-admin-plus-ui/src/router/index.ts index f91fdae3..8297e710 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/router/index.ts +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/router/index.ts @@ -61,6 +61,7 @@ export const constantRoutes: RouteRecordRaw[] = [ path: '', component: Layout, redirect: '/index', + hidden: true, children: [ { path: '/index', diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/permission.ts b/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/permission.ts index 9c2c0147..b2a88dc4 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/permission.ts +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/permission.ts @@ -194,6 +194,24 @@ export const usePermissionStore = defineStore('permission', () => { console.log('[路由调试] switchSystemCode 完成, 当前路由列表 =', router.getRoutes().map((r) => ({ name: r.name, path: r.path }))); }; + /** + * 清理路由缓存并重置系统码到首页,用于切换账号登录时 + */ + const cleanRouteCache = () => { + allRouteDataCache.value = []; + routes.value = []; + addRoutes.value = []; + defaultRoutes.value = []; + topbarRouters.value = []; + sidebarRouters.value = []; + // 重置到首页 + currentSystemCode.value = 'planindex'; + sessionStorage.setItem(SYSTEM_CODE_KEY, 'planindex'); + const defaultOption = systemCodeOptions.find((o) => o.value === 'planindex'); + iframeMode.value = defaultOption?.iframeUrl ? true : false; + iframeUrl.value = defaultOption?.iframeUrl || ''; + }; + return { routes, topbarRouters, @@ -211,7 +229,8 @@ export const usePermissionStore = defineStore('permission', () => { setRoutes, generateRoutes, setSidebarRouters, - switchSystemCode + switchSystemCode, + cleanRouteCache }; }); diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/user.ts b/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/user.ts index b714d032..65148873 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/user.ts +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/store/modules/user.ts @@ -5,6 +5,7 @@ import { LoginData } from '@/api/types'; import defAva from '@/assets/images/profile.jpg'; import { defineStore } from 'pinia'; import { ref } from 'vue'; +import { usePermissionStore } from '@/store/modules/permission'; export const useUserStore = defineStore('user', () => { const token = ref(getToken()); @@ -27,6 +28,10 @@ export const useUserStore = defineStore('user', () => { const data = res.data; setToken(data.access_token); token.value = data.access_token; + // 重置用户状态和路由缓存,确保切换账号后重新加载菜单 + roles.value = []; + permissions.value = []; + usePermissionStore().cleanRouteCache(); return Promise.resolve(); } return Promise.reject(err); @@ -59,11 +64,17 @@ export const useUserStore = defineStore('user', () => { // 注销 const logout = async (): Promise => { - await logoutApi(); + try { + await logoutApi(); + } catch (e) { + // 即使后端注销接口失败(如token已过期),也要继续清理本地状态 + console.warn('logoutApi 调用失败,继续清理本地状态', e); + } token.value = ''; roles.value = []; permissions.value = []; removeToken(); + usePermissionStore().cleanRouteCache(); }; const setAvatar = (value: string) => { diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/utils/request.ts b/zdxt-web-client/zdxt-admin-plus-ui/src/utils/request.ts index cd16fb16..7bdfbb16 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/utils/request.ts +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/utils/request.ts @@ -136,16 +136,15 @@ service.interceptors.response.use( confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' - }).then(() => { + }).then(async () => { isRelogin.show = false; - useUserStore().logout().then(() => { - router.replace({ - path: '/login', - query: { - redirect: encodeURIComponent(router.currentRoute.value.fullPath || '/') - } - }) - }); + await useUserStore().logout(); + router.replace({ + path: '/login', + query: { + redirect: encodeURIComponent(router.currentRoute.value.fullPath || '/') + } + }) }).catch(() => { isRelogin.show = false; }); diff --git a/zdxt-web-client/zdxt-admin-plus-ui/src/views/index.vue b/zdxt-web-client/zdxt-admin-plus-ui/src/views/index.vue index cff8a3b5..70330564 100644 --- a/zdxt-web-client/zdxt-admin-plus-ui/src/views/index.vue +++ b/zdxt-web-client/zdxt-admin-plus-ui/src/views/index.vue @@ -2,92 +2,11 @@
-

zdxt-Vue-Plus多租户管理系统

-

- zdxt-Vue-Plus 是基于 zdxt-Vue 针对 分布式集群 场景升级(不兼容原框架) -
- * 前端开发框架 Vue3、TS、Element Plus
- * 后端开发框架 Spring Boot
- * 容器框架 Undertow 基于 Netty 的高性能容器
- * 权限认证框架 Sa-Token 支持多终端认证系统
- * 关系数据库 MySQL 适配 8.X 最低 5.7
- * 缓存数据库 Redis 适配 6.X 最低 4.X
- * 数据库框架 Mybatis-Plus 快速 CRUD 增加开发效率
- * 数据库框架 p6spy 更强劲的 SQL 分析
- * 多数据源框架 dynamic-datasource 支持主从与多种类数据库异构
- * 序列化框架 Jackson 统一使用 jackson 高效可靠
- * Redis客户端 Redisson 性能强劲、API丰富
- * 分布式限流 Redisson 全局、请求IP、集群ID 多种限流
- * 分布式锁 Lock4j 注解锁、工具锁 多种多样
- * 分布式幂等 Lock4j 基于分布式锁实现
- * 分布式链路追踪 SkyWalking 支持链路追踪、网格分析、度量聚合、可视化
- * 分布式任务调度 SnailJob 高性能 高可靠 易扩展
- * 文件存储 Minio 本地存储
- * 文件存储 七牛、阿里、腾讯 云存储
- * 监控框架 SpringBoot-Admin 全方位服务监控
- * 校验框架 Validation 增强接口安全性 严谨性
- * Excel框架 FastExcel(原Alibaba EasyExcel) 性能优异 扩展性强
- * 文档框架 SpringDoc、javadoc 无注解零入侵基于java注释
- * 工具类框架 Hutool、Lombok 减少代码冗余 增加安全性
- * 代码生成器 适配MP、SpringDoc规范化代码 一键生成前后端代码
- * 部署方式 Docker 容器编排 一键部署业务集群
- * 国际化 SpringMessage Spring标准国际化方案
-

-

当前版本: v5.5.3

-

- ¥免费开源 -

-

- 访问码云 - 访问GitHub - 更新日志 -

+
-

zdxt-Cloud-Plus多租户微服务管理系统

-

- zdxt-Cloud-Plus 微服务通用权限管理系统 重写 zdxt-Cloud 全方位升级(不兼容原框架) -
- * 前端开发框架 Vue3、TS、Element UI
- * 后端开发框架 Spring Boot
- * 微服务开发框架 Spring Cloud、Spring Cloud Alibaba
- * 容器框架 Undertow 基于 XNIO 的高性能容器
- * 权限认证框架 Sa-Token、Jwt 支持多终端认证系统
- * 关系数据库 MySQL 适配 8.X 最低 5.7
- * 关系数据库 Oracle 适配 11g 12c
- * 关系数据库 PostgreSQL 适配 13 14
- * 关系数据库 SQLServer 适配 2017 2019
- * 缓存数据库 Redis 适配 6.X 最低 5.X
- * 分布式注册中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能
- * 分布式配置中心 Alibaba Nacos 采用2.X 基于GRPC通信高性能
- * 服务网关 Spring Cloud Gateway 响应式高性能网关
- * 负载均衡 Spring Cloud Loadbalancer 负载均衡处理
- * RPC远程调用 Apache Dubbo 原生态使用体验、高性能
- * 分布式限流熔断 Alibaba Sentinel 无侵入、高扩展
- * 分布式事务 Alibaba Seata 无侵入、高扩展 支持 四种模式
- * 分布式消息队列 Apache Kafka 高性能高速度
- * 分布式消息队列 Apache RocketMQ 高可用功能多样
- * 分布式消息队列 RabbitMQ 支持各种扩展插件功能多样性
- * 分布式搜索引擎 ElasticSearch 业界知名
- * 分布式链路追踪 Apache SkyWalking 链路追踪、网格分析、度量聚合、可视化
- * 分布式日志中心 ELK 业界成熟解决方案
- * 分布式监控 Prometheus、Grafana 全方位性能监控
- * 其余与 Vue 版本一致
-

-

当前版本: v2.5.3

-

- ¥免费开源 -

-

- 访问码云 - 访问GitHub - 更新日志 -

+
diff --git a/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/controller/AuthController.java b/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/controller/AuthController.java index c9c68dbe..312c4ebe 100644 --- a/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/controller/AuthController.java +++ b/zdxt-web-server/zdxt-admin-web-server/src/main/java/org/dromara/web/controller/AuthController.java @@ -105,13 +105,13 @@ public class AuthController { // 登录 LoginVo loginVo = IAuthStrategy.login(body, client, grantType); - Long userId = LoginHelper.getUserId(); - scheduledExecutorService.schedule(() -> { - SseMessageDto dto = new SseMessageDto(); - dto.setMessage(DateUtils.getTodayHour(new Date()) + "好,欢迎登录 zdxt-Vue-Plus 后台管理系统"); - dto.setUserIds(List.of(userId)); - SseMessageUtils.publishMessage(dto); - }, 5, TimeUnit.SECONDS); +// Long userId = LoginHelper.getUserId(); +// scheduledExecutorService.schedule(() -> { +// SseMessageDto dto = new SseMessageDto(); +// dto.setMessage(DateUtils.getTodayHour(new Date()) + "好,欢迎登录 zdxt-Vue-Plus 后台管理系统"); +// dto.setUserIds(List.of(userId)); +// SseMessageUtils.publishMessage(dto); +// }, 5, TimeUnit.SECONDS); LoginUser loginUser = LoginHelper.getLoginUser(); System.out.println(JsonUtils.toJsonString(loginUser));