From 6d4ba6de5ad9b1a8f3b7b680aa3a3a2ce08b22a6 Mon Sep 17 00:00:00 2001
From: wangting <675591594@qq.com>
Date: 星期五, 21 七月 2023 19:32:56 +0800
Subject: [PATCH] 组件在菜单中复用

---
 Source/UBCS-WEB/public/src/router/avue-router.js |   22 ++++++++++-
 Source/UBCS-WEB/src/page/index/layout.vue        |    4 +-
 Source/UBCS-WEB/src/permission.js                |   11 ++++-
 Source/UBCS-WEB/src/page/index/index.vue         |    1 
 Source/UBCS-WEB/src/router/avue-router.js        |   25 +++++++++++-
 5 files changed, 55 insertions(+), 8 deletions(-)

diff --git a/Source/UBCS-WEB/public/src/router/avue-router.js b/Source/UBCS-WEB/public/src/router/avue-router.js
index 0e68bda..6ec7291 100644
--- a/Source/UBCS-WEB/public/src/router/avue-router.js
+++ b/Source/UBCS-WEB/public/src/router/avue-router.js
@@ -99,6 +99,8 @@
       const propsDefault = {
         label: propsConfig.label || 'name',
         path: propsConfig.path || 'path',
+        fullPath: propsConfig.fullPath || 'fullPath',
+        query:propsConfig.query || 'query',
         icon: propsConfig.icon || 'icon',
         children: propsConfig.children || 'children',
         meta: propsConfig.meta || 'meta',
@@ -117,9 +119,23 @@
             } else {
               return oMenu[propsDefault.path]
             }
-          })(),
+          })();
+        let fullPath=path;
+        let query=oMenu[propsDefault.query] || {};
+        if(path.indexOf('?')!=-1){
+          let params=path.split('?')[1].split('&');
+          path=path.split('?')[0]
+          params.forEach(pitem=>{
+            try {
+              query[pitem.split('=')[0]]=pitem.split('=')[1];
+            }catch (e) {
+              query[pitem.split('=')[0]]=null;
+            }
+
+          })
+        }
           //鐗规畩澶勭悊缁勪欢 鎵ц瀹岃繖涓� component 涔熷氨鏄簿纭埌鍏蜂綋鐨勬枃浠朵簡  views鏂囦欢澶逛笅闈㈠氨鏄叿浣撶殑椤甸潰浠g爜
-          component = 'views' + oMenu.path,
+          let component = 'views' + path,
           name = oMenu[propsDefault.label],
           icon = oMenu[propsDefault.icon],
           children = oMenu[propsDefault.children],
@@ -136,6 +152,8 @@
         const isChild = children.length !== 0;
         const oRouter = {
           path: path,
+          fullPath:fullPath,
+          query:query,
           component(resolve) {
             // 鍒ゆ柇鏄惁涓洪璺敱
             if (first) {
diff --git a/Source/UBCS-WEB/src/page/index/index.vue b/Source/UBCS-WEB/src/page/index/index.vue
index 0ee7d19..6f70b9a 100644
--- a/Source/UBCS-WEB/src/page/index/index.vue
+++ b/Source/UBCS-WEB/src/page/index/index.vue
@@ -98,6 +98,7 @@
       openMenu(item = {}) {
         this.$store.dispatch("GetMenu", item.id).then(data => {
           if (data.length !== 0) {
+            debugger;
             this.$router.$avueRouter.formatRoutes(data, true);
           }
           //褰撶偣鍑婚《閮ㄨ彍鍗曞悗榛樿鎵撳紑绗竴涓彍鍗�
diff --git a/Source/UBCS-WEB/src/page/index/layout.vue b/Source/UBCS-WEB/src/page/index/layout.vue
index 96976dd..2f98163 100644
--- a/Source/UBCS-WEB/src/page/index/layout.vue
+++ b/Source/UBCS-WEB/src/page/index/layout.vue
@@ -1,8 +1,8 @@
 <template>
   <div>
     <keep-alive>
-      <router-view class="avue-view" v-if="$route.meta.keepAlive" />
+      <router-view class="avue-view" v-if="$route.meta.keepAlive"  :key="$route.fullPath"/>
     </keep-alive>
-    <router-view class="avue-view" v-if="!$route.meta.keepAlive" />
+    <router-view class="avue-view" v-if="!$route.meta.keepAlive"  :key="$route.fullPath"/>
   </div>
 </template>
diff --git a/Source/UBCS-WEB/src/permission.js b/Source/UBCS-WEB/src/permission.js
index b6ca71d..035ff10 100644
--- a/Source/UBCS-WEB/src/permission.js
+++ b/Source/UBCS-WEB/src/permission.js
@@ -29,8 +29,15 @@
             next({path: '/login'})
           })
         } else {
-          const value = to.query.src || to.fullPath;
-          const label = to.query.name || to.name;
+          let query=JSON.parse(JSON.stringify(to.query));
+         for(var q in to.query) {
+           if (to.query[q].indexOf('@name=') != -1) {
+             query[q] = to.query[q].split('@name=')[0]
+             query['name'] = to.query[q].split('@name=')[1]
+           }
+         }
+          const value = query.src || to.fullPath|| to.path ;
+          const label = query.name || to.name;
           const meta = to.meta || router.$avueRouter.meta || {};
           const i18n = to.query.i18n;
           if (to.query.target) {
diff --git a/Source/UBCS-WEB/src/router/avue-router.js b/Source/UBCS-WEB/src/router/avue-router.js
index 0e68bda..8be667c 100644
--- a/Source/UBCS-WEB/src/router/avue-router.js
+++ b/Source/UBCS-WEB/src/router/avue-router.js
@@ -99,6 +99,8 @@
       const propsDefault = {
         label: propsConfig.label || 'name',
         path: propsConfig.path || 'path',
+        fullPath: propsConfig.fullPath || 'fullPath',
+        query:propsConfig.query || 'query',
         icon: propsConfig.icon || 'icon',
         children: propsConfig.children || 'children',
         meta: propsConfig.meta || 'meta',
@@ -117,9 +119,24 @@
             } else {
               return oMenu[propsDefault.path]
             }
-          })(),
+          })();
+
+          let fullPath=path;
+        let query=oMenu[propsDefault.query] || {};
+        if(path.indexOf('?')!=-1){
+          let params=path.split('?')[1].split('@');
+          path=path.split('?')[0]
+          params.forEach(pitem=>{
+            try {
+              query[pitem.split('=')[0]]=pitem.split('=')[1];
+            }catch (e) {
+              query[pitem.split('=')[0]]=null;
+            }
+
+          })
+        }
           //鐗规畩澶勭悊缁勪欢 鎵ц瀹岃繖涓� component 涔熷氨鏄簿纭埌鍏蜂綋鐨勬枃浠朵簡  views鏂囦欢澶逛笅闈㈠氨鏄叿浣撶殑椤甸潰浠g爜
-          component = 'views' + oMenu.path,
+         let component = 'views' + path,
           name = oMenu[propsDefault.label],
           icon = oMenu[propsDefault.icon],
           children = oMenu[propsDefault.children],
@@ -136,6 +153,9 @@
         const isChild = children.length !== 0;
         const oRouter = {
           path: path,
+          fullPath:fullPath,
+          query:query,
+          params:query,
           component(resolve) {
             // 鍒ゆ柇鏄惁涓洪璺敱
             if (first) {
@@ -188,6 +208,7 @@
       // for寰幆缁撴潫
       // 杩欎釜first 鍗$殑鍏跺疄灏辨槸棣栬矾鐢�
       if (first) {
+        debugger;
         this.safe.$router.addRoutes(aRouter)
       } else {
         // 杩欓噷杩斿洖鐨勬槸瀛愮粍浠�

--
Gitblit v1.9.3