40 lines
909 B
Vue
40 lines
909 B
Vue
<template>
|
|
<component :is="menuComponent" :item-or-menu="item">
|
|
<template v-if="item.children && item.children.length > 0">
|
|
<vab-menu v-for="route in item.children" :key="route.path" :item="route" />
|
|
</template>
|
|
</component>
|
|
</template>
|
|
|
|
<script setup>
|
|
defineOptions({
|
|
name: 'VabMenu',
|
|
})
|
|
|
|
const imports = import.meta.glob('./**/*.vue', { eager: true })
|
|
const Components = {}
|
|
Object.getOwnPropertyNames(imports).forEach((key) => {
|
|
Components[key.replaceAll(/(\/|components|\.|vue)/g, '')] = imports[key].default
|
|
})
|
|
|
|
const props = defineProps({
|
|
item: {
|
|
type: Object,
|
|
required: true,
|
|
},
|
|
layout: {
|
|
type: String,
|
|
default: '',
|
|
},
|
|
})
|
|
|
|
const menuComponent = computed(() =>
|
|
props.item.children &&
|
|
props.item.children.some((route) => {
|
|
return route.meta && route.meta.hidden !== true
|
|
})
|
|
? Components['VabSubMenu']
|
|
: Components['VabMenuItem']
|
|
)
|
|
</script>
|