73 lines
1.7 KiB
TypeScript
Raw Normal View History

2025-06-29 17:22:25 +08:00
import { createRouter, createWebHistory, RouteRecordRaw } from "vue-router";
2025-07-04 22:45:22 +08:00
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
2025-06-29 17:22:25 +08:00
import Login from "@/views/login/index.vue"; //登录组件
2025-07-01 17:50:27 +08:00
import Layout from "@/views/layout/index.vue"; //首页布局
import CallBack from "@/views/login/OauthCallBack.vue"; //反馈页面
2025-07-04 22:45:22 +08:00
import Home from "@/views/home/index.vue"; //家
import Auth from "@/views/role/pages/Auth.vue"; //权限管理
import Menu from '@/views/system/menu/index.vue'; //动态权限菜单
import { getToken } from "@/utils/auth";
const whiteList = ["/callback"];
2025-06-29 17:22:25 +08:00
const routes: Array<RouteRecordRaw> = [
{
path: "/",
name: "Login",
component: Login,
},
2025-07-01 17:50:27 +08:00
{
path: "/callback",
name: "CallBack",
component: CallBack,
},
{
path: "/layout",
name: "Layout",
component: Layout,
2025-07-04 22:45:22 +08:00
children: [
2025-07-03 20:19:09 +08:00
{
2025-07-04 22:45:22 +08:00
path: "",
name: "home",
component: Home,
2025-07-03 20:19:09 +08:00
},
// 后续用动态菜单
{
2025-07-04 22:45:22 +08:00
path: "role",
name: "roleAuth",
component: Auth,
},
{
path: "menu",
name: "menu",
component: Menu,
},
],
2025-07-01 17:50:27 +08:00
},
2025-06-29 17:22:25 +08:00
];
const router = createRouter({
history: createWebHistory(),
routes,
});
router.beforeEach((to, from, next) => {
2025-07-04 22:45:22 +08:00
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
2025-06-29 17:22:25 +08:00
});
export default router;