item.vue 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <template>
  2. <el-sub-menu :index="menu?.path" :class="subMenuClass" v-if="menu?.children?.length">
  3. <template #title>
  4. <el-icon>
  5. <Icon :name="menu?.meta?.icon" v-if="menu?.meta?.icon" class="text-sm" />
  6. </el-icon>
  7. <span>{{ menu?.meta?.title }}</span>
  8. </template>
  9. <slot />
  10. </el-sub-menu>
  11. <el-menu-item v-else class="ct-menu-item" :index="menu?.path" @click="isMiniScreen() && store.changeExpaned()">
  12. <el-icon>
  13. <Icon :name="menu?.meta?.icon" v-if="menu?.meta?.icon" class="text-sm" />
  14. </el-icon>
  15. <span>{{ menu?.meta?.title }}</span>
  16. </el-menu-item>
  17. </template>
  18. <script lang="ts" name="MenuItem" setup>
  19. import { Menu } from '/admin/types/Menu'
  20. import { onMounted, PropType, ref } from 'vue'
  21. import { useAppStore } from '/admin/stores/modules/app'
  22. import { isMiniScreen } from '/admin/support/helper'
  23. const store = useAppStore()
  24. defineProps({
  25. subMenuClass: {
  26. type: String,
  27. require: true,
  28. default: '',
  29. },
  30. menu: {
  31. type: Object as PropType<Menu>,
  32. require: true,
  33. },
  34. })
  35. </script>
  36. <style scoped lang="scss">
  37. :deep(.el-menu) {
  38. background-color: var(--sider-sub-menu-bg-color);
  39. }
  40. .ct-menu-item:hover {
  41. background-color: var(--sider-sub-menu-hover-bg-color) !important;
  42. }
  43. :deep(.children-menu .el-sub-menu__title) {
  44. background-color: var(--sider-sub-menu-bg-color) !important;
  45. }
  46. :deep(.el-menu-item-group__title) {
  47. padding: 0;
  48. }
  49. </style>