diff --git a/src/styles/element-ui.scss b/src/styles/element-ui.scss index 382aff13..3b005d07 100644 --- a/src/styles/element-ui.scss +++ b/src/styles/element-ui.scss @@ -1,83 +1,82 @@ //覆盖一些element-ui样式 -.block-checkbox { - display: block; -} + .block-checkbox { + display: block; + } -.operation-container { - .cell { - padding: 10px !important; - } - .el-button { - &:nth-child(3) { - margin-top: 10px; - margin-left: 0px; - } - &:nth-child(4) { - margin-top: 10px; - } - } -} + .operation-container { + .cell { + padding: 10px !important; + } + .el-button { + &:nth-child(3) { + margin-top: 10px; + margin-left: 0px; + } + &:nth-child(4) { + margin-top: 10px; + } + } + } -.el-upload { - input[type="file"] { - display: none !important; - } -} + .el-upload { + input[type="file"] { + display: none !important; + } + } -.el-upload__input { - display: none; -} + .el-upload__input { + display: none; + } -.cell { - .el-tag { - margin-right: 8px; - } -} + .cell { + .el-tag { + margin-right: 8px; + } + } -.small-padding { - .cell { - padding-left: 8px; - padding-right: 8px; - } -} + .small-padding { + .cell { + padding-left: 8px; + padding-right: 8px; + } + } -.status-col { - .cell { - padding: 0 10px; - text-align: center; - .el-tag { - margin-right: 0px; - } - } -} + .status-col { + .cell { + padding: 0 10px; + text-align: center; + .el-tag { + margin-right: 0px; + } + } + } -//暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461 -.el-dialog { - transform: none; - left: 0; - position: relative; - margin: 0 auto; -} + //暂时性解决diolag 问题 https://github.com/ElemeFE/element/issues/2461 + .el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; + } + //文章页textarea修改样式 + .article-textarea { + textarea { + padding-right: 40px; + resize: none; + border: none; + border-radius: 0px; + border-bottom: 1px solid #bfcbd9; + } + } -//文章页textarea修改样式 -.article-textarea { - textarea { - padding-right: 40px; - resize: none; - border: none; - border-radius: 0px; - border-bottom: 1px solid #bfcbd9; - } -} - -//element ui upload -.upload-container { - .el-upload { - width: 100%; - .el-upload-dragger { - width: 100%; - height: 200px; - } - } -} + //element ui upload + .upload-container { + .el-upload { + width: 100%; + .el-upload-dragger { + width: 100%; + height: 200px; + } + } + } diff --git a/src/styles/index.scss b/src/styles/index.scss index 97b1a62b..6b846362 100644 --- a/src/styles/index.scss +++ b/src/styles/index.scss @@ -1,6 +1,8 @@ +@import './mixin.scss'; @import './btn.scss'; @import './element-ui.scss'; -@import './mixin.scss'; +@import './sidebar.scss'; + body { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; diff --git a/src/styles/sidebar.scss b/src/styles/sidebar.scss new file mode 100644 index 00000000..c04166e7 --- /dev/null +++ b/src/styles/sidebar.scss @@ -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; +} + diff --git a/src/views/layout/Layout.vue b/src/views/layout/Layout.vue index fbe79fc8..32a8820a 100644 --- a/src/views/layout/Layout.vue +++ b/src/views/layout/Layout.vue @@ -1,8 +1,6 @@ <template> <div class="app-wrapper" :class="{hideSidebar:!sidebar.opened}"> - <div class="sidebar-wrapper"> - <sidebar class="sidebar-container"></sidebar> - </div> + <sidebar class="sidebar-container"></sidebar> <div class="main-container"> <navbar></navbar> <app-main></app-main> @@ -36,40 +34,36 @@ height: 100%; width: 100%; &.hideSidebar { - .sidebar-wrapper { - transform: translate(-140px, 0); - .sidebar-container { - transform: translate(132px, 0); - } - &:hover { - transform: translate(0, 0); - .sidebar-container { - transform: translate(0, 0); - } - } + .sidebar-container{ + width:56px; } .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; + height: 1000px; position: fixed; top: 0; bottom: 0; left: 0; z-index: 1001; - overflow: hidden; - 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; + background: red; } .main-container { min-height: 100%; diff --git a/src/views/layout/Levelbar.vue b/src/views/layout/Levelbar.vue index 0f98a698..b6fa36e8 100644 --- a/src/views/layout/Levelbar.vue +++ b/src/views/layout/Levelbar.vue @@ -1,6 +1,6 @@ <template> <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-else :to="item.path">{{item.name}}</router-link> </el-breadcrumb-item> diff --git a/src/views/layout/Sidebar.vue b/src/views/layout/Sidebar.vue index 863b4cc5..ac3e5ace 100644 --- a/src/views/layout/Sidebar.vue +++ b/src/views/layout/Sidebar.vue @@ -1,7 +1,9 @@ <template> - <el-menu mode="vertical" theme="dark" :default-active="$route.path"> - <sidebar-item :routes='permission_routers'></sidebar-item> +<div> + <el-menu mode="vertical" theme="dark" :default-active="$route.path" :collapse="isCollapse"> + <sidebar-item :routes='permission_routers'></sidebar-item> </el-menu> + </div> </template> <script> @@ -11,8 +13,12 @@ components: { SidebarItem }, computed: { ...mapGetters([ - 'permission_routers' - ]) + 'permission_routers', + 'sidebar' + ]), + isCollapse() { + return !this.sidebar.opened + } } } </script> diff --git a/src/views/layout/SidebarItem.vue b/src/views/layout/SidebarItem.vue index 7a939a43..51778dca 100644 --- a/src/views/layout/SidebarItem.vue +++ b/src/views/layout/SidebarItem.vue @@ -1,24 +1,31 @@ <template> - <div> + <div class='menu-wrapper'> <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"> - <el-menu-item :index="item.path+'/'+item.children[0].path"> - <icon-svg v-if='item.icon' :icon-class="item.icon"></icon-svg>{{item.children[0].name}} + <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><span slot="title">{{item.children[0].name}}</span> </el-menu-item> </router-link> + <el-submenu :index="item.name" v-if="!item.noDropdown&&!item.hidden"> <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 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"> - {{child.name}} + <span slot="title">{{child.name}}</span> </el-menu-item> </router-link> + </template> + </el-submenu> + </template> </div> </template> @@ -35,13 +42,6 @@ </script> <style rel="stylesheet/scss" lang="scss" scoped> - .svg-icon { - margin-right: 15px; - } - .hideSidebar .menu-indent { - display: block; - text-indent: 10px; - } </style>