SubMenu.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <template>
  2. <template v-for="subItem in menuList" :key="subItem.path">
  3. <el-sub-menu v-if="subItem.children?.length" teleported popperClass="layout-menu-popper-wrap" :index="subItem.path">
  4. <template #title>
  5. <PickerIcon v-if="subItem.meta.icon" :icon-class="subItem.meta.icon" />
  6. <!-- <el-icon v-if="subItem.meta.icon">
  7. <component :is="subItem.meta.icon" />
  8. </el-icon>-->
  9. <span class="sle">{{ generateTitle(subItem.meta?.title) }}</span>
  10. </template>
  11. <SubMenu :menu-list="subItem.children" />
  12. </el-sub-menu>
  13. <el-menu-item v-else popperClass="layout-menu-popper-wrap" :index="subItem.path" @click="handleClickMenu(subItem)">
  14. <PickerIcon v-if="subItem.meta.icon" :icon-class="subItem.meta.icon" />
  15. <!-- <el-icon>
  16. <component :is="subItem.meta.icon"></component>
  17. </el-icon>-->
  18. <template #title>
  19. <span class="sle">{{ generateTitle(subItem.meta?.title) }}</span>
  20. </template>
  21. </el-menu-item>
  22. </template>
  23. </template>
  24. <script setup lang="ts">
  25. import { useRouter } from 'vue-router'
  26. import { generateTitle } from '@/utils/i18n'
  27. import PickerIcon from '@/components/IconPicker/PickerIcon.vue'
  28. import { isExternal } from '@/utils/validate'
  29. defineProps<{ menuList: RouteMenu.Item[] }>()
  30. const router = useRouter()
  31. const handleClickMenu = (subItem: RouteMenu.Item) => {
  32. if (isExternal(subItem.path)) return window.open(subItem.path, '_blank')
  33. router.push(subItem.path)
  34. // router.push({ name: subItem.name })
  35. // router.push('/404')
  36. }
  37. </script>
  38. <style lang="scss">
  39. .el-menu--collapse {
  40. .el-sub-menu__title {
  41. display: flex;
  42. align-items: center;
  43. justify-content: center;
  44. padding: 0;
  45. }
  46. .is-active {
  47. .el-sub-menu__title {
  48. &::before {
  49. background-color: var(--el-color-primary) !important;
  50. }
  51. }
  52. }
  53. }
  54. .el-menu-item {
  55. /*&:hover {
  56. color: var(--el-menu-hover-text-color);
  57. }*/
  58. &.is-active {
  59. color: var(--el-menu-active-color) !important;
  60. }
  61. }
  62. </style>