84 lines
2.0 KiB
TypeScript

import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import Login from "@/views/login/index.vue"; //登录组件
import Layout from "@/views/layout/index.vue"; //首页布局
import CallBack from "@/views/login/OauthCallBack.vue"; //反馈页面
import Home from "@/views/home/index.vue"; //家
import Auth from "@/views/role/pages/Auth.vue"; //权限管理
import Menu from "@/views/system/menu/index.vue"; //动态权限菜单
import Dict from "@/views/system/dict/index.vue"; //用户字典
import GlobalSys from "@/views/system/globalSys/index.vue"; //全局参数
import { getToken } from "@/utils/auth";
const whiteList = ["/callback"];
const routes: Array<RouteRecordRaw> = [
{
path: "/",
name: "Login",
component: Login,
},
{
path: "/callback",
name: "CallBack",
component: CallBack,
},
{
path: "/layout",
name: "Layout",
component: Layout,
children: [
{
path: "", // 匹配 /layout
name: "home",
component: Home,
},
{
path: "role", // 匹配 /layout/role
name: "roleAuth",
component: Auth,
},
{
path: "menu",
name: "menu",
component: Menu,
},
{
path: "dict",
name: "dict",
component: Dict,
},
{
path: "globalSys",
name: "globalSys",
component: GlobalSys,
},
],
},
];
const router = createRouter({
history: createWebHistory(),
routes,
});
router.beforeEach((to, from, next) => {
const token = getToken();
NProgress.start();
if (to.path === "/") {
token ? next("/callback") : next(); // 有 token 直接去 /layout
} else if (whiteList.includes(to.path)) {
next(); // 放行 /callback
} else {
token ? next() : next("/"); // 其他页面检查 token
}
});
router.afterEach(() => {
NProgress.done(); // finish progress bar
});
export default router;