| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- <template>
- <el-menu
- :default-active="activeMenu"
- :collapse="isCollapse"
- :collapse-transition="false"
- background-color="#304156"
- text-color="#bfcbd9"
- active-text-color="#409EFF"
- router
- class="side-menu"
- >
- <template v-for="menu in menus" :key="menu.id">
- <!-- 有子菜单的情况 -->
- <el-sub-menu v-if="menu.children && menu.children.length > 0" :index="menu.path">
- <template #title>
- <el-icon v-if="menu.icon">
- <component :is="menu.icon" />
- </el-icon>
- <span>{{ menu.name }}</span>
- </template>
- <el-menu-item
- v-for="child in menu.children"
- :key="child.id"
- :index="child.path"
- >
- <el-icon v-if="child.icon">
- <component :is="child.icon" />
- </el-icon>
- <template #title>{{ child.name }}</template>
- </el-menu-item>
- </el-sub-menu>
- <!-- 没有子菜单的情况 -->
- <el-menu-item v-else :index="menu.path">
- <el-icon v-if="menu.icon">
- <component :is="menu.icon" />
- </el-icon>
- <template #title>{{ menu.name }}</template>
- </el-menu-item>
- </template>
- </el-menu>
- </template>
- <script setup lang="ts">
- import { computed } from 'vue'
- import { useRoute } from 'vue-router'
- import { useUserStore } from '@/store/user'
- const route = useRoute()
- const userStore = useUserStore()
- const menus = computed(() => userStore.getMenus)
- const isCollapse = computed(() => userStore.isCollapse)
- const activeMenu = computed(() => {
- return route.path
- })
- </script>
- <style scoped>
- .side-menu {
- border-right: none;
- user-select: none;
- }
- /* 菜单样式调整 */
- :deep(.el-menu-item),
- :deep(.el-sub-menu__title) {
- cursor: pointer;
- }
- :deep(.el-menu-item:hover),
- :deep(.el-sub-menu__title:hover) {
- background-color: #263445 !important;
- }
- :deep(.el-menu-item.is-active) {
- background-color: #263445 !important;
- }
- </style>
|