Commit 2236c587 authored by 张伯涛's avatar 张伯涛

Merge remote-tracking branch 'origin/1.0.0_RBAC' into 1.0.0_RBAC

parents d1514799 d136452f
...@@ -6,9 +6,10 @@ import { useSettingsStore } from "@/store/modules/settings"; ...@@ -6,9 +6,10 @@ import { useSettingsStore } from "@/store/modules/settings";
import { usePermissionStore } from "@/store/modules/permission"; import { usePermissionStore } from "@/store/modules/permission";
import { useAppStore } from "@/store/modules/app"; import { useAppStore } from "@/store/modules/app";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { useUserStore } from "@/store/modules/user";
const settingsStore = useSettingsStore(); const settingsStore = useSettingsStore();
const permissionStore = usePermissionStore(); const userStore = useUserStore();
const appStore = useAppStore(); const appStore = useAppStore();
const { sidebarLogo } = storeToRefs(settingsStore); const { sidebarLogo } = storeToRefs(settingsStore);
const layout = computed(() => settingsStore.layout); const layout = computed(() => settingsStore.layout);
...@@ -32,7 +33,7 @@ watch( ...@@ -32,7 +33,7 @@ watch(
> >
<logo v-if="sidebarLogo" :collapse="!appStore.sidebar.opened" /> <logo v-if="sidebarLogo" :collapse="!appStore.sidebar.opened" />
<el-scrollbar v-if="showContent"> <el-scrollbar v-if="showContent">
<LeftMenu :menu-list="permissionStore.routes" base-path="" /> <LeftMenu :menu-list="userStore.menus" base-path="" />
</el-scrollbar> </el-scrollbar>
<NavRight v-if="layout === 'top'" /> <NavRight v-if="layout === 'top'" />
</div> </div>
......
...@@ -11,9 +11,14 @@ import { UserInfo } from "@/api/user/types"; ...@@ -11,9 +11,14 @@ import { UserInfo } from "@/api/user/types";
import { getToken, setToken } from "@/utils/auth"; import { getToken, setToken } from "@/utils/auth";
import { ref } from "vue"; import { ref } from "vue";
import { isBoolean } from "lodash";
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");
type CustomRoute = RouteRecordRaw & {
hidden?: boolean;
};
export const useUserStore = defineStore("user", () => { export const useUserStore = defineStore("user", () => {
const user = reactive<UserInfo>({ const user = reactive<UserInfo>({
token: getToken(), token: getToken(),
...@@ -108,7 +113,7 @@ export const useUserStore = defineStore("user", () => { ...@@ -108,7 +113,7 @@ export const useUserStore = defineStore("user", () => {
// 接口获取所有路由 // 接口获取所有路由
if (menusList.length > 0) { if (menusList.length > 0) {
// 根据角色获取有访问权限的路由 // 根据角色获取有访问权限的路由
const accessedRoutes = filterAsyncRoutes(menusList); const accessedRoutes = filterAsyncRoutes(menusList, 0);
setRoutes(accessedRoutes); setRoutes(accessedRoutes);
resolve(accessedRoutes); resolve(accessedRoutes);
} else { } else {
...@@ -125,13 +130,17 @@ export const useUserStore = defineStore("user", () => { ...@@ -125,13 +130,17 @@ export const useUserStore = defineStore("user", () => {
* 递归过滤有权限的异步(动态)路由 * 递归过滤有权限的异步(动态)路由
* *
* @param routes 接口返回的异步(动态)路由 * @param routes 接口返回的异步(动态)路由
* @param upIndex 上一个Index
* @returns 返回用户有权限的异步(动态)路由 * @returns 返回用户有权限的异步(动态)路由
*/ */
function filterAsyncRoutes(routes: RouteRecordRaw[]) { function filterAsyncRoutes(routes: CustomRoute[], upIndex: number) {
return routes.filter((route) => { return routes.filter((route, nextIndex) => {
if (route.path[0] !== "/") { if (route.path[0] !== "/") {
route.path = "/" + route.path; route.path = "/" + route.path;
} }
if (route.meta && isBoolean(route.hidden)) {
route.meta.hidden = route.hidden;
}
if (route.component) { if (route.component) {
// Layout组件特殊处理 // Layout组件特殊处理
if (route.component?.toString() === "Layout") { if (route.component?.toString() === "Layout") {
...@@ -141,7 +150,7 @@ export const useUserStore = defineStore("user", () => { ...@@ -141,7 +150,7 @@ export const useUserStore = defineStore("user", () => {
} }
} }
if (route.children != null && route.children && route.children.length) { if (route.children != null && route.children && route.children.length) {
route.children = filterAsyncRoutes(route.children); route.children = filterAsyncRoutes(route.children, nextIndex);
} }
return true; return true;
}); });
...@@ -149,6 +158,7 @@ export const useUserStore = defineStore("user", () => { ...@@ -149,6 +158,7 @@ export const useUserStore = defineStore("user", () => {
return { return {
user, user,
menus,
login, login,
getUserInfo, getUserInfo,
logout, logout,
......
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