12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- <template>
- <template v-for="subItem in menuList" :key="subItem.path">
- <el-sub-menu v-if="subItem.children?.length" :index="subItem.path">
- <template #title>
- <svg-icon v-if="subItem.meta.icon" :name="subItem.meta.icon" class="menu-svg-icon" />
- <span class="sle" :title="subItem.meta.title">{{ subItem.meta.title }}</span>
- </template>
- <SubMenu :menu-list="subItem.children" />
- </el-sub-menu>
- <el-menu-item v-else :index="subItem.path" @click="handleClickMenu(subItem)">
- <svg-icon v-if="subItem.meta.icon" :name="subItem.meta.icon" class="menu-svg-icon" />
- <template #title>
- <span class="sle" :title="subItem.meta.title">{{ subItem.meta.title }}</span>
- </template>
- </el-menu-item>
- </template>
- </template>
- <script setup lang="ts">
- defineProps<{ menuList: Menu.MenuOptions[] }>()
- const router = useRouter()
- const handleClickMenu = (subItem: Menu.MenuOptions) => {
- if (subItem.meta.link) return window.open(subItem.meta.link, '_blank')
- router.push(subItem.path)
- }
- </script>
- <style lang="scss">
- .menu-svg-icon {
- width: 24px;
- }
- .el-sub-menu .el-sub-menu__title:hover {
- color: var(--el-menu-hover-text-color) !important;
- background-color: var(--el-menu-active-bg-color) !important;
- }
- .el-sub-menu.is-active > .el-sub-menu__title {
- color: var(--el-menu-active-color) !important;
- background-color: var(--el-menu-bg-color) !important;
- }
- .el-menu--collapse {
- .is-active {
- .el-sub-menu__title {
- color: #ffffff !important;
- background-color: var(--el-color-primary) !important;
- }
- }
- }
- .el-menu-item {
- &:hover {
- color: var(--el-menu-hover-text-color) !important;
- background-color: var(--el-menu-active-bg-color) !important;
- }
- &.is-active {
- color: var(--el-menu-active-color) !important;
- background-color: var(--el-menu-active-bg-color) !important;
- &::before {
- position: absolute;
- top: 0;
- bottom: 0;
- width: 6px;
- content: '';
- background-color: var(--el-color-primary);
- border-radius: 6px;
- }
- }
- }
- .vertical,
- .classic,
- .transverse {
- .el-menu-item {
- &.is-active {
- &::before {
- left: 0;
- }
- }
- }
- }
- .columns {
- .el-menu-item {
- &.is-active {
- &::before {
- right: 0;
- }
- }
- }
- }
- </style>
|