SideMenu.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <template>
  2. <el-menu
  3. :default-active="activeMenu"
  4. :collapse="isCollapse"
  5. :collapse-transition="false"
  6. background-color="#304156"
  7. text-color="#bfcbd9"
  8. active-text-color="#409EFF"
  9. router
  10. class="side-menu"
  11. >
  12. <template v-for="menu in menus" :key="menu.id">
  13. <!-- 有子菜单的情况 -->
  14. <el-sub-menu v-if="menu.children && menu.children.length > 0" :index="menu.path">
  15. <template #title>
  16. <el-icon v-if="menu.icon">
  17. <component :is="menu.icon" />
  18. </el-icon>
  19. <span>{{ menu.name }}</span>
  20. </template>
  21. <el-menu-item
  22. v-for="child in menu.children"
  23. :key="child.id"
  24. :index="child.path"
  25. >
  26. <el-icon v-if="child.icon">
  27. <component :is="child.icon" />
  28. </el-icon>
  29. <template #title>{{ child.name }}</template>
  30. </el-menu-item>
  31. </el-sub-menu>
  32. <!-- 没有子菜单的情况 -->
  33. <el-menu-item v-else :index="menu.path">
  34. <el-icon v-if="menu.icon">
  35. <component :is="menu.icon" />
  36. </el-icon>
  37. <template #title>{{ menu.name }}</template>
  38. </el-menu-item>
  39. </template>
  40. </el-menu>
  41. </template>
  42. <script setup lang="ts">
  43. import { computed } from 'vue'
  44. import { useRoute } from 'vue-router'
  45. import { useUserStore } from '@/store/user'
  46. const route = useRoute()
  47. const userStore = useUserStore()
  48. const menus = computed(() => userStore.getMenus)
  49. const isCollapse = computed(() => userStore.isCollapse)
  50. const activeMenu = computed(() => {
  51. return route.path
  52. })
  53. </script>
  54. <style scoped>
  55. .side-menu {
  56. border-right: none;
  57. user-select: none;
  58. }
  59. /* 菜单样式调整 */
  60. :deep(.el-menu-item),
  61. :deep(.el-sub-menu__title) {
  62. cursor: pointer;
  63. }
  64. :deep(.el-menu-item:hover),
  65. :deep(.el-sub-menu__title:hover) {
  66. background-color: #263445 !important;
  67. }
  68. :deep(.el-menu-item.is-active) {
  69. background-color: #263445 !important;
  70. }
  71. </style>