Skip to content

Commit ebf59fd

Browse files
committed
移除routeStore.routes
1 parent e983de6 commit ebf59fd

File tree

2 files changed

+56
-78
lines changed

2 files changed

+56
-78
lines changed

src/store/modules/menu.ts

+55-27
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import { cloneDeep } from 'lodash-es'
2+
import type { RouteRecordRaw } from 'vue-router'
23
import useSettingsStore from './settings'
34
import useUserStore from './user'
45
import useRouteStore from './route'
56
import { resolveRoutePath } from '@/utils'
67
import apiApp from '@/api/modules/app'
78
import menu from '@/menu'
8-
import type { Menu } from '#/global'
9+
import type { Menu, Route } from '#/global'
910

1011
const useMenuStore = defineStore(
1112
// 唯一ID
@@ -15,42 +16,69 @@ const useMenuStore = defineStore(
1516
const userStore = useUserStore()
1617
const routeStore = useRouteStore()
1718

18-
const menus = ref<Menu.recordMainRaw[]>([{
19-
meta: {},
20-
children: [],
21-
}])
19+
const filesystemMenusRaw = ref<Menu.recordMainRaw[]>([])
2220
const actived = ref(0)
2321

24-
// 将多级导航的每一级 path 都转换为完整路径
25-
function convertToFullPath(menu: any[], path: string = '') {
26-
return menu.map((item) => {
27-
item.path = resolveRoutePath(path, item.path)
22+
// 将原始路由转换成导航菜单
23+
function convertRouteToMenu(routes: Route.recordMainRaw[]): Menu.recordMainRaw[] {
24+
const returnMenus: Menu.recordMainRaw[] = []
25+
routes.forEach((item) => {
26+
if (settingsStore.settings.menu.menuMode === 'single') {
27+
returnMenus.length === 0 && returnMenus.push({
28+
meta: {},
29+
children: [],
30+
})
31+
returnMenus[0].children.push(...convertRouteToMenuRecursive(item.children))
32+
}
33+
else {
34+
const menuItem: Menu.recordMainRaw = {
35+
meta: {
36+
title: item?.meta?.title,
37+
icon: item?.meta?.icon,
38+
auth: item?.meta?.auth,
39+
},
40+
children: [],
41+
}
42+
menuItem.children = convertRouteToMenuRecursive(item.children)
43+
returnMenus.push(menuItem)
44+
}
45+
})
46+
return returnMenus
47+
}
48+
function convertRouteToMenuRecursive(routes: RouteRecordRaw[], basePath = ''): Menu.recordRaw[] {
49+
const returnMenus: Menu.recordRaw[] = []
50+
routes.forEach((item) => {
51+
const menuItem: Menu.recordRaw = {
52+
path: resolveRoutePath(basePath, item.path),
53+
meta: {
54+
title: item?.meta?.title,
55+
icon: item?.meta?.icon,
56+
defaultOpened: item?.meta?.defaultOpened,
57+
auth: item?.meta?.auth,
58+
menu: item?.meta?.menu,
59+
link: item?.meta?.link,
60+
},
61+
}
2862
if (item.children) {
29-
item.children = convertToFullPath(item.children, item.path)
63+
menuItem.children = convertRouteToMenuRecursive(item.children, menuItem.path)
3064
}
31-
return item
65+
returnMenus.push(menuItem)
3266
})
67+
return returnMenus
3368
}
69+
3470
// 完整导航数据
3571
const allMenus = computed(() => {
36-
let returnMenus: Menu.recordMainRaw[] = [{
37-
meta: {},
38-
children: [],
39-
}]
72+
let returnMenus: Menu.recordMainRaw[] = []
4073
if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {
41-
if (settingsStore.settings.menu.menuMode === 'single') {
42-
returnMenus[0].children = []
43-
routeStore.routes.forEach((item) => {
44-
returnMenus[0].children?.push(...item.children as Menu.recordRaw[])
45-
})
46-
}
47-
else {
48-
returnMenus = routeStore.routes as Menu.recordMainRaw[]
74+
returnMenus = convertRouteToMenu(routeStore.routesRaw)
75+
// 如果权限功能开启,则需要对导航数据进行筛选过滤
76+
if (settingsStore.settings.app.enablePermission) {
77+
returnMenus = filterAsyncMenus(returnMenus, userStore.permissions)
4978
}
50-
returnMenus.map(item => convertToFullPath(item.children))
5179
}
5280
else {
53-
returnMenus = menus.value
81+
returnMenus = filesystemMenusRaw.value
5482
}
5583
return returnMenus
5684
})
@@ -157,7 +185,7 @@ const useMenuStore = defineStore(
157185
else {
158186
accessedMenus = cloneDeep(menu)
159187
}
160-
menus.value = accessedMenus.filter(item => item.children.length !== 0)
188+
filesystemMenusRaw.value = accessedMenus.filter(item => item.children.length !== 0)
161189
}
162190
// 生成导航(后端生成)
163191
async function generateMenusAtBack() {
@@ -173,7 +201,7 @@ const useMenuStore = defineStore(
173201
else {
174202
accessedMenus = cloneDeep(res.data)
175203
}
176-
menus.value = accessedMenus.filter(item => item.children.length !== 0)
204+
filesystemMenusRaw.value = accessedMenus.filter(item => item.children.length !== 0)
177205
}).catch(() => {})
178206
}
179207
// 设置主导航

src/store/modules/route.ts

+1-51
Original file line numberDiff line numberDiff line change
@@ -119,56 +119,6 @@ const useRouteStore = defineStore(
119119
return routes
120120
})
121121

122-
// 判断是否有权限
123-
function hasPermission(permissions: string[], route: Route.recordMainRaw | RouteRecordRaw) {
124-
let isAuth = false
125-
if (route.meta?.auth) {
126-
isAuth = permissions.some((auth) => {
127-
if (typeof route.meta?.auth === 'string') {
128-
return route.meta.auth !== '' ? route.meta.auth === auth : true
129-
}
130-
else if (typeof route.meta?.auth === 'object') {
131-
return route.meta.auth.length > 0 ? route.meta.auth.includes(auth) : true
132-
}
133-
else {
134-
return false
135-
}
136-
})
137-
}
138-
else {
139-
isAuth = true
140-
}
141-
return isAuth
142-
}
143-
// 根据权限过滤路由
144-
function filterAsyncRoutes<T extends Route.recordMainRaw[] | RouteRecordRaw[]>(routes: T, permissions: string[]): T {
145-
const res: any = []
146-
routes.forEach((route) => {
147-
if (hasPermission(permissions, route)) {
148-
const tmpRoute = cloneDeep(route)
149-
if (tmpRoute.children) {
150-
tmpRoute.children = filterAsyncRoutes(tmpRoute.children, permissions)
151-
tmpRoute.children.length && res.push(tmpRoute)
152-
}
153-
else {
154-
res.push(tmpRoute)
155-
}
156-
}
157-
})
158-
return res
159-
}
160-
const routes = computed(() => {
161-
let returnRoutes: Route.recordMainRaw[]
162-
// 如果权限功能开启,则需要对路由数据进行筛选过滤
163-
if (settingsStore.settings.app.enablePermission) {
164-
returnRoutes = filterAsyncRoutes(routesRaw.value as any, userStore.permissions)
165-
}
166-
else {
167-
returnRoutes = cloneDeep(routesRaw.value) as any
168-
}
169-
return returnRoutes
170-
})
171-
172122
// TODO 将设置 meta.sidebar 的属性转换成 meta.menu ,过渡处理,未来将被弃用
173123
let isUsedDeprecatedAttribute = false
174124
function converDeprecatedAttribute<T extends Route.recordMainRaw[]>(routes: T): T {
@@ -264,7 +214,7 @@ const useRouteStore = defineStore(
264214

265215
return {
266216
isGenerate,
267-
routes,
217+
routesRaw,
268218
currentRemoveRoutes,
269219
flatRoutes,
270220
flatSystemRoutes,

0 commit comments

Comments
 (0)