mirror of
https://gitee.com/lab1024/smart-admin.git
synced 2025-11-12 05:33:48 +08:00
2.0的js版本和后端 完成
This commit is contained in:
151
smart-admin-web/javascript-ant-design-vue3/src/router/index.js
Normal file
151
smart-admin-web/javascript-ant-design-vue3/src/router/index.js
Normal file
@@ -0,0 +1,151 @@
|
||||
/*
|
||||
* 路由
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:52:04
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022
|
||||
*/
|
||||
import nProgress from 'nprogress';
|
||||
import 'nprogress/nprogress.css';
|
||||
import { nextTick } from 'vue';
|
||||
import { createRouter, createWebHashHistory } from 'vue-router';
|
||||
import { routerArray } from './routers';
|
||||
import { PAGE_PATH_404, PAGE_PATH_LOGIN } from '/@/constants/common-const';
|
||||
import { HOME_PAGE_NAME } from '/@/constants/system/home-const';
|
||||
import SmartLayout from '/@/layout/smart-layout.vue';
|
||||
import { useUserStore } from '/@/store/modules/system/user';
|
||||
import { clearAllCoolies, getTokenFromCookie } from '/@/utils/cookie-util';
|
||||
import { localClear } from '/@/utils/local-util';
|
||||
|
||||
export const router = createRouter({
|
||||
history: createWebHashHistory(),
|
||||
routes: routerArray,
|
||||
strict: true,
|
||||
scrollBehavior: () => ({ left: 0, top: 0 }),
|
||||
});
|
||||
|
||||
// ----------------------- 路由加载前 -----------------------
|
||||
router.beforeEach(async (to, from, next) => {
|
||||
// 进度条开启
|
||||
nProgress.start();
|
||||
|
||||
// 公共页面,任何时候都可以跳转
|
||||
if (to.path === PAGE_PATH_404 || to.path === PAGE_PATH_LOGIN) {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
|
||||
// 验证登录
|
||||
const token = getTokenFromCookie();
|
||||
if (!token) {
|
||||
clearAllCoolies();
|
||||
localClear();
|
||||
next({ path: PAGE_PATH_LOGIN });
|
||||
return;
|
||||
}
|
||||
|
||||
// 首页( 需要登录 ,但不需要验证权限)
|
||||
if (to.path == HOME_PAGE_NAME) {
|
||||
next();
|
||||
return;
|
||||
}
|
||||
|
||||
// 是否刷新缓存
|
||||
// 当前路由是否在tag中 存在tag中且没有传递keepAlive则刷新缓存
|
||||
let findTag = (useUserStore().tagNav || []).find((e) => e.menuName == to.name);
|
||||
let reloadKeepAlive = findTag && !to.params.keepAlive;
|
||||
|
||||
// 设置tagNav
|
||||
useUserStore().setTagNav(to, from);
|
||||
// 设置keepAlive 或 删除KeepAlive
|
||||
if (to.meta.keepAlive) {
|
||||
if (reloadKeepAlive) {
|
||||
useUserStore().deleteKeepAliveIncludes(to.name?.toString());
|
||||
}
|
||||
nextTick(() => {
|
||||
useUserStore().pushKeepAliveIncludes(to.name?.toString());
|
||||
});
|
||||
}
|
||||
next();
|
||||
});
|
||||
|
||||
// ----------------------- 路由加载后 -----------------------
|
||||
router.afterEach(() => {
|
||||
nProgress.done();
|
||||
});
|
||||
|
||||
// ----------------------- 构建router对象 -----------------------
|
||||
export function buildRoutes(menuRouterList) {
|
||||
let menuList = menuRouterList ? menuRouterList : useUserStore().getMenuRouterList || [];
|
||||
/**
|
||||
* 1、构建整个路由信息
|
||||
* 2、添加到路由里
|
||||
*/
|
||||
const resList = [];
|
||||
// 获取所有vue组件引用地址 用于构建路由
|
||||
const modules = import.meta.glob('../views/**/**.vue');
|
||||
// 获取所有vue组件 用于注入name属性 name属性用于keep-alive
|
||||
const modulesEager = import.meta.globEager('../views/**/**.vue');
|
||||
|
||||
//1、构建整个路由信息
|
||||
for (const e of menuList) {
|
||||
if (!e.menuId) {
|
||||
continue;
|
||||
}
|
||||
if (!e.path) {
|
||||
continue;
|
||||
}
|
||||
if (e.deletedFlag && e.deletedFlag === 1) {
|
||||
continue;
|
||||
}
|
||||
let menuIdStr = e.menuId.toString();
|
||||
let route = {
|
||||
path: e.path.startsWith('/') ? e.path : `/${e.path}`,
|
||||
// 使用menuId作为name唯一标识
|
||||
name: menuIdStr,
|
||||
meta: {
|
||||
// 菜单展示
|
||||
title: e.menuName,
|
||||
// 菜单图标展示
|
||||
icon: e.icon,
|
||||
// 是否在菜单隐藏
|
||||
hideInMenu: !e.visibleFlag,
|
||||
// 页面是否keep-alive缓存
|
||||
keepAlive: e.cacheFlag,
|
||||
// 是否为外链
|
||||
frameFlag: e.frameFlag,
|
||||
// 外链地址
|
||||
frameUrl: e.frameUrl,
|
||||
},
|
||||
};
|
||||
|
||||
if (e.frameFlag) {
|
||||
route.component = () => import('../components/framework/iframe/route-default-component.vue');
|
||||
resList.push(route);
|
||||
continue;
|
||||
}
|
||||
|
||||
let componentPath = e.component && e.component.startsWith('/') ? e.component : '/' + e.component;
|
||||
let relativePath = `../views${componentPath}`;
|
||||
// eslint-disable-next-line no-prototype-builtins
|
||||
if (modules.hasOwnProperty(relativePath)) {
|
||||
route.component = modules[relativePath];
|
||||
// 组件注入name
|
||||
let eager = modulesEager[relativePath];
|
||||
if (eager) {
|
||||
eager.default.name = menuIdStr;
|
||||
}
|
||||
}
|
||||
resList.push(route);
|
||||
}
|
||||
|
||||
//2、添加到路由里
|
||||
router.addRoute({
|
||||
path: '/',
|
||||
meta: {},
|
||||
component: SmartLayout,
|
||||
children: resList,
|
||||
});
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* 所有路由入口
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:52:26
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022
|
||||
*/
|
||||
import { homeRouters } from './system/home';
|
||||
import { loginRouters } from './system/login';
|
||||
import { helpDocRouters } from './support/help-doc';
|
||||
|
||||
export const routerArray = [...loginRouters, ...homeRouters, ...helpDocRouters];
|
||||
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* 帮助文档
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:53:19
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022
|
||||
*/
|
||||
import SmartHelpDocLayout from '/@/layout/smart-help-doc-layout.vue';
|
||||
|
||||
export const helpDocRouters = [
|
||||
{
|
||||
path: '/help-doc',
|
||||
name: 'HelpDoc',
|
||||
component: SmartHelpDocLayout,
|
||||
meta: {
|
||||
title: '帮助文档',
|
||||
hideInMenu: true,
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: '/help-doc/detail',
|
||||
component: () => import('/@/views/support/help-doc/user-view/help-doc-user-view.vue'),
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 首页路由
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:51:41
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022
|
||||
*/
|
||||
import { HOME_PAGE_NAME } from '/@/constants/system/home-const';
|
||||
import { MENU_TYPE_ENUM } from '/@/constants/system/menu-const';
|
||||
import SmartLayout from '/@/layout/smart-layout.vue';
|
||||
|
||||
export const homeRouters = [
|
||||
{
|
||||
path: '/',
|
||||
name: '_home',
|
||||
redirect: { name: HOME_PAGE_NAME },
|
||||
component: SmartLayout,
|
||||
meta: {
|
||||
title: '首页',
|
||||
menuType: MENU_TYPE_ENUM.CATALOG.value,
|
||||
icon: 'HomeOutlined',
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: '/home',
|
||||
name: HOME_PAGE_NAME,
|
||||
meta: {
|
||||
title: '首页',
|
||||
menuType: MENU_TYPE_ENUM.MENU.value,
|
||||
icon: 'HomeOutlined',
|
||||
parentMenuList: [{ name: '_home', title: '首页' }],
|
||||
},
|
||||
component: () => import('/@/views/system/home/index.vue'),
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* 登录页面
|
||||
*
|
||||
* @Author: 1024创新实验室-主任:卓大
|
||||
* @Date: 2022-09-06 20:51:50
|
||||
* @Wechat: zhuda1024
|
||||
* @Email: lab1024@163.com
|
||||
* @Copyright 1024创新实验室 ( https://1024lab.net ),2012-2022
|
||||
*/
|
||||
|
||||
export const loginRouters = [
|
||||
{
|
||||
path: '/login',
|
||||
name: 'Login',
|
||||
component: () => import('/@/views/system/login/login.vue'),
|
||||
meta: {
|
||||
title: '登录',
|
||||
hideInMenu: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
Reference in New Issue
Block a user