index.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import type { App } from "vue";
  2. import NProgress from "@/config/nprogress";
  3. import { routes } from "@/router/routes.inner";
  4. import { useRouteStore, useTabStore, useUserStore } from "@/stores";
  5. import { $t, setDocumentTitle } from "@/utils";
  6. import { createRouter, createWebHashHistory } from "vue-router";
  7. export const router = createRouter({
  8. history: createWebHashHistory(import.meta.env.BASE_URL),
  9. routes,
  10. });
  11. export async function installRouter(app: App) {
  12. const routeStore = useRouteStore();
  13. const tabStore = useTabStore();
  14. const userStore = useUserStore();
  15. router.beforeEach(async (to, from, next) => {
  16. NProgress.start();
  17. // 是否已经登录过
  18. // if (!userStore.accessToken) {
  19. // if (to.name === "login") {
  20. // next();
  21. // } else {
  22. // next({ name: "login" });
  23. // }
  24. // return false;
  25. // }
  26. // 判断路由有无进行初始化
  27. if (!routeStore.isInitAuthRoute) {
  28. await routeStore.initAuthRoute();
  29. // 初始化标签
  30. tabStore.initTab();
  31. // 动态路由加载完回到根路由
  32. if (to.name === "not-found") {
  33. // 等待权限路由加载好了,回到之前的路由
  34. next({
  35. path: to.fullPath,
  36. replace: true,
  37. query: to.query,
  38. hash: to.hash,
  39. });
  40. return false;
  41. }
  42. }
  43. next();
  44. });
  45. router.beforeResolve((to) => {
  46. // 设置菜单高亮
  47. routeStore.setActiveMenu(to.meta.activeMenu || to.fullPath);
  48. // 添加 tag
  49. tabStore.addTab(to);
  50. // 设置当前激活的标签
  51. tabStore.setCurrentTab(to.path);
  52. });
  53. router.afterEach((to) => {
  54. // 修改网页标题
  55. setDocumentTitle(
  56. to.path === "/login" ? $t("page.login.title") : to.meta.title
  57. );
  58. // 结束 NProgress
  59. NProgress.done();
  60. });
  61. app.use(router);
  62. await router.isReady();
  63. }