96 lines
2.3 KiB
Vue
96 lines
2.3 KiB
Vue
<template>
|
|
<div v-if="!menu.meta || !menu.meta.hidden" class="sidebar-item">
|
|
<el-sub-menu
|
|
v-if="menu?.children && menu?.children.length > 0"
|
|
:index="menu.path"
|
|
popper-class="sidebar-container-popper"
|
|
>
|
|
<template #title>
|
|
<svg-icon
|
|
v-if="menu.meta && menu.meta.icon"
|
|
:icon-class="menuIcon"
|
|
class="sidebar-icon"
|
|
/>
|
|
<span>{{ menu.meta?.title }}</span>
|
|
</template>
|
|
<sidebar-item
|
|
v-for="(child, index) in menu?.children"
|
|
:key="index"
|
|
:menu="child"
|
|
:activeMenu="activeMenu"
|
|
/>
|
|
</el-sub-menu>
|
|
<app-link
|
|
v-else-if="menu.meta && !menu.meta.hidden"
|
|
:to="{ path: menu.path }"
|
|
>
|
|
<el-menu-item
|
|
:index="menu.path"
|
|
popper-class="sidebar-popper"
|
|
>
|
|
<template #title>
|
|
<svg-icon
|
|
v-if="menu.meta && menu.meta.icon"
|
|
:icon-class="menuIcon"
|
|
class="sidebar-icon"
|
|
/>
|
|
<span v-if="menu.meta && menu.meta.title">{{ menu.meta.title }}</span>
|
|
</template>
|
|
</el-menu-item>
|
|
</app-link>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
import { computed } from 'vue'
|
|
import { type RouteRecordRaw } from 'vue-router'
|
|
import AppLink from '@/components/app-link/index.vue'
|
|
import SvgIcon from '@/components/svg-icon/index.vue'
|
|
|
|
defineOptions({ name: 'LegacySidebarItem', inheritAttrs: false })
|
|
|
|
const props = defineProps<{
|
|
menu: RouteRecordRaw
|
|
activeMenu: any
|
|
}>()
|
|
|
|
const menuIcon = computed(() => {
|
|
if (props.activeMenu === props.menu.path) {
|
|
return props.menu.meta?.iconActive || props.menu?.meta?.icon
|
|
} else {
|
|
return props.menu?.meta?.icon
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<style scoped>
|
|
.sidebar-item {
|
|
.sidebar-icon {
|
|
font-size: 20px;
|
|
margin-top: -2px;
|
|
margin-right: 8px;
|
|
}
|
|
}
|
|
|
|
:deep(.el-menu-item),
|
|
:deep(.el-sub-menu__title) {
|
|
padding: 13px 12px 13px 16px !important;
|
|
font-weight: 500;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
:deep(.el-menu-item:hover),
|
|
:deep(.el-sub-menu__title:hover) {
|
|
background: none;
|
|
color: var(--el-color-primary);
|
|
}
|
|
|
|
:deep(.el-menu-item.is-active) {
|
|
color: var(--el-color-primary);
|
|
background: var(--el-color-primary-light-9);
|
|
}
|
|
|
|
:deep(.el-sub-menu .el-menu-item) {
|
|
padding-left: 43px !important;
|
|
}
|
|
</style> |