|
@@ -25,23 +25,23 @@
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup>
|
|
<script setup>
|
|
|
-import { computed } from 'vue'
|
|
|
|
|
|
|
+import { onMounted, ref } from 'vue'
|
|
|
import { routes } from '@/router'
|
|
import { routes } from '@/router'
|
|
|
import { useUserStore } from '@/store/modules/user'
|
|
import { useUserStore } from '@/store/modules/user'
|
|
|
import { useRouteListener } from '@/utils/route-listener'
|
|
import { useRouteListener } from '@/utils/route-listener'
|
|
|
|
|
|
|
|
const userStore = useUserStore()
|
|
const userStore = useUserStore()
|
|
|
-const user = userStore.getInfo()
|
|
|
|
|
|
|
+const user = ref({})
|
|
|
|
|
+const menuData = ref([])
|
|
|
|
|
|
|
|
const { selectedKey } = useRouteListener()
|
|
const { selectedKey } = useRouteListener()
|
|
|
|
|
|
|
|
-// 判断用户是否有权限访问该路由
|
|
|
|
|
const hasPermission = (route) => {
|
|
const hasPermission = (route) => {
|
|
|
- if (!route.meta || !route.meta.permission || !user.roles) return true
|
|
|
|
|
- return route.meta.permission.some((perm) => user.roles.includes(perm))
|
|
|
|
|
|
|
+ if (!route.meta || !route.meta.permission) return true
|
|
|
|
|
+ if(!user.value.roles || user.value.roles.length === 0) return false
|
|
|
|
|
+ return route.meta.permission.some((perm) => user.value.roles.includes(perm))
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 递归构建菜单数据
|
|
|
|
|
const generateMenu = (routes, parentPath = '') => {
|
|
const generateMenu = (routes, parentPath = '') => {
|
|
|
return routes
|
|
return routes
|
|
|
.filter((route) => hasPermission(route) && !(route.meta && route.meta.hideInMenu))
|
|
.filter((route) => hasPermission(route) && !(route.meta && route.meta.hideInMenu))
|
|
@@ -62,13 +62,8 @@ const generateMenu = (routes, parentPath = '') => {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-const useMenuData = () => {
|
|
|
|
|
- const menuData = computed(() => {
|
|
|
|
|
- return generateMenu(routes)
|
|
|
|
|
- })
|
|
|
|
|
- return { menuData }
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-const { menuData } = useMenuData()
|
|
|
|
|
|
|
+onMounted(async () => {
|
|
|
|
|
+ user.value = await userStore.getInfo()
|
|
|
|
|
+ menuData.value = generateMenu(routes)
|
|
|
|
|
+})
|
|
|
</script>
|
|
</script>
|