|
|
@@ -87,35 +87,26 @@ const allNavItems = [
|
|
|
}
|
|
|
]
|
|
|
|
|
|
-// 根据用户角色过滤菜单项
|
|
|
const navItems = computed(() => {
|
|
|
- const userRole = userStore.userInfo?.role || 'user'
|
|
|
+ const { userInfo } = userStore
|
|
|
+ if (!userInfo?.id || !userInfo?.role) return []
|
|
|
|
|
|
- const filterItemsByRole = (items) => {
|
|
|
- return items
|
|
|
+ const filterItemsByRole = (items, role) =>
|
|
|
+ items
|
|
|
+ .filter((item) => !item.roles || item.roles.includes(role))
|
|
|
.map((item) => {
|
|
|
- if (item.roles && !item.roles.includes(userRole)) {
|
|
|
- return null
|
|
|
- }
|
|
|
-
|
|
|
- // 如果有子菜单,也需要过滤
|
|
|
if (item.items) {
|
|
|
- const filteredSubItems = filterItemsByRole(item.items)
|
|
|
- if (filteredSubItems.length === 0) {
|
|
|
- return null
|
|
|
- }
|
|
|
- return {
|
|
|
- ...item,
|
|
|
- items: filteredSubItems
|
|
|
+ const subItems = filterItemsByRole(item.items, role)
|
|
|
+ if (subItems.length > 0) {
|
|
|
+ return { ...item, items: subItems }
|
|
|
}
|
|
|
+ return null
|
|
|
}
|
|
|
-
|
|
|
return item
|
|
|
})
|
|
|
- .filter((item) => item !== null)
|
|
|
- }
|
|
|
+ .filter(Boolean)
|
|
|
|
|
|
- return filterItemsByRole(allNavItems)
|
|
|
+ return filterItemsByRole(allNavItems, userInfo.role)
|
|
|
})
|
|
|
|
|
|
const userMenuItems = [
|
|
|
@@ -135,7 +126,7 @@ const userMenuItems = [
|
|
|
]
|
|
|
|
|
|
const logout = () => {
|
|
|
- useUserStore().logout()
|
|
|
+ userStore.logout()
|
|
|
router.push('/login')
|
|
|
}
|
|
|
|