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