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