Skip to content

Commit 79184f4

Browse files
committed
fix: 文件路由系统下,用户权限变化后,菜单不更新
1 parent 8416b61 commit 79184f4

File tree

5 files changed

+18
-48
lines changed

5 files changed

+18
-48
lines changed

src/layouts/components/Menu/index.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ provide(rootMenuInjectionKey, reactive({
169169
'flex-row! w-auto': isMenuPopup && props.mode === 'horizontal',
170170
}"
171171
>
172-
<template v-for="(item, index) in menu" :key="index">
172+
<template v-for="item in menu" :key="item.path ?? JSON.stringify(item)">
173173
<SubMenu v-if="item.children?.length" :menu="item" :unique-key="[item.path ?? JSON.stringify(item)]" />
174174
<Item v-else :item="item" :unique-key="[item.path ?? JSON.stringify(item)]" @click="handleMenuItemClick(item.path ?? JSON.stringify(item))" />
175175
</template>

src/router/index.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -57,20 +57,22 @@ router.beforeEach(async (to, from, next) => {
5757
}
5858
}
5959
else {
60+
// 获取用户权限
61+
settingsStore.settings.app.enablePermission && await userStore.getPermissions()
6062
// 生成动态路由
6163
switch (settingsStore.settings.app.routeBaseOn) {
6264
case 'frontend':
63-
await routeStore.generateRoutesAtFront(asyncRoutes)
65+
routeStore.generateRoutesAtFront(asyncRoutes)
6466
break
6567
case 'backend':
6668
await routeStore.generateRoutesAtBack()
6769
break
6870
case 'filesystem':
69-
await routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
71+
routeStore.generateRoutesAtFilesystem(asyncRoutesByFilesystem)
7072
// 文件系统生成的路由,需要手动生成导航数据
7173
switch (settingsStore.settings.menu.baseOn) {
7274
case 'frontend':
73-
await menuStore.generateMenusAtFront()
75+
menuStore.generateMenusAtFront()
7476
break
7577
case 'backend':
7678
await menuStore.generateMenusAtBack()

src/store/modules/menu.ts

+6-26
Original file line numberDiff line numberDiff line change
@@ -72,14 +72,14 @@ const useMenuStore = defineStore(
7272
let returnMenus: Menu.recordMainRaw[] = []
7373
if (settingsStore.settings.app.routeBaseOn !== 'filesystem') {
7474
returnMenus = convertRouteToMenu(routeStore.routesRaw)
75-
// 如果权限功能开启,则需要对导航数据进行筛选过滤
76-
if (settingsStore.settings.app.enablePermission) {
77-
returnMenus = filterAsyncMenus(returnMenus, userStore.permissions)
78-
}
7975
}
8076
else {
8177
returnMenus = filesystemMenusRaw.value
8278
}
79+
// 如果权限功能开启,则需要对导航数据进行筛选过滤
80+
if (settingsStore.settings.app.enablePermission) {
81+
returnMenus = filterAsyncMenus(returnMenus, userStore.permissions)
82+
}
8383
return returnMenus
8484
})
8585
// 次导航数据
@@ -176,32 +176,12 @@ const useMenuStore = defineStore(
176176
}
177177
// 生成导航(前端生成)
178178
async function generateMenusAtFront() {
179-
let accessedMenus
180-
// 如果权限功能开启,则需要对导航数据进行筛选过滤
181-
if (settingsStore.settings.app.enablePermission) {
182-
const permissions = await userStore.getPermissions()
183-
accessedMenus = filterAsyncMenus(menu, permissions)
184-
}
185-
else {
186-
accessedMenus = cloneDeep(menu)
187-
}
188-
filesystemMenusRaw.value = accessedMenus.filter(item => item.children.length !== 0)
179+
filesystemMenusRaw.value = menu.filter(item => item.children.length !== 0)
189180
}
190181
// 生成导航(后端生成)
191182
async function generateMenusAtBack() {
192183
await apiApp.menuList().then(async (res) => {
193-
const settingsStore = useSettingsStore()
194-
const userStore = useUserStore()
195-
let accessedMenus: Menu.recordMainRaw[]
196-
// 如果权限功能开启,则需要对导航数据进行筛选过滤
197-
if (settingsStore.settings.app.enablePermission) {
198-
const permissions = await userStore.getPermissions()
199-
accessedMenus = filterAsyncMenus(res.data, permissions)
200-
}
201-
else {
202-
accessedMenus = cloneDeep(res.data)
203-
}
204-
filesystemMenusRaw.value = accessedMenus.filter(item => item.children.length !== 0)
184+
filesystemMenusRaw.value = (res.data as Menu.recordMainRaw[]).filter(item => item.children.length !== 0)
205185
}).catch(() => {})
206186
}
207187
// 设置主导航

src/store/modules/route.ts

+6-17
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { cloneDeep } from 'lodash-es'
22
import type { RouteMeta, RouteRecordRaw } from 'vue-router'
33
import useSettingsStore from './settings'
4-
import useUserStore from './user'
54
import { resolveRoutePath } from '@/utils'
65
import { systemRoutes } from '@/router/routes'
76
import apiApp from '@/api/modules/app'
@@ -12,7 +11,6 @@ const useRouteStore = defineStore(
1211
'route',
1312
() => {
1413
const settingsStore = useSettingsStore()
15-
const userStore = useUserStore()
1614

1715
const isGenerate = ref(false)
1816
const routesRaw = ref<Route.recordMainRaw[]>([])
@@ -147,13 +145,10 @@ const useRouteStore = defineStore(
147145
return routes
148146
}
149147

150-
// 根据权限动态生成路由(前端生成)
151-
async function generateRoutesAtFront(asyncRoutes: Route.recordMainRaw[]) {
148+
// 生成路由(前端生成)
149+
function generateRoutesAtFront(asyncRoutes: Route.recordMainRaw[]) {
152150
// 设置 routes 数据
153151
routesRaw.value = converDeprecatedAttribute(cloneDeep(asyncRoutes) as any)
154-
if (settingsStore.settings.app.enablePermission) {
155-
await userStore.getPermissions()
156-
}
157152
isGenerate.value = true
158153
}
159154
// 格式化后端路由数据
@@ -177,24 +172,18 @@ const useRouteStore = defineStore(
177172
return route
178173
})
179174
}
180-
// 根据权限动态生成路由(后端获取)
175+
// 生成路由(后端获取)
181176
async function generateRoutesAtBack() {
182-
await apiApp.routeList().then(async (res) => {
177+
await apiApp.routeList().then((res) => {
183178
// 设置 routes 数据
184179
routesRaw.value = converDeprecatedAttribute(formatBackRoutes(res.data) as any)
185-
if (settingsStore.settings.app.enablePermission) {
186-
await userStore.getPermissions()
187-
}
188180
isGenerate.value = true
189181
}).catch(() => {})
190182
}
191-
// 根据权限动态生成路由(文件系统生成)
192-
async function generateRoutesAtFilesystem(asyncRoutes: RouteRecordRaw[]) {
183+
// 生成路由(文件系统生成)
184+
function generateRoutesAtFilesystem(asyncRoutes: RouteRecordRaw[]) {
193185
// 设置 routes 数据
194186
filesystemRoutesRaw.value = cloneDeep(asyncRoutes) as any
195-
if (settingsStore.settings.app.enablePermission) {
196-
await userStore.getPermissions()
197-
}
198187
isGenerate.value = true
199188
}
200189
// 记录 accessRoutes 路由,用于登出时删除路由

src/store/modules/user.ts

-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,6 @@ const useUserStore = defineStore(
5858
async function getPermissions() {
5959
const res = await apiUser.permission()
6060
permissions.value = res.data.permissions
61-
return permissions.value
6261
}
6362
// 修改密码
6463
async function editPassword(data: {

0 commit comments

Comments
 (0)