路由配置解决

This commit is contained in:
曹前明 2022-07-15 16:37:53 +08:00
parent dc9b3aaa08
commit 5d89acd012
3 changed files with 102 additions and 55 deletions

View File

@ -277,7 +277,6 @@ export default {
// delete reqData[config.request.pageSize]
}
Object.assign(reqData, this.tableParams);
debugger;
try {
var res = await this.apiObj.req(reqData);
if (this.hidePagination) {

View File

@ -34,7 +34,6 @@ const routes = [
"title": "首页",
"icon": "el-icon-home-filled",
"type": "menu",
},
"children": [
{
@ -75,7 +74,7 @@ const routes = [
"meta": {
"title": "事件",
"icon": "el-icon-goods-filled",
"type": "menu"
"type": "menu",
},
"children": [
{
@ -84,8 +83,9 @@ const routes = [
"meta": {
"title": "事件列表",
"icon": "el-icon-document",
"perms": ["event"]
},
"component": "ecm/event"
"component": "ecm/event",
}
,
{
@ -262,7 +262,6 @@ const routes = [
},
"component": "opm/oplcate"
},
,
{
"name": "opl",
"path": "/opm/opl",
@ -273,7 +272,6 @@ const routes = [
},
"component": "opm/opl"
},
,
{
"name": "fire",
"path": "/opm/fire",
@ -284,7 +282,6 @@ const routes = [
},
"component": "opm/fire"
},
,
{
"name": "space",
"path": "/opm/space",
@ -295,7 +292,6 @@ const routes = [
},
"component": "opm/space"
},
,
{
"name": "clear",
"path": "/opm/clear",
@ -346,7 +342,6 @@ const routes = [
},
"component": "opm/cooler"
},
,
{
"name": "soil",
"path": "/opm/soil",

View File

@ -1,4 +1,4 @@
import {createRouter, createWebHashHistory} from 'vue-router';
import { createRouter, createWebHashHistory } from 'vue-router';
import { ElNotification } from 'element-plus';
import config from "@/config"
import NProgress from 'nprogress'
@ -6,7 +6,7 @@ import 'nprogress/nprogress.css'
import tool from '@/utils/tool';
import systemRouter from './systemRouter';
import userRoutes from '@/config/route';
import {beforeEach, afterEach} from './scrollBehavior';
import { beforeEach, afterEach } from './scrollBehavior';
//系统路由
const routes = systemRouter
@ -17,7 +17,7 @@ const routes_404 = {
hidden: true,
component: () => import(/* webpackChunkName: "404" */ '@/layout/other/404'),
}
let routes_404_r = ()=>{}
let routes_404_r = () => { }
const router = createRouter({
history: createWebHashHistory(),
@ -38,7 +38,7 @@ router.beforeEach(async (to, from, next) => {
let token = tool.cookie.get("TOKEN");
if(to.path === "/login"){
if (to.path === "/login") {
//删除路由(替换当前layout路由)
router.addRoute(routes[0])
//删除路由(404)
@ -48,12 +48,12 @@ router.beforeEach(async (to, from, next) => {
return false;
}
if(routes.findIndex(r => r.path === to.path) >= 0){
if (routes.findIndex(r => r.path === to.path) >= 0) {
next();
return false;
}
if(!token){
if (!token) {
next({
path: '/login'
});
@ -61,18 +61,20 @@ router.beforeEach(async (to, from, next) => {
}
//整页路由处理
if(to.meta.fullpage){
to.matched = [to.matched[to.matched.length-1]]
if (to.meta.fullpage) {
to.matched = [to.matched[to.matched.length - 1]]
}
//加载动态/静态路由
if(!isGetRouter){
if (!isGetRouter) {
// let apiMenu = tool.data.get("MENU") || []
debugger;
let userInfo = tool.data.get("USER_INFO");
let permissions = tool.data.get("PERMISSIONS");
let userMenu = treeFilter(userRoutes, node => {
return node.meta.perms ? node.meta.perms.filter(item=>userInfo.perms.indexOf(item)>-1).length > 0 : true
});
let userMenu = userRoutes;
if(permissions.indexOf('superuser')==-1){
userMenu = treeFilter(userRoutes, node => {
return node.meta.perms ? node.meta.perms.filter(item => permissions.indexOf(item) > -1).length > 0 : true
});
}
// let userMenu = checkRoute(userRoutes, permissions)
// let menu = [...userMenu, ...apiMenu]
var menuRouter = filterAsyncRouter(userMenu);
menuRouter = flatAsyncRoutes(menuRouter);
@ -80,8 +82,7 @@ router.beforeEach(async (to, from, next) => {
router.addRoute("layout", item)
});
routes_404_r = router.addRoute(routes_404);
debugger;
if (to.matched.length ==0||permissions[0]==='superuser') {
if (to.matched.length == 0) {
router.push(to.fullPath);
}
isGetRouter = true;
@ -106,10 +107,14 @@ router.onError((error) => {
//入侵追加自定义方法、对象
router.sc_getMenu = () => {
// var apiMenu = tool.data.get("MENU") || []
let userInfo = tool.data.get("USER_INFO")
let userMenu = treeFilter(userRoutes, node => {
return node.meta.perms ? node.meta.perms.filter(item=>userInfo.perms.indexOf(item)>-1).length > 0 : true
})
let permissions = tool.data.get("PERMISSIONS");
let userMenu = userRoutes;
if(permissions.indexOf('superuser')==-1){
userMenu = treeFilter(userRoutes, node => {
return node.meta.perms ? node.meta.perms.filter(item => permissions.indexOf(item) > -1).length > 0 : true
});
}
// let userMenu = checkRoute(userRoutes, permissions)
// var menu = [...userMenu, ...apiMenu]
return userMenu
}
@ -118,9 +123,9 @@ router.sc_getMenu = () => {
function filterAsyncRouter(routerMap) {
const accessedRouters = []
routerMap.forEach(item => {
item.meta = item.meta?item.meta:{};
item.meta = item.meta ? item.meta : {};
//处理外部链接特殊路由
if(item.meta.type=='iframe'){
if (item.meta.type == 'iframe') {
item.meta.url = item.path;
item.path = `/i/${item.name}`;
}
@ -137,39 +142,39 @@ function filterAsyncRouter(routerMap) {
})
return accessedRouters
}
function loadComponent(component){
if(component){
function loadComponent(component) {
if (component) {
return () => import(/* webpackChunkName: "[request]" */ `@/views/${component}`)
}else{
} else {
return () => import(`@/layout/other/empty`)
}
}
//路由扁平化
function flatAsyncRoutes(routes, breadcrumb=[]) {
function flatAsyncRoutes(routes, breadcrumb = []) {
let res = []
routes.forEach(route => {
const tmp = {...route}
if (tmp.children) {
let childrenBreadcrumb = [...breadcrumb]
childrenBreadcrumb.push(route)
let tmpRoute = { ...route }
tmpRoute.meta.breadcrumb = childrenBreadcrumb
delete tmpRoute.children
res.push(tmpRoute)
let childrenRoutes = flatAsyncRoutes(tmp.children, childrenBreadcrumb)
childrenRoutes.map(item => {
res.push(item)
})
} else {
let tmpBreadcrumb = [...breadcrumb]
tmpBreadcrumb.push(tmp)
tmp.meta.breadcrumb = tmpBreadcrumb
res.push(tmp)
}
})
return res
const tmp = { ...route }
if (tmp.children) {
let childrenBreadcrumb = [...breadcrumb]
childrenBreadcrumb.push(route)
let tmpRoute = { ...route }
tmpRoute.meta.breadcrumb = childrenBreadcrumb
delete tmpRoute.children
res.push(tmpRoute)
let childrenRoutes = flatAsyncRoutes(tmp.children, childrenBreadcrumb)
childrenRoutes.map(item => {
res.push(item)
})
} else {
let tmpBreadcrumb = [...breadcrumb]
tmpBreadcrumb.push(tmp)
tmp.meta.breadcrumb = tmpBreadcrumb
res.push(tmp)
}
})
return res
}
//过滤树
@ -180,4 +185,52 @@ function treeFilter(tree, func) {
})
}
function hasPerm(perms_need, perms_have) {
let has = false
for(var m=0;m<perms_need.length;m++){
if(perms_have.indexOf(perms_need[m])>-1){
has = true
}
}
return has
}
function checkRoute(routes, perms) {
if(perms.indexOf('superuser')>-1){
return routes
}
for (var i = 0; i < routes.length; i++) {
if (routes[i].meta && routes[i].meta.perms) {
let has = hasPerm(routes[i].meta.perms, perms)
if(!has){
routes.splice(i,1)
}
else if (routes[i].children){
for (var m = 0; m < routes[i].children.length; m++){
let child = routes[i].children[m]
if (child.meta && child.meta.perms) {
let has = hasPerm(child.meta.perms, perms)
if(!has){
routes[i].children.splice(m,1)
}
}
}
}
}
else if (routes[i].children){
for (var m = 0; m < routes[i].children.length; m++){
let child = routes[i].children[m]
console.log(m, child)
if (child.meta && child.meta.perms) {
let has = hasPerm(child.meta.perms, perms)
if(!has){
routes[i].children.splice(m,1)
}
}
}
}
}
return routes
}
export default router