From 41c6aa91478ced9f3eeac98563c1500cdd1cfa6f Mon Sep 17 00:00:00 2001
From: YunaiV <zhijiantianya@gmail.com>
Date: Tue, 15 Feb 2022 20:42:41 +0800
Subject: [PATCH] =?UTF-8?q?v3.5.0=20=E5=85=BC=E5=AE=B9=E9=A1=B6=E9=83=A8?=
 =?UTF-8?q?=E6=A0=8F=E4=B8=80=E7=BA=A7=E8=8F=9C=E5=8D=95=E5=86=85=E9=83=A8?=
 =?UTF-8?q?=E8=B7=B3=E8=BD=AC?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/components/TopNav/index.vue           | 40 +++++++++++++------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/yudao-ui-admin/src/components/TopNav/index.vue b/yudao-ui-admin/src/components/TopNav/index.vue
index 2764c55cc..0b22db8e1 100644
--- a/yudao-ui-admin/src/components/TopNav/index.vue
+++ b/yudao-ui-admin/src/components/TopNav/index.vue
@@ -30,9 +30,6 @@
 <script>
 import { constantRoutes } from "@/router";
 
-// 不需要激活的路由
-const noactiveList = ["/user/profile", "/dict/type", "/gen/edit", "/job/log"];
-
 export default {
   data() {
     return {
@@ -40,6 +37,8 @@ export default {
       visibleNumber: 5,
       // 是否为首次加载
       isFrist: false,
+      // 当前激活菜单的 index
+      currentIndex: undefined
     };
   },
   computed: {
@@ -48,7 +47,12 @@ export default {
       let topMenus = [];
       this.routers.map((menu) => {
         if (menu.hidden !== true) {
-          topMenus.push(menu);
+          // 兼容顶部栏一级菜单内部跳转
+          if (menu.path === "/") {
+            topMenus.push(menu.children[0]);
+          } else {
+            topMenus.push(menu);
+          }
         }
       });
       return topMenus;
@@ -63,7 +67,11 @@ export default {
       this.routers.map((router) => {
         for (var item in router.children) {
           if (router.children[item].parentPath === undefined) {
-            router.children[item].path = router.path + "/" + router.children[item].path;
+            if(router.path === "/") {
+              router.children[item].path = "/redirect/" + router.children[item].path;
+            } else {
+              router.children[item].path = router.path + "/" + router.children[item].path;
+            }
             router.children[item].parentPath = router.path;
           }
           childrenMenus.push(router.children[item]);
@@ -75,12 +83,6 @@ export default {
     activeMenu() {
       const path = this.$route.path;
       let activePath = this.routers[0].path;
-      var noactive = noactiveList.some(function (item) {
-        return path.indexOf(item) !== -1;
-      });
-      if (noactive) {
-        return;
-      }
       if (path.lastIndexOf("/") > 0) {
         const tmpPath = path.substring(1, path.length);
         activePath = "/" + tmpPath.substring(0, tmpPath.indexOf("/"));
@@ -91,7 +93,11 @@ export default {
           activePath = "index";
         }
       }
-      this.activeRoutes(activePath);
+      var routes = this.activeRoutes(activePath);
+      if (routes.length === 0) {
+        activePath = this.currentIndex || this.routers[0].path
+        this.activeRoutes(activePath);
+      }
       return activePath;
     },
   },
@@ -112,10 +118,15 @@ export default {
     },
     // 菜单选择事件
     handleSelect(key, keyPath) {
+      this.currentIndex = key;
       if (key.indexOf("http://") !== -1 || key.indexOf("https://") !== -1) {
         // http(s):// 路径新窗口打开
         window.open(key, "_blank");
+      } else if (key.indexOf("/redirect") !== -1) {
+        // /redirect 路径内部打开
+        this.$router.push({ path: key.replace("/redirect", "") });
       } else {
+        // 显示左侧联动菜单
         this.activeRoutes(key);
       }
     },
@@ -129,7 +140,10 @@ export default {
           }
         });
       }
-      this.$store.commit("SET_SIDEBAR_ROUTERS", routes);
+      if(routes.length > 0) {
+        this.$store.commit("SET_SIDEBAR_ROUTERS", routes);
+      }
+      return routes;
     }
   },
 };