GlobalSubMenu.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. <script lang="ts" setup>
  2. import { useThemeStore } from '@/stores/theme'
  3. import { useMenuStore } from '@/stores/menu'
  4. import { isAbsolutePath } from '@/utils/utils'
  5. interface Props {
  6. menu: any
  7. }
  8. const props = defineProps<Props>()
  9. const themeStore = useThemeStore()
  10. const router = useRouter()
  11. const menuStore = useMenuStore()
  12. const handleClick = (menu: any) => {
  13. const path = menu.index
  14. if (isAbsolutePath(path)) {
  15. window.open(path)
  16. } else {
  17. router.push(path)
  18. }
  19. }
  20. </script>
  21. <template>
  22. <el-sub-menu v-if="menu.children?.length" :index="menu.name">
  23. <template #title>
  24. <el-icon v-if="menu.meta?.icon"><component :is="menu.meta?.icon"></component></el-icon>
  25. <span>{{ menu.meta.title }}</span>
  26. </template>
  27. <global-sub-menu v-for="item in menu.children" :key="item.path" :menu="item"></global-sub-menu>
  28. </el-sub-menu>
  29. <el-menu-item v-else :index="menu.path" @click="handleClick">
  30. <el-icon v-if="menu.meta?.icon"><component :is="menu.meta?.icon"></component></el-icon>
  31. <span>{{ menu.meta.title }}</span>
  32. </el-menu-item>
  33. </template>
  34. <style lang="scss" scoped></style>