From f2d783714a105ebc6eef88a3e0187d65dfa47239 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=A6=8D?= <1455167345@qq.com> Date: Tue, 18 Jun 2024 15:32:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=A7=E5=B1=8F=E4=B8=8D=E7=BB=A7=E6=89=BFla?= =?UTF-8?q?yout?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/store/modules/permission.ts | 237 ++++++++++++++++---------------- 1 file changed, 116 insertions(+), 121 deletions(-) diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index c83745aa..d58407ca 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -170,72 +170,9 @@ export const usePermissionStore = defineStore({ }; // 注册路由 const registeredRoute = (data) => { - let modules; - let component; - // 判断是不是大屏,不是大屏的情况下增加路径demo + const modules = import.meta.glob('../../views/**/**/**/index.vue'); if (data.item.url.split('/')[1] == 'map') { - modules = import.meta.glob('../../views/**/**/**/index.vue'); - component = modules['../../views' + data.item.url + '/index.vue']; - } else { - modules = import.meta.glob('../../views/demo/**/**/index.vue'); - component = modules['../../views/demo' + data.item.url + '/index.vue']; - } - if (data.children.length == 0 && data.item.parentId == 0 && data.item.status == 1) { - //给带参数的路由先注册主路由 - if (data.item.url.indexOf('@') > 0) { - const path = data.item.url.substring(0, data.item.url.indexOf('@')); - router.addRoute('Root', { - path: path, - name: data.item.code, - meta: { - title: data.item.name, - icon: data.item.iconName, - hideChildrenInMenu: true, - elements: data.item.elements, - }, - component: LAYOUT, - children: [ - { - path: path + '/:id', - name: data.item.url.replaceAll('/', ''), - meta: { - title: data.item.name, - icon: data.item.iconName, - elements: data.item.elements, - }, - component: modules['../../views/demo' + path + '/index.vue'], - }, - ], - }); - } else { - router.addRoute('Root', { - path: data.item.url, - name: data.item.code, - meta: { - title: data.item.name, - icon: data.item.iconName, - hideChildrenInMenu: true, - elements: data.item.elements, - }, - component: LAYOUT, - children: [ - { - path: data.item.url, - name: data.item.url.replaceAll('/', ''), - meta: { - title: data.item.name, - icon: data.item.iconName, - elements: data.item.elements, - }, - component: component, - }, - ], - }); - } - } else { - if (data.item.status == 0) { - return; - } + // 大屏的情况下不继承layout router.addRoute('Root', { path: data.item.url, name: data.item.code, @@ -244,66 +181,124 @@ export const usePermissionStore = defineStore({ icon: data.item.iconName, elements: data.item.elements, }, - component: data.item.parentId == 0 ? LAYOUT : component, + component: modules['../../views' + data.item.url + '/index.vue'], }); - if (data.children && data.children.length > 0) { - data.children.forEach((element) => { - // 菜单里配置带参数,但没有单独的主路由,先注册主路由 - if (element.item.status == 1 && element.item.url.indexOf('@') > 0) { - const path = element.item.url.substring(0, element.item.url.indexOf('@')); - let childComponent; - if (data.item.url.split('/')[1] == 'map') { - modules = import.meta.glob('../../views/**/**/**/index.vue'); - childComponent = modules['../../views' + path + '/index.vue']; - } else { - modules = import.meta.glob('../../views/demo/**/**/index.vue'); - childComponent = modules['../../views/demo' + path + '/index.vue']; - } - router.addRoute('Root', { - path: path, - name: element.item.code, - meta: { - title: element.item.name, - icon: element.item.iconName, - hideChildrenInMenu: true, - elements: element.item.elements, - }, - component: LAYOUT, - children: [ - { - path: path + '/:id', - name: element.item.url.replaceAll('/', ''), - meta: { - title: element.item.name, - icon: element.item.iconName, - elements: element.item.elements, - }, - component: childComponent, + } else { + // 正常菜单 + if (data.children.length == 0 && data.item.parentId == 0 && data.item.status == 1) { + // 没有子菜单 + if (data.item.url.indexOf('@') > 0) { + //给带参数的路由先注册主路由 + const path = data.item.url.substring(0, data.item.url.indexOf('@')); + router.addRoute('Root', { + path: path, + name: data.item.code, + meta: { + title: data.item.name, + icon: data.item.iconName, + hideChildrenInMenu: true, + elements: data.item.elements, + }, + component: LAYOUT, + children: [ + { + path: path + '/:id', + name: data.item.url.replaceAll('/', ''), + meta: { + title: data.item.name, + icon: data.item.iconName, + elements: data.item.elements, }, - ], - }); - } else if (element.item.code && element.item.status == 1) { - let childComponent; - if (data.item.url.split('/')[1] == 'map') { - modules = import.meta.glob('../../views/**/**/**/index.vue'); - childComponent = modules['../../views' + element.item.url + '/index.vue']; - } else { - modules = import.meta.glob('../../views/demo/**/**/index.vue'); - childComponent = modules['../../views/demo' + element.item.url + '/index.vue']; - } - router.addRoute(element.item.code, { - path: element.item.url, - name: element.item.url.replaceAll('/', ''), - meta: { - title: element.item.name, - icon: element.item.iconName, - elements: element.item.elements, + component: modules['../../views/demo' + path + '/index.vue'], }, - // component: () => import('../../views/demo' + element.item.url + '/index.vue') - component: childComponent, - }); - } + ], + }); + } else { + router.addRoute('Root', { + path: data.item.url, + name: data.item.code, + meta: { + title: data.item.name, + icon: data.item.iconName, + hideChildrenInMenu: true, + elements: data.item.elements, + }, + component: LAYOUT, + children: [ + { + path: data.item.url, + name: data.item.url.replaceAll('/', ''), + meta: { + title: data.item.name, + icon: data.item.iconName, + elements: data.item.elements, + }, + component: modules['../../views/demo' + data.item.url + '/index.vue'], + }, + ], + }); + } + } else { + // 有子菜单 + if (data.item.status == 0) { + return; + } + router.addRoute('Root', { + path: data.item.url, + name: data.item.code, + meta: { + title: data.item.name, + icon: data.item.iconName, + elements: data.item.elements, + }, + component: + data.item.parentId == 0 + ? LAYOUT + : modules['../../views/demo' + data.item.url + '/index.vue'], }); + if (data.children && data.children.length > 0) { + data.children.forEach((element) => { + // 菜单里配置带参数,但没有单独的主路由,先注册主路由 + if (element.item.status == 1 && element.item.url.indexOf('@') > 0) { + const path = element.item.url.substring(0, element.item.url.indexOf('@')); + router.addRoute('Root', { + path: path, + name: element.item.code, + meta: { + title: element.item.name, + icon: element.item.iconName, + hideChildrenInMenu: true, + elements: element.item.elements, + }, + component: LAYOUT, + children: [ + { + path: path + '/:id', + name: element.item.url.replaceAll('/', ''), + meta: { + title: element.item.name, + icon: element.item.iconName, + elements: element.item.elements, + }, + component: modules['../../views/demo' + path + '/index.vue'], + }, + ], + }); + } else if (element.item.code && element.item.status == 1) { + router.addRoute(element.item.code, { + path: element.item.url, + name: element.item.url.replaceAll('/', ''), + meta: { + title: element.item.name, + icon: element.item.iconName, + elements: element.item.elements, + }, + // component: () => import('../../views/demo' + element.item.url + '/index.vue') + component: modules['../../views/demo' + element.item.url + '/index.vue'], + }); + } + }); + } } } // console.log(router.getRoutes())