You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

210 lines
4.8 KiB
Vue

<template>
<div class="sidebar">
<el-menu
:default-active="activeIndex"
class="sidebar-el-menu"
mode="horizontal"
router
>
<template v-for="item in items">
<template v-if="item.subs">
<el-submenu :index="item.index" :key="item.index">
<template slot="title">
<i :class="item.icon"></i>
<span slot="title">{{ item.title }}</span>
</template>
<template v-for="subItem in item.subs">
<el-submenu
v-if="subItem.subs"
:index="subItem.index"
:key="subItem.index"
>
<template slot="title">{{ subItem.title }}</template>
<el-menu-item
v-for="(threeItem, i) in subItem.subs"
:key="i"
:index="threeItem.index"
>{{ threeItem.title }}</el-menu-item
>
</el-submenu>
<el-menu-item
v-else
:index="subItem.index"
:key="subItem.index"
>{{ subItem.title }}</el-menu-item
>
</template>
</el-submenu>
</template>
<template v-else>
<el-menu-item :index="item.index" :key="item.index">
<i :class="item.icon"></i>
<span slot="title">{{ item.title }}</span>
</el-menu-item>
</template>
</template>
</el-menu>
</div>
</template>
<script>
export default {
data() {
return {
activeIndex: "/weather",
items: [
{
icon: "iconfont icon-qixiang",
index: "/weather",
title: "气象监测",
},
{
icon: "iconfont icon-fubing",
index: "/icing",
title: "覆冰监测",
},
{
icon: "el-icon-s-marketing",
index: "/equipmentStatus",
title: "设备状态",
},
// {
// icon: "el-icon-files",
// index: "/property",
// title: "资产管理",
// subs: [
// {
// index: "/lineInformation",
// title: "线路管理",
// },
// {
// index: "/towerInformation",
// title: "杆塔管理",
// },
// {
// index: "/photographicDevice",
// title: "监测终端管理",
// },
// ],
// },
],
};
},
watch: {
$route() {
this.setCurrentRoute();
},
},
methods: {
setCurrentRoute() {
this.activeIndex = this.$route.path; // 通过他就可以监听到当前路由状态并激活当前菜单
},
},
created() {
this.setCurrentRoute();
},
};
</script>
<style lang="less">
.sidebar {
.el-menu--horizontal {
background: #1c77ac;
.el-menu-item {
height: 56px;
line-height: 56px;
}
.el-submenu .el-submenu__title {
height: 56px;
line-height: 56px;
}
.el-submenu__title {
padding: 0 10px;
}
.el-dropdown-menu__item,
.el-menu-item,
.el-submenu__title {
font-size: 16px;
}
.el-menu-item i {
color: #666;
}
.el-menu-item.is-active {
i {
color: #1c77ac;
}
}
.el-submenu.is-active .el-submenu__title > i {
&:first-child {
color: #333;
}
}
}
.el-menu {
background: #1c77ac;
i {
color: #fff !important;
}
.el-menu-item {
color: #fff;
}
.el-submenu .el-submenu__title {
color: #fff;
}
.el-menu-item:not(.is-disabled):focus,
.el-menu-item:not(.is-disabled):hover {
color: #fff;
background-color: #0e5b87;
border-bottom: 2px solid #0e5b87;
i {
color: #fff !important;
}
}
.el-submenu:focus .el-submenu__title,
.el-submenu:hover .el-submenu__title {
color: #fff !important;
background-color: #0e5b87;
border-bottom: 2px solid #0e5b87;
i {
color: #fff !important;
}
}
}
.el-menu--horizontal > .el-menu-item.is-active {
border-bottom: 2px solid #0e5b87 !important;
color: #fff !important;
background-color: #0e5b87 !important;
i {
color: #fff !important;
}
}
.el-submenu.is-active {
.el-submenu__title {
border-bottom: 2px solid #0e5b87 !important;
color: #fff !important;
background-color: #0e5b87;
i {
color: #fff !important;
}
}
}
// .gallery-thumbs .swiper-slide-active {
// border: 3px solid #1c77ac !important;
// }
// .tags-li.active {
// border: 1px solid #1c77ac;
// background-color: #1c77ac;
// }
.el-menu-item [class^="iconfont"] {
margin-right: 5px;
width: 24px;
text-align: center;
font-size: 18px;
vertical-align: middle;
}
}
</style>