RecursiveMenuItem.vue 809 B

12345678910111213141516171819202122232425262728293031
  1. <script setup lang="ts">
  2. import * as ICON from '@element-plus/icons-vue'
  3. import type { RouterType } from '@/router/route'
  4. defineProps<{
  5. item: RouterType
  6. }>()
  7. </script>
  8. <template>
  9. <el-sub-menu v-if="item.children && item.children.length > 0" :index="'/'+item.path">
  10. <template #title>
  11. <el-icon v-if="item.icon">
  12. <component :is="ICON[item.icon as keyof typeof ICON]" />
  13. </el-icon>
  14. <span>{{ item.name }}</span>
  15. </template>
  16. <recursive-menu-item
  17. v-for="child in item.children"
  18. :key="child.path"
  19. :item="child"
  20. />
  21. </el-sub-menu>
  22. <el-menu-item v-else :index="'/'+item.path">
  23. <el-icon v-if="item.icon">
  24. <component :is="ICON[item.icon as keyof typeof ICON]" />
  25. </el-icon>
  26. <span>{{ item.name }}</span>
  27. </el-menu-item>
  28. </template>