2021-03-15 12:44:58 +08:00
|
|
|
|
import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router';
|
|
|
|
|
import NProgress from 'nprogress';
|
|
|
|
|
import 'nprogress/nprogress.css';
|
|
|
|
|
import { store } from '/@/store/index.ts';
|
|
|
|
|
import { getSession, clearSession } from '/@/utils/storage.ts';
|
2021-03-25 18:07:15 +08:00
|
|
|
|
import { NextLoading } from '/@/utils/loading.ts';
|
2021-03-15 12:44:58 +08:00
|
|
|
|
import { getMenuAdmin, getMenuTest } from '/@/api/menu/index.ts';
|
2020-12-25 18:15:04 +08:00
|
|
|
|
|
2021-01-21 18:59:16 +08:00
|
|
|
|
// 定义动态路由
|
2021-01-20 18:52:41 +08:00
|
|
|
|
export const dynamicRoutes = [
|
2021-03-15 12:44:58 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/',
|
|
|
|
|
name: '/',
|
|
|
|
|
component: () => import('/@/views/layout/index.vue'),
|
|
|
|
|
redirect: '/home',
|
|
|
|
|
meta: {
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/home',
|
|
|
|
|
name: 'home',
|
|
|
|
|
component: () => import('/@/views/home/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.home',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: true,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-shouye',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/system',
|
|
|
|
|
name: 'system',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/system/menu',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.system',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin'],
|
|
|
|
|
icon: 'iconfont icon-xitongshezhi',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/system/menu',
|
|
|
|
|
name: 'systemMenu',
|
|
|
|
|
component: () => import('/@/views/system/menu/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.systemMenu',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/system/user',
|
|
|
|
|
name: 'systemUser',
|
|
|
|
|
component: () => import('/@/views/system/user/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.systemUser',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin'],
|
|
|
|
|
icon: 'iconfont icon-icon-',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
2021-04-01 11:13:38 +08:00
|
|
|
|
|
2021-03-15 12:44:58 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/limits',
|
|
|
|
|
name: 'limits',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/limits/frontEnd',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.limits',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-quanxian',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/limits/frontEnd',
|
|
|
|
|
name: 'limitsFrontEnd',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/limits/frontEnd/page',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.limitsFrontEnd',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/limits/frontEnd/page',
|
|
|
|
|
name: 'limitsFrontEndPage',
|
|
|
|
|
component: () => import('/@/views/limits/frontEnd/page/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.limitsFrontEndPage',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/limits/frontEnd/btn',
|
|
|
|
|
name: 'limitsFrontEndBtn',
|
|
|
|
|
component: () => import('/@/views/limits/frontEnd/btn/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.limitsFrontEndBtn',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/limits/backEnd',
|
|
|
|
|
name: 'limitsBackEnd',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.limitsBackEnd',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/limits/backEnd/page',
|
|
|
|
|
name: 'limitsBackEndEndPage',
|
|
|
|
|
component: () => import('/@/views/limits/backEnd/page/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.limitsBackEndEndPage',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/menu',
|
|
|
|
|
name: 'menu',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/menu/menu1',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu1',
|
|
|
|
|
name: 'menu1',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/menu/menu1/menu11',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu1',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu1/menu11',
|
|
|
|
|
name: 'menu11',
|
|
|
|
|
component: () => import('/@/views/menu/menu1/menu11/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu11',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu1/menu12',
|
|
|
|
|
name: 'menu12',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/menu/menu1/menu12/menu121',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu12',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu1/menu12/menu121',
|
|
|
|
|
name: 'menu121',
|
|
|
|
|
component: () => import('/@/views/menu/menu1/menu12/menu121/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu121',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu1/menu12/menu122',
|
|
|
|
|
name: 'menu122',
|
|
|
|
|
component: () => import('/@/views/menu/menu1/menu12/menu122/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu122',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu1/menu13',
|
|
|
|
|
name: 'menu13',
|
|
|
|
|
component: () => import('/@/views/menu/menu1/menu13/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu13',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/menu/menu2',
|
|
|
|
|
name: 'menu2',
|
|
|
|
|
component: () => import('/@/views/menu/menu2/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.menu2',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caidan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun',
|
|
|
|
|
name: 'funIndex',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/fun/tagsView',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funIndex',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-crew_feature',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/tagsView',
|
|
|
|
|
name: 'funTagsView',
|
|
|
|
|
component: () => import('/@/views/fun/tagsView/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funTagsView',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-thumb',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/countup',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funCountup',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/countup/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funCountup',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-odometer',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/echartsTree',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funEchartsTree',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/tree/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funEchartsTree',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-connection',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/selector',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funSelector',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/selector/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funSelector',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-xuanzeqi',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/wangEditor',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funWangEditor',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/wangEditor/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funWangEditor',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-fuwenbenkuang',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/cropper',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funCropper',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/cropper/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funCropper',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-caijian',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/mindMap',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funMindMap',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/mindMap/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funMindMap',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-siweidaotu',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/qrcode',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funQrcode',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/qrcode/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funQrcode',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-ico',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/fun/echartsMap',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funEchartsMap',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/fun/echartsMap/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funEchartsMap',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-ditu',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-22 18:14:29 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/fun/printJs',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'funPrintJs',
|
2021-03-22 18:14:29 +08:00
|
|
|
|
component: () => import('/@/views/fun/printJs/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.funPrintJs',
|
2021-03-22 18:14:29 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-printer',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-04-01 11:13:38 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/fun/clipboard',
|
|
|
|
|
name: 'funClipboard',
|
|
|
|
|
component: () => import('/@/views/fun/clipboard/index.vue'),
|
|
|
|
|
meta: {
|
|
|
|
|
title: 'message.router.funClipboard',
|
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-document-copy',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-04-02 18:07:49 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/fun/screenShort',
|
|
|
|
|
name: 'funScreenShort',
|
|
|
|
|
component: () => import('/@/views/fun/screenShort/index.vue'),
|
|
|
|
|
meta: {
|
|
|
|
|
title: 'message.router.funScreenShort',
|
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-crop',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-04-28 17:02:32 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/fun/gridLayout',
|
|
|
|
|
name: 'funGridLayout',
|
|
|
|
|
component: () => import('/@/views/fun/gridLayout/index.vue'),
|
|
|
|
|
meta: {
|
|
|
|
|
title: 'message.router.funGridLayout',
|
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-tuodong',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-15 12:44:58 +08:00
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/pages',
|
|
|
|
|
name: 'pagesIndex',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
redirect: '/pages/filtering',
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesIndex',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-fuzhiyemian',
|
|
|
|
|
},
|
|
|
|
|
children: [
|
|
|
|
|
{
|
|
|
|
|
path: '/pages/filtering',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesFiltering',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/filtering/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesFiltering',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-sell',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-15 20:41:59 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/pages/filteringDetails',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesFilteringDetails',
|
2021-03-15 20:41:59 +08:00
|
|
|
|
component: () => import('/@/views/pages/filtering/details.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesFilteringDetails',
|
2021-03-15 20:41:59 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: true,
|
|
|
|
|
isKeepAlive: false,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-s-order',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-18 22:06:21 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/pages/filteringDetails1',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesFilteringDetails1',
|
2021-03-18 22:06:21 +08:00
|
|
|
|
component: () => import('/@/views/pages/filtering/details1.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesFilteringDetails1',
|
2021-03-18 22:06:21 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: true,
|
|
|
|
|
isKeepAlive: false,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-s-order',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-15 12:44:58 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/pages/iocnfont',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesIocnfont',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/iocnfont/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesIocnfont',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-present',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/pages/element',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesElement',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/element/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesElement',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-platform-eleme',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/pages/awesome',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesAwesome',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/awesome/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesAwesome',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'el-icon-set-up',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/pages/cityLinkage',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesCityLinkage',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/cityLinkage/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesCityLinkage',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-jiliandongxuanzeqi',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/pages/formAdapt',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesFormAdapt',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/formAdapt/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesFormAdapt',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-biaodan',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/pages/listAdapt',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesListAdapt',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
component: () => import('/@/views/pages/listAdapt/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesListAdapt',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-chazhaobiaodanliebiao',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-22 18:14:29 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/pages/waterfall',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesWaterfall',
|
2021-03-22 18:14:29 +08:00
|
|
|
|
component: () => import('/@/views/pages/waterfall/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesWaterfall',
|
2021-03-22 18:14:29 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-zidingyibuju',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-20 23:19:12 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/pages/steps',
|
2021-04-01 11:13:38 +08:00
|
|
|
|
name: 'pagesSteps',
|
2021-03-20 23:19:12 +08:00
|
|
|
|
component: () => import('/@/views/pages/steps/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.pagesSteps',
|
2021-03-20 23:19:12 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-step',
|
|
|
|
|
},
|
|
|
|
|
},
|
2021-03-15 12:44:58 +08:00
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/chart',
|
|
|
|
|
name: 'chartIndex',
|
|
|
|
|
component: () => import('/@/views/chart/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.chartIndex',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-ico_shuju',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/personal',
|
|
|
|
|
name: 'personal',
|
|
|
|
|
component: () => import('/@/views/personal/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.personal',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-gerenzhongxin',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/tools',
|
|
|
|
|
name: 'tools',
|
|
|
|
|
component: () => import('/@/views/tools/index.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.tools',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: '',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: true,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin', 'test'],
|
|
|
|
|
icon: 'iconfont icon-gongju',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/link',
|
|
|
|
|
name: 'layoutLinkView',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.layoutLinkView',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isLink: 'https://element-plus.gitee.io/#/zh-CN/component/installation',
|
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: false,
|
|
|
|
|
isAffix: false,
|
|
|
|
|
isIframe: false,
|
|
|
|
|
auth: ['admin'],
|
|
|
|
|
icon: 'iconfont icon-caozuo-wailian',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/iframes',
|
|
|
|
|
name: 'layoutIfameView',
|
|
|
|
|
component: () => import('/@/views/layout/routerView/parent.vue'),
|
|
|
|
|
meta: {
|
2021-04-01 11:13:38 +08:00
|
|
|
|
title: 'message.router.layoutIfameView',
|
2021-04-14 23:00:38 +08:00
|
|
|
|
isLink: 'https://gitee.com/lyt-top/vue-next-admin',
|
2021-03-15 12:44:58 +08:00
|
|
|
|
isHide: false,
|
|
|
|
|
isKeepAlive: false,
|
|
|
|
|
isAffix: true,
|
|
|
|
|
isIframe: true,
|
|
|
|
|
auth: ['admin'],
|
|
|
|
|
icon: 'iconfont icon-neiqianshujuchucun',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
];
|
2021-01-17 21:14:26 +08:00
|
|
|
|
|
2021-01-21 18:59:16 +08:00
|
|
|
|
// 定义静态路由
|
2021-01-21 00:18:30 +08:00
|
|
|
|
const staticRoutes: Array<RouteRecordRaw> = [
|
2021-03-15 12:44:58 +08:00
|
|
|
|
{
|
|
|
|
|
path: '/login',
|
|
|
|
|
name: 'login',
|
|
|
|
|
component: () => import('/@/views/login/index.vue'),
|
|
|
|
|
meta: {
|
|
|
|
|
title: '登陆',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/404',
|
|
|
|
|
name: 'notFound',
|
|
|
|
|
component: () => import('/@/views/error/404.vue'),
|
|
|
|
|
meta: {
|
|
|
|
|
title: '找不到此页面',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
path: '/401',
|
|
|
|
|
name: 'noPower',
|
|
|
|
|
component: () => import('/@/views/error/401.vue'),
|
|
|
|
|
meta: {
|
|
|
|
|
title: '没有权限',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
];
|
2020-12-25 18:15:04 +08:00
|
|
|
|
|
2021-02-25 00:42:24 +08:00
|
|
|
|
// 定义404界面
|
|
|
|
|
const pathMatch = {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
path: '/:path(.*)*',
|
|
|
|
|
redirect: '/404',
|
|
|
|
|
};
|
2021-02-25 00:42:24 +08:00
|
|
|
|
|
|
|
|
|
// 获取目录下的 .vue 全部文件,参考 vite:import.meta.glob
|
2021-03-15 12:44:58 +08:00
|
|
|
|
const dynamicViewsModules = import.meta.glob('../views/**/*.{vue,tsx}');
|
2021-02-25 00:42:24 +08:00
|
|
|
|
|
2021-01-21 18:59:16 +08:00
|
|
|
|
// 添加静态路由
|
2020-12-25 18:15:04 +08:00
|
|
|
|
const router = createRouter({
|
2021-03-15 12:44:58 +08:00
|
|
|
|
history: createWebHashHistory(),
|
|
|
|
|
routes: staticRoutes,
|
|
|
|
|
});
|
2020-12-25 18:15:04 +08:00
|
|
|
|
|
2021-04-23 15:30:32 +08:00
|
|
|
|
// 前端控制路由:初始化方法,防止刷新时丢失
|
|
|
|
|
export function initAllFun() {
|
2021-04-23 16:18:17 +08:00
|
|
|
|
NextLoading.start(); // 界面 loading 动画开始执行
|
|
|
|
|
const token = getSession('token'); // 获取浏览器缓存 token 值
|
|
|
|
|
if (!token) return false; // 无 token 停止执行下一步
|
2021-04-23 15:30:32 +08:00
|
|
|
|
store.dispatch('userInfos/setUserInfos'); // 触发初始化用户信息
|
|
|
|
|
router.addRoute(pathMatch); // 添加404界面
|
|
|
|
|
resetRoute(); // 删除/重置路由
|
|
|
|
|
setAddRoute(); // 添加动态路由
|
|
|
|
|
setFilterMenu(); // 过滤权限菜单
|
|
|
|
|
setCacheTagsViewRoutes(); // 添加 keepAlive 缓存
|
2021-02-22 21:56:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-04-23 15:30:32 +08:00
|
|
|
|
// 后端控制路由:模拟执行路由数据初始化
|
|
|
|
|
export async function initBackEndControlRoutesFun() {
|
|
|
|
|
NextLoading.start(); // 界面 loading 动画开始执行
|
|
|
|
|
const token = getSession('token'); // 获取浏览器缓存 token 值
|
|
|
|
|
if (!token) return false; // 无 token 停止执行下一步
|
|
|
|
|
store.dispatch('userInfos/setUserInfos'); // 触发初始化用户信息
|
|
|
|
|
const res = await getBackEndControlRoutes(); // 获取路由
|
|
|
|
|
const oldRoutes = JSON.parse(JSON.stringify(res.data)); // 获取接口原始路由(未处理component)
|
|
|
|
|
store.dispatch('requestOldRoutes/setBackEndControlRoutes', oldRoutes); // 存原始路由到 vuex 中
|
|
|
|
|
dynamicRoutes[0].children = await backEndRouter(res.data); // 处理路由(component)
|
|
|
|
|
router.addRoute(pathMatch); // 添加404界面
|
|
|
|
|
await setAddRoute(); // 添加动态路由
|
|
|
|
|
setFilterMenu(); // 过滤权限菜单
|
|
|
|
|
setCacheTagsViewRoutes(); // 添加 keepAlive 缓存
|
|
|
|
|
setRefreshPagesRestore(); // 防止界面刷新时,出现404、空白、报错等
|
2021-02-27 18:35:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-04-23 15:30:32 +08:00
|
|
|
|
// 防止界面刷新时,出现404、空白、报错等
|
|
|
|
|
export function setRefreshPagesRestore() {
|
|
|
|
|
const { matched, query, path } = router.currentRoute.value;
|
|
|
|
|
if (matched.length <= 0) router.push({ path, query });
|
2021-02-27 18:35:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-04-23 15:30:32 +08:00
|
|
|
|
// 后端控制路由,isRequestRoutes 为 true,则开启后端控制路由
|
|
|
|
|
export function getBackEndControlRoutes() {
|
|
|
|
|
// 模拟 admin 与 test
|
|
|
|
|
const auth = store.state.userInfos.userInfos.authPageList[0];
|
|
|
|
|
// 管理员 admin
|
|
|
|
|
if (auth === 'admin') return getMenuAdmin();
|
|
|
|
|
// 其它用户 test
|
|
|
|
|
else return getMenuTest();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 后端控制路由,动态添加菜单时(菜单管理界面刷新菜单,路径:/src/views/system/menu/component/addMenu.vue)
|
|
|
|
|
export function setBackEndControlRefreshRoutes() {
|
|
|
|
|
getBackEndControlRoutes();
|
|
|
|
|
}
|
2021-02-24 18:53:41 +08:00
|
|
|
|
|
2021-02-25 00:42:24 +08:00
|
|
|
|
// 后端控制路由,后端路由 component 转换
|
2021-02-24 00:27:24 +08:00
|
|
|
|
export function backEndRouter(routes: any) {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
if (!routes) return;
|
|
|
|
|
return routes.map((item: any) => {
|
2021-04-23 15:30:32 +08:00
|
|
|
|
if (item.component) item.component = dynamicImport(dynamicViewsModules, item.component as string);
|
|
|
|
|
item.children && backEndRouter(item.children);
|
2021-03-15 12:44:58 +08:00
|
|
|
|
return item;
|
|
|
|
|
});
|
2021-02-24 18:53:41 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-02-25 00:42:24 +08:00
|
|
|
|
// 后端控制路由,后端路由 component 转换函数
|
2021-03-15 12:44:58 +08:00
|
|
|
|
export function dynamicImport(dynamicViewsModules: Record<string, () => Promise<{ [key: string]: any }>>, component: string) {
|
|
|
|
|
const keys = Object.keys(dynamicViewsModules);
|
|
|
|
|
const matchKeys = keys.filter((key) => {
|
|
|
|
|
const k = key.replace('../views', '');
|
|
|
|
|
return k.startsWith(`${component}`) || k.startsWith(`/${component}`);
|
|
|
|
|
});
|
|
|
|
|
if (matchKeys?.length === 1) {
|
|
|
|
|
const matchKey = matchKeys[0];
|
|
|
|
|
return dynamicViewsModules[matchKey];
|
|
|
|
|
}
|
|
|
|
|
if (matchKeys?.length > 1) {
|
|
|
|
|
console.warn('Do not create files that do not end with. Vue');
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2021-02-24 00:27:24 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-21 18:59:16 +08:00
|
|
|
|
// 多级嵌套数组处理成一维数组
|
|
|
|
|
export function formatFlatteningRoutes(arr: any) {
|
2021-04-23 15:30:32 +08:00
|
|
|
|
if (arr.length <= 0) return false;
|
2021-03-15 12:44:58 +08:00
|
|
|
|
for (let i = 0; i < arr.length; i++) {
|
|
|
|
|
if (arr[i].children) {
|
|
|
|
|
arr = arr.slice(0, i + 1).concat(arr[i].children, arr.slice(i + 1));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return arr;
|
2021-01-21 18:59:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 多级嵌套数组处理后的一维数组,再处理成 `定义动态路由` 的格式
|
|
|
|
|
// 只保留二级:也就是二级以上全部处理成只有二级,keep-alive 支持二级缓存
|
|
|
|
|
// isKeepAlive 处理 `name` 值,进行缓存。顶级关闭,全部不缓存
|
|
|
|
|
export function formatTwoStageRoutes(arr: any) {
|
2021-04-23 15:30:32 +08:00
|
|
|
|
if (arr.length <= 0) return false;
|
2021-03-15 12:44:58 +08:00
|
|
|
|
const newArr: any = [];
|
|
|
|
|
const cacheList: Array<string> = [];
|
2021-03-25 18:07:15 +08:00
|
|
|
|
arr.forEach((v: any) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
if (v.path === '/') {
|
|
|
|
|
newArr.push({ component: v.component, name: v.name, path: v.path, redirect: v.redirect, meta: v.meta, children: [] });
|
|
|
|
|
} else {
|
|
|
|
|
newArr[0].children.push({ ...v });
|
|
|
|
|
if (newArr[0].meta.isKeepAlive && v.meta.isKeepAlive) {
|
|
|
|
|
cacheList.push(v.name);
|
|
|
|
|
store.dispatch('keepAliveNames/setCacheKeepAlive', cacheList);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return newArr;
|
2021-01-21 18:59:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-31 15:47:43 +08:00
|
|
|
|
// 缓存多级嵌套数组处理后的一维数组(tagsView、菜单搜索中使用:未过滤隐藏的(isHide))
|
2021-01-21 23:36:07 +08:00
|
|
|
|
export function setCacheTagsViewRoutes() {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
// 先处理有权限的路由,否则 tagsView、菜单搜索中无权限的路由也将显示
|
|
|
|
|
let authsRoutes = setFilterMenuFun(dynamicRoutes, store.state.userInfos.userInfos.authPageList);
|
|
|
|
|
// 添加到 vuex setTagsViewRoutes 中
|
|
|
|
|
store.dispatch('tagsViewRoutes/setTagsViewRoutes', formatTwoStageRoutes(formatFlatteningRoutes(authsRoutes))[0].children);
|
2021-01-21 23:36:07 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-26 18:17:13 +08:00
|
|
|
|
// 获取当前用户的权限去比对路由表,用于左侧菜单/横向菜单的显示
|
|
|
|
|
export function setFilterMenu() {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
store.dispatch('routesList/setRoutesList', setFilterMenuFun(dynamicRoutes[0].children, store.state.userInfos.userInfos.authPageList));
|
2021-01-26 18:17:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 判断路由 auth 中是否包含当前登录用户权限字段
|
|
|
|
|
export function hasAuth(auths: any, route: any) {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
if (route.meta && route.meta.auth) return auths.some((auth: any) => route.meta.auth.includes(auth));
|
|
|
|
|
else return true;
|
2021-01-26 18:17:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-27 17:54:58 +08:00
|
|
|
|
// 递归过滤有权限的路由
|
2021-01-26 18:17:13 +08:00
|
|
|
|
export function setFilterMenuFun(routes: any, auth: any) {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
const menu: any = [];
|
2021-03-25 18:07:15 +08:00
|
|
|
|
routes.forEach((route: any) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
const item = { ...route };
|
|
|
|
|
if (hasAuth(auth, item)) {
|
|
|
|
|
if (item.children) item.children = setFilterMenuFun(item.children, auth);
|
|
|
|
|
menu.push(item);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
return menu;
|
2021-01-26 18:17:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取当前用户的权限去比对路由表,用于动态路由的添加
|
2021-03-25 18:07:15 +08:00
|
|
|
|
export function setFilterRoute(chil: any) {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
let filterRoute: any = [];
|
2021-03-25 18:07:15 +08:00
|
|
|
|
chil.forEach((route: any) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
if (route.meta.auth)
|
2021-03-25 18:07:15 +08:00
|
|
|
|
route.meta.auth.forEach((metaAuth: any) => {
|
|
|
|
|
store.state.userInfos.userInfos.authPageList.forEach((auth: any) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
if (metaAuth === auth) filterRoute.push({ ...route });
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
return filterRoute;
|
2021-01-26 18:17:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 比对后的路由表,进行重新赋值
|
|
|
|
|
export function setFilterRouteEnd() {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
let filterRouteEnd: any = formatTwoStageRoutes(formatFlatteningRoutes(dynamicRoutes));
|
2021-03-25 18:07:15 +08:00
|
|
|
|
filterRouteEnd[0].children = setFilterRoute(filterRouteEnd[0].children);
|
2021-03-15 12:44:58 +08:00
|
|
|
|
return filterRouteEnd;
|
2021-01-26 18:17:13 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-21 18:59:16 +08:00
|
|
|
|
// 添加动态路由
|
|
|
|
|
export function setAddRoute() {
|
2021-03-25 18:07:15 +08:00
|
|
|
|
setFilterRouteEnd().forEach((route: any) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
router.addRoute((route as unknown) as RouteRecordRaw);
|
|
|
|
|
});
|
2021-01-21 18:59:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 删除/重置路由
|
|
|
|
|
export function resetRoute() {
|
2021-03-25 18:07:15 +08:00
|
|
|
|
setFilterRouteEnd().forEach((route: any) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
const { name } = route;
|
|
|
|
|
router.hasRoute(name) && router.removeRoute(name);
|
|
|
|
|
});
|
2021-01-21 18:59:16 +08:00
|
|
|
|
}
|
|
|
|
|
|
2021-01-27 17:54:58 +08:00
|
|
|
|
// 初始化方法执行
|
2021-04-23 15:30:32 +08:00
|
|
|
|
const { isRequestRoutes } = store.state.themeConfig.themeConfig;
|
|
|
|
|
if (!isRequestRoutes) {
|
|
|
|
|
// 未开启后端控制路由
|
|
|
|
|
initAllFun();
|
|
|
|
|
} else if (isRequestRoutes) {
|
|
|
|
|
// 后端控制路由,isRequestRoutes 为 true,则开启后端控制路由
|
|
|
|
|
initBackEndControlRoutesFun();
|
|
|
|
|
}
|
2021-01-26 18:17:13 +08:00
|
|
|
|
|
2021-01-27 17:54:58 +08:00
|
|
|
|
// 路由加载前
|
|
|
|
|
router.beforeEach((to, from, next) => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
NProgress.configure({ showSpinner: false });
|
|
|
|
|
if (to.meta.title) NProgress.start();
|
|
|
|
|
const token = getSession('token');
|
|
|
|
|
if (to.path === '/login' && !token) {
|
|
|
|
|
next();
|
|
|
|
|
NProgress.done();
|
|
|
|
|
} else {
|
|
|
|
|
if (!token) {
|
|
|
|
|
next('/login');
|
|
|
|
|
clearSession();
|
|
|
|
|
resetRoute();
|
|
|
|
|
NProgress.done();
|
|
|
|
|
} else if (token && to.path === '/login') {
|
|
|
|
|
next('/home');
|
|
|
|
|
NProgress.done();
|
|
|
|
|
} else {
|
2021-04-23 15:30:32 +08:00
|
|
|
|
if (store.state.routesList.routesList.length > 0) next();
|
2021-03-15 12:44:58 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
2020-12-31 11:47:52 +08:00
|
|
|
|
|
2021-01-27 17:54:58 +08:00
|
|
|
|
// 路由加载后
|
|
|
|
|
router.afterEach(() => {
|
2021-03-15 12:44:58 +08:00
|
|
|
|
NProgress.done();
|
2021-03-25 18:07:15 +08:00
|
|
|
|
NextLoading.done();
|
2021-03-15 12:44:58 +08:00
|
|
|
|
});
|
2020-12-31 11:47:52 +08:00
|
|
|
|
|
2021-01-31 15:47:43 +08:00
|
|
|
|
// 导出路由
|
2021-03-15 12:44:58 +08:00
|
|
|
|
export default router;
|