Commit dcf1d2ef authored by 张毅辰's avatar 张毅辰

路由更改提交

parent 6fdb8357
import router from "@/router"; import router from "@/router";
import { useUserStoreHook } from "@/store/modules/user"; import { useUserStoreHook } from "@/store/modules/user";
import { usePermissionStoreHook } from "@/store/modules/permission";
import { getToken } from "@/utils/auth"; import { getToken } from "@/utils/auth";
import NProgress from "nprogress"; import NProgress from "nprogress";
...@@ -9,7 +8,6 @@ import "nprogress/nprogress.css"; ...@@ -9,7 +8,6 @@ import "nprogress/nprogress.css";
NProgress.configure({ showSpinner: false }); // 进度条 NProgress.configure({ showSpinner: false }); // 进度条
const userStore = useUserStoreHook(); const userStore = useUserStoreHook();
const permissionStore = usePermissionStoreHook();
// 白名单路由 // 白名单路由
const whiteList = ["/login"]; const whiteList = ["/login"];
...@@ -32,20 +30,15 @@ router.beforeEach(async (to, from, next) => { ...@@ -32,20 +30,15 @@ router.beforeEach(async (to, from, next) => {
} }
} else { } else {
try { try {
const { roles, permissions, menus, user } = const { permissions } = await userStore.getUserInfo();
await userStore.getUserInfo();
if (permissions && permissions.length > 0) { if (permissions && permissions.length > 0) {
const accessRoutes = await userStore.generateRoutes(); const accessRoutes = await userStore.generateRoutes();
// const accessRoutes = await permissionStore.generateRoutes(roles);
console.log(accessRoutes);
accessRoutes.forEach((route) => { accessRoutes.forEach((route) => {
console.log(route);
router.addRoute(route); router.addRoute(route);
}); });
next({ ...to, replace: true }); next({ ...to, replace: true });
} else { } else {
userStore.logout().then((_) => { userStore.logout().then((_) => {
console.log("用户无权限2");
alert("用户无权限"); alert("用户无权限");
next(`/login`); next(`/login`);
}); });
......
import { RouteRecordRaw } from "vue-router"; import { RouteRecordRaw } from "vue-router";
import { defineStore } from "pinia"; import { defineStore } from "pinia";
import { loginApi, logoutApi } from "@/api/auth"; import { loginApi } from "@/api/auth";
import { getUserInfoApi } from "@/api/user"; import { getUserInfoApi } from "@/api/user";
import { constantRoutes, resetRouter } from "@/router"; import { constantRoutes, resetRouter } from "@/router";
import { store } from "@/store"; import { store } from "@/store";
...@@ -9,10 +9,8 @@ import { store } from "@/store"; ...@@ -9,10 +9,8 @@ import { store } from "@/store";
import { LoginData } from "@/api/auth/types"; import { LoginData } from "@/api/auth/types";
import { UserInfo } from "@/api/user/types"; import { UserInfo } from "@/api/user/types";
import { useStorage } from "@vueuse/core";
import { getToken, setToken } from "@/utils/auth"; import { getToken, setToken } from "@/utils/auth";
import { ref } from "vue"; import { ref } from "vue";
import { listRoutes } from "@/api/menu";
const Layout = () => import("@/layout/index.vue"); const Layout = () => import("@/layout/index.vue");
const modules = import.meta.glob("../../views/**/**.vue"); const modules = import.meta.glob("../../views/**/**.vue");
...@@ -26,6 +24,7 @@ export const useUserStore = defineStore("user", () => { ...@@ -26,6 +24,7 @@ export const useUserStore = defineStore("user", () => {
specialTag: "", specialTag: "",
}); });
const menus = ref<RouteRecordRaw[]>([]); const menus = ref<RouteRecordRaw[]>([]);
let menusList: RouteRecordRaw[] = [];
function setRoutes(newRoutes: RouteRecordRaw[]) { function setRoutes(newRoutes: RouteRecordRaw[]) {
menus.value = constantRoutes.concat(newRoutes); menus.value = constantRoutes.concat(newRoutes);
...@@ -33,7 +32,6 @@ export const useUserStore = defineStore("user", () => { ...@@ -33,7 +32,6 @@ export const useUserStore = defineStore("user", () => {
/** /**
* 登录 * 登录
* *
* @param {LoginData}
* @returns * @returns
*/ */
function login(loginData: LoginData) { function login(loginData: LoginData) {
...@@ -60,12 +58,12 @@ export const useUserStore = defineStore("user", () => { ...@@ -60,12 +58,12 @@ export const useUserStore = defineStore("user", () => {
} else { } else {
user.roles = ["ROLE_DEFAULT"]; user.roles = ["ROLE_DEFAULT"];
} }
user.roles = data.roles;
user.permissions = data.permissions; user.permissions = data.permissions;
user.username = data.user?.username; user.username = data.user?.username;
user.specialTag = data.user?.specialTag; user.specialTag = data.user?.specialTag;
user.avatar = data.user?.avatar; user.avatar = data.user?.avatar;
menus.value = data.menus; menus.value = data.menus;
menusList = data.menus;
resolve(data); resolve(data);
}) })
.catch((error) => { .catch((error) => {
...@@ -76,16 +74,18 @@ export const useUserStore = defineStore("user", () => { ...@@ -76,16 +74,18 @@ export const useUserStore = defineStore("user", () => {
// user logout // user logout
function logout() { function logout() {
return new Promise<void>((resolve, reject) => { return new Promise<void>((resolve) => {
logoutApi() // logoutApi()
.then(() => { // .then(() => {
user.token = ""; user.token = "";
location.reload(); // 清空路由 user.roles = [];
resolve(); user.permissions = [];
}) location.reload(); // 清空路由
.catch((error) => { resolve();
reject(error); // })
}); // .catch((error) => {
// reject(error);
// });
}); });
} }
...@@ -106,10 +106,9 @@ export const useUserStore = defineStore("user", () => { ...@@ -106,10 +106,9 @@ export const useUserStore = defineStore("user", () => {
function generateRoutes() { function generateRoutes() {
return new Promise<RouteRecordRaw[]>((resolve, reject) => { return new Promise<RouteRecordRaw[]>((resolve, reject) => {
// 接口获取所有路由 // 接口获取所有路由
if (menus.value.length > 0) { if (menusList.length > 0) {
// 根据角色获取有访问权限的路由 // 根据角色获取有访问权限的路由
const accessedRoutes = filterAsyncRoutes(menus.value); const accessedRoutes = filterAsyncRoutes(menusList);
console.log(accessedRoutes);
setRoutes(accessedRoutes); setRoutes(accessedRoutes);
resolve(accessedRoutes); resolve(accessedRoutes);
} else { } else {
...@@ -119,19 +118,20 @@ export const useUserStore = defineStore("user", () => { ...@@ -119,19 +118,20 @@ export const useUserStore = defineStore("user", () => {
} }
function loadView(view: any) { function loadView(view: any) {
// return () => import(`@/views/${view}.vue`); // return () => import(`@/views/${view}.vue`);
const path = modules[`../../views/${view}.vue`]; return modules[`../../views/${view}.vue`];
return path;
} }
/** /**
* 递归过滤有权限的异步(动态)路由 * 递归过滤有权限的异步(动态)路由
* *
* @param routes 接口返回的异步(动态)路由 * @param routes 接口返回的异步(动态)路由
* @param roles 用户角色集合
* @returns 返回用户有权限的异步(动态)路由 * @returns 返回用户有权限的异步(动态)路由
*/ */
function filterAsyncRoutes(routes: RouteRecordRaw[]) { function filterAsyncRoutes(routes: RouteRecordRaw[]) {
return routes.filter((route) => { return routes.filter((route) => {
if (route.path[0] !== "/") {
route.path = "/" + route.path;
}
if (route.component) { if (route.component) {
// Layout组件特殊处理 // Layout组件特殊处理
if (route.component?.toString() === "Layout") { if (route.component?.toString() === "Layout") {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment