xiaochan hace 1 año
padre
commit
79e32907ff

+ 1 - 1
src/api/settings/menu-settings.ts

@@ -21,7 +21,7 @@ export interface IntergrationMenu {
     pathParams?: string;
     children: IntergrationMenu[] | null;
     completePath: string
-    cascaders?: number[] | null
+    cascaders: number[] | null
 }
 
 export function getMenuSettings() {

+ 3 - 2
src/layout/default-layout/index.vue

@@ -36,7 +36,7 @@
       <div class="layout_main layout-default_main">
         <router-view v-slot="{ Component }">
           <transition name="fade-transform" mode="out-in">
-            <keep-alive>
+            <keep-alive :include="getKeepAliveNames">
               <component :is="Component"/>
             </keep-alive>
           </transition>
@@ -55,6 +55,7 @@ import ToolInfoBar from "@/layout/fillet-layout/ToolInfoBar.vue";
 import DefaultTabs from "@/layout/default-layout/DefaultTabs.vue";
 import router, {routerMenus} from "@/router";
 import {find, toTreeArray} from "xe-utils";
+import {getKeepAliveNames} from "@/pinia/use-tabs";
 
 const systemStore = useSystemStore()
 const isCollapse = computed<boolean>(() => systemStore.getCollapse)
@@ -69,7 +70,7 @@ function findBreadcrumb() {
   for (let i = 0; i < data.length; i++) {
     const item = data[i]
     if (item.name === router.currentRoute.value.name) {
-      if (item.cascaders === null && item.cascaders.length < 0) {
+      if (item.cascaders === null || item.cascaders.length < 0) {
         break
       }
       const tmp = []

+ 13 - 1
src/pinia/use-tabs.ts

@@ -1,11 +1,13 @@
+// @ts-nocheck
 import {computed} from "vue";
 import {useLocalStorage} from "@vueuse/core";
-import router from "@/router";
+import router, {secondLevelRouter, secondLevelRouterKey} from "@/router";
 import XEUtils from "xe-utils";
 import {RouteLocationNormalizedLoaded} from "vue-router";
 import {eachAndReturnList} from "@/utils/cyRefList";
 // @ts-ignore
 import {stringIsBlank} from "@/utils/blank-utils";
+import router from "@/router";
 
 // 定义Tabs类型
 export interface Tab {
@@ -25,6 +27,16 @@ export const tabsKeys = computed(() => {
     })
 })
 
+export const getKeepAliveNames = computed(() => {
+    const tmp = []
+    secondLevelRouterKey.forEach((item, key) => {
+        if (item.includes(router.currentRoute.value.name)) {
+            tmp.push(key)
+        }
+    })
+    return [...tmp, ...tabsKeys.value]
+})
+
 function useTabs() {
 
     function routerPush(index: number) {

+ 19 - 19
src/router/index.ts

@@ -16,6 +16,7 @@ import {createVNode, defineComponent, h, Ref} from "vue";
 import {stringNotBlank} from "@/utils/blank-utils";
 import {useUserStore} from "@/pinia/user-store";
 import XEUtils from "xe-utils";
+import {eachAndReturnList} from "@/utils/cyRefList";
 
 const router = createRouter({
     history: createWebHistory(),
@@ -30,11 +31,12 @@ export const routerMenus: Ref<IntergrationMenu[]> = ref([])
 
 const firstLevelRouter = []
 const secondLevelRouter = []
+export const secondLevelRouterKey = new Map<string, string[]>()
 
 function emptyRouter(routers: IntergrationMenu[]) {
     routers.forEach((item) => {
         const hasChildren = item.children !== null && item.children.length > 0
-        if (['EmptyRouter', 'Layout'].includes(item.component) && hasChildren) {
+        if (item.component === 'Layout' && hasChildren) {
             item.children?.forEach(child => {
                 child.path = item.path + '/' + child.path
                 firstLevelRouter.push(child)
@@ -89,25 +91,23 @@ async function beforeAddRoutes() {
     await useUserStore().getUserInfo
     routerMenus.value = await getUserMenu()
     emptyRouter(XEUtils.clone(routerMenus.value, true))
-    const data = convertToRouter([{
-        completePath: "/",
-        pathParams: '',
-        redirect: 'dashboard',
-        component: 'Layout',
-        icon: "",
-        id: 0,
-        metaLink: false,
-        metaTitle: "",
-        name: "",
-        path: "/",
-        sort: 0,
-        type: 0,
+
+    secondLevelRouter.forEach((item) => {
+        const tmp = eachAndReturnList(item.children, (i) => {
+            return i.name
+        })
+        secondLevelRouterKey.set(item.name, tmp)
+    })
+
+    router.addRoute({
+        name: 'Home',
+        path: '/',
+        redirect: '/dashboard',
+        component: () => import('@/layout/index.vue'),
         children: [
-            ...firstLevelRouter, ...secondLevelRouter
-        ],
-    }])
-    data.forEach(item => {
-        router.addRoute(item)
+            ...convertToRouter(firstLevelRouter),
+            ...convertToRouter(secondLevelRouter),
+        ]
     })
 }
 

+ 0 - 4
src/views/settings/menu-settings/dialog.vue

@@ -113,10 +113,6 @@ const layout = [
   {
     value: 'Layout',
     label: 'Layout'
-  },
-  {
-    value: 'EmptyRouter',
-    label: 'EmptyRouter'
   }
 ]