refine sidebar

This commit is contained in:
Pan 2017-07-24 14:41:02 +08:00 committed by 花裤衩
parent ae44d0b8ca
commit dd9ef5145d
7 changed files with 193 additions and 120 deletions

View File

@ -59,7 +59,6 @@
margin: 0 auto; margin: 0 auto;
} }
//文章页textarea修改样式 //文章页textarea修改样式
.article-textarea { .article-textarea {
textarea { textarea {

View File

@ -1,6 +1,8 @@
@import './mixin.scss';
@import './btn.scss'; @import './btn.scss';
@import './element-ui.scss'; @import './element-ui.scss';
@import './mixin.scss'; @import './sidebar.scss';
body { body {
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased; -webkit-font-smoothing: antialiased;

72
src/styles/sidebar.scss Normal file
View File

@ -0,0 +1,72 @@
// 侧边栏
.sidebar-container>.el-menu {
width: 100%!important;
}
.sidebar-container .svg-icon {
margin-right: 16px;
}
.hideSidebar .svg-icon {
margin-right: 0;
}
.hideSidebar .submenu-title-noDropdown span,
.hideSidebar .el-submenu>.el-submenu__title span {
height: 0;
width: 0;
overflow: hidden;
visibility: hidden;
display: inline-block;
}
.hideSidebar .nest-menu .el-submenu__title {
text-align: initial!important;
span {
height: auto;
width: auto;
visibility: visible;
}
.el-submenu__icon-arrow {
display: block!important;
}
}
.hideSidebar .menu-wrapper>.el-menu-item,
.hideSidebar .submenu-title-noDropdown,
.hideSidebar .menu-wrapper>.el-submenu .el-submenu__title {
text-align: center;
}
.hideSidebar .el-menu-item .el-submenu__icon-arrow,
.hideSidebar .el-submenu .el-submenu__title .el-submenu__icon-arrow {
display: none;
}
.hideSidebar .submenu-title-noDropdown {
position: relative;
span {
transition: opacity .3s cubic-bezier(.55, 0, .1, 1);
opacity: 0;
}
&:hover {
span {
display: block;
border-radius: 3px;
z-index: 1002;
width: 140px;
height: 56px;
visibility: visible;
position: absolute;
right: -145px;
top: 0px;
background-color: #1f2d3d;
opacity: 1;
}
}
}
.el-submenu .el-menu-item {
min-width: 180px!important;
}

View File

@ -1,8 +1,6 @@
<template> <template>
<div class="app-wrapper" :class="{hideSidebar:!sidebar.opened}"> <div class="app-wrapper" :class="{hideSidebar:!sidebar.opened}">
<div class="sidebar-wrapper">
<sidebar class="sidebar-container"></sidebar> <sidebar class="sidebar-container"></sidebar>
</div>
<div class="main-container"> <div class="main-container">
<navbar></navbar> <navbar></navbar>
<app-main></app-main> <app-main></app-main>
@ -36,40 +34,36 @@
height: 100%; height: 100%;
width: 100%; width: 100%;
&.hideSidebar { &.hideSidebar {
.sidebar-wrapper {
transform: translate(-140px, 0);
.sidebar-container{ .sidebar-container{
transform: translate(132px, 0); width:56px;
}
&:hover {
transform: translate(0, 0);
.sidebar-container {
transform: translate(0, 0);
}
}
} }
.main-container { .main-container {
margin-left: 40px; margin-left: 56px;
} }
// .sidebar-wrapper {
// transform: translate(-140px, 0);
// .sidebar-container {
// transform: translate(132px, 0);
// }
// &:hover {
// transform: translate(0, 0);
// .sidebar-container {
// transform: translate(0, 0);
// }
// }
// }
} }
.sidebar-wrapper { .sidebar-container {
transition: all .28s ease-out;
width: 180px; width: 180px;
height: 1000px;
position: fixed; position: fixed;
top: 0; top: 0;
bottom: 0; bottom: 0;
left: 0; left: 0;
z-index: 1001; z-index: 1001;
overflow: hidden; background: red;
transition: all .28s ease-out;
}
.sidebar-container {
transition: all .28s ease-out;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: -17px;
overflow-y: scroll;
} }
.main-container { .main-container {
min-height: 100%; min-height: 100%;

View File

@ -1,6 +1,6 @@
<template> <template>
<el-breadcrumb class="app-levelbar" separator="/"> <el-breadcrumb class="app-levelbar" separator="/">
<el-breadcrumb-item v-for="(item,index) in levelList" :key="item"> <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
<router-link v-if='item.redirect==="noredirect"||index==levelList.length-1' to="" class="no-redirect">{{item.name}}</router-link> <router-link v-if='item.redirect==="noredirect"||index==levelList.length-1' to="" class="no-redirect">{{item.name}}</router-link>
<router-link v-else :to="item.redirect||item.path">{{item.name}}</router-link> <router-link v-else :to="item.redirect||item.path">{{item.name}}</router-link>
</el-breadcrumb-item> </el-breadcrumb-item>

View File

@ -1,7 +1,9 @@
<template> <template>
<el-menu mode="vertical" theme="dark" :default-active="$route.path"> <div>
<el-menu mode="vertical" theme="dark" :default-active="$route.path" :collapse="isCollapse">
<sidebar-item :routes='permission_routers'></sidebar-item> <sidebar-item :routes='permission_routers'></sidebar-item>
</el-menu> </el-menu>
</div>
</template> </template>
<script> <script>
@ -11,8 +13,12 @@
components: { SidebarItem }, components: { SidebarItem },
computed: { computed: {
...mapGetters([ ...mapGetters([
'permission_routers' 'permission_routers',
]) 'sidebar'
]),
isCollapse() {
return !this.sidebar.opened
}
} }
} }
</script> </script>

View File

@ -1,24 +1,31 @@
<template> <template>
<div> <div class='menu-wrapper'>
<template v-for="item in routes"> <template v-for="item in routes">
<router-link v-if="!item.hidden&&item.noDropdown&&item.children.length>0" :to="item.path+'/'+item.children[0].path"> <router-link v-if="!item.hidden&&item.noDropdown&&item.children.length>0" :to="item.path+'/'+item.children[0].path">
<el-menu-item :index="item.path+'/'+item.children[0].path"> <el-menu-item :index="item.path+'/'+item.children[0].path" class='submenu-title-noDropdown'>
<icon-svg v-if='item.icon' :icon-class="item.icon"></icon-svg>{{item.children[0].name}} <icon-svg v-if='item.icon' :icon-class="item.icon"></icon-svg><span slot="title">{{item.children[0].name}}</span>
</el-menu-item> </el-menu-item>
</router-link> </router-link>
<el-submenu :index="item.name" v-if="!item.noDropdown&&!item.hidden"> <el-submenu :index="item.name" v-if="!item.noDropdown&&!item.hidden">
<template slot="title"> <template slot="title">
<icon-svg v-if='item.icon' :icon-class="item.icon"></icon-svg>{{item.name}} <icon-svg v-if='item.icon' :icon-class="item.icon"></icon-svg><span slot="title">{{item.name}}</span>
</template> </template>
<template v-for="child in item.children" v-if='!child.hidden'> <template v-for="child in item.children" v-if='!child.hidden'>
<sidebar-item class='menu-indent' v-if='child.children&&child.children.length>0' :routes='[child]'> </sidebar-item>
<router-link v-else class="menu-indent" :to="item.path+'/'+child.path"> <sidebar-item class='nest-menu' v-if='child.children&&child.children.length>0' :routes='[child]'> </sidebar-item>
<router-link v-else :to="item.path+'/'+child.path">
<el-menu-item :index="item.path+'/'+child.path"> <el-menu-item :index="item.path+'/'+child.path">
{{child.name}} <span slot="title">{{child.name}}</span>
</el-menu-item> </el-menu-item>
</router-link> </router-link>
</template> </template>
</el-submenu> </el-submenu>
</template> </template>
</div> </div>
</template> </template>
@ -35,13 +42,6 @@
</script> </script>
<style rel="stylesheet/scss" lang="scss" scoped> <style rel="stylesheet/scss" lang="scss" scoped>
.svg-icon {
margin-right: 15px;
}
.hideSidebar .menu-indent {
display: block;
text-indent: 10px;
}
</style> </style>