diff --git a/vue/element-ui-personal/components/Menu/MenuItem.vue b/vue/element-ui-personal/components/Menu/MenuItem.vue new file mode 100644 index 0000000..061b070 --- /dev/null +++ b/vue/element-ui-personal/components/Menu/MenuItem.vue @@ -0,0 +1,74 @@ + + + diff --git a/vue/element-ui-personal/components/Menu/Submenu.vue b/vue/element-ui-personal/components/Menu/Submenu.vue new file mode 100644 index 0000000..46d00cd --- /dev/null +++ b/vue/element-ui-personal/components/Menu/Submenu.vue @@ -0,0 +1,278 @@ + + + diff --git a/vue/element-ui-personal/index.js b/vue/element-ui-personal/index.js index 0d6836a..addf6d5 100644 --- a/vue/element-ui-personal/index.js +++ b/vue/element-ui-personal/index.js @@ -1,7 +1,9 @@ +import MenuItem from "./components/Menu/MenuItem" +import Submenu from "./components/Menu/Submenu" import Message from "./components/Message" import Select from './components/Select/Select' -const components = [Select] +const components = [MenuItem, Submenu, Select] export default function (Vue) { components.forEach(component => { diff --git a/vue/element-ui-personal/mixins/vue-popper.js b/vue/element-ui-personal/mixins/vue-popper.js index bc2efca..634d43f 100644 --- a/vue/element-ui-personal/mixins/vue-popper.js +++ b/vue/element-ui-personal/mixins/vue-popper.js @@ -43,7 +43,7 @@ export default { this.showPopper = val this.$emit('input', val) if (this.disabled) return - val && this.updatePopper() + val ? this.updatePopper() : this.destroyPopper() } } }, diff --git a/vue/src/assets/styles/variables.scss b/vue/src/assets/styles/variables.scss index 11a591e..94a88d1 100644 --- a/vue/src/assets/styles/variables.scss +++ b/vue/src/assets/styles/variables.scss @@ -36,16 +36,19 @@ $--color-info: $--color-teal; } } -// sidebar -$menu-text-color: #D6E2F0; -$menu-active-text-color: $--color-primary; -$menu-background: #304156; -$menu-hover: #263445; +//el-sub-menu的背景色 $sub-menu-background: #1f2d3d; -$sub-menu-hover: #001528; +//覆盖el-menu的背景色 +$--menu-background-color: #304156; +//覆盖el-menu的文字颜色 +$--menu-item-font-color: hsla(0, 0%, 99.6%, .65); +//el-menu的文字hover颜色 +$--menu-item-hover-color: #fefefe; +//覆盖el-menu的文字hover背景颜色 +$--menu-item-hover-fill: none; //侧边栏宽度 -$side-bar-width: 210px; +$side-bar-width: 256px; //头部导航栏高度 $nav-height: 50px; //头部多页签栏高度 @@ -60,9 +63,6 @@ $--font-path: '~element-ui/lib/theme-chalk/fonts'; // the :export directive is the magic sauce for webpack // https://www.bluematador.com/blog/how-to-share-variables-between-js-and-sass :export { - menu-text-color: $menu-text-color; - menu-active-text-color: $menu-active-text-color; - menu-background: $menu-background; primary: $--color-primary; info: $--color-info; success: $--color-success; diff --git a/vue/src/components/ContextMenu/index.vue b/vue/src/components/ContextMenu/index.vue index 0fdd99d..bee4c99 100644 --- a/vue/src/components/ContextMenu/index.vue +++ b/vue/src/components/ContextMenu/index.vue @@ -67,7 +67,7 @@ .contextmenu { margin: 0; - background: $menu-background; + background: $--menu-background-color; z-index: 10; position: absolute; list-style-type: none; @@ -84,7 +84,6 @@ cursor: pointer; &:hover { - background: $menu-hover; color: $--color-primary; } } diff --git a/vue/src/layout/components/Sidebar/components/SidebarItem.vue b/vue/src/layout/components/Sidebar/components/SidebarItem.vue index 77f0560..ed46fe1 100644 --- a/vue/src/layout/components/Sidebar/components/SidebarItem.vue +++ b/vue/src/layout/components/Sidebar/components/SidebarItem.vue @@ -11,7 +11,7 @@ return null } - function renderNode(h, {item, isNest, showParent, collapse}) { + function renderNode(h, {item, showParent, collapse}) { let onlyOneChild = getOnlyChild(item) const showSingle = onlyOneChild && !onlyOneChild.children @@ -20,10 +20,7 @@ const {icon, title} = onlyOneChild.meta return ( - + ) @@ -31,8 +28,7 @@ else { const {icon, title} = item.meta - const children = item.children.map(child => renderNode(h, { - isNest: true, + let children = item.children.map(child => renderNode(h, { item: child, showParent, collapse @@ -42,16 +38,17 @@ if (collapse) { //弹出菜单显示父级信息 if (showParent) { - children.unshift( + children = [
-
- ) + , +
{children}
+ ] } } return ( - + {children} @@ -64,7 +61,6 @@ props: { item: Object, - isNest: Boolean, showParent: Boolean, collapse: Boolean }, diff --git a/vue/src/layout/components/Sidebar/index.vue b/vue/src/layout/components/Sidebar/index.vue index ca2cf8d..65bd974 100644 --- a/vue/src/layout/components/Sidebar/index.vue +++ b/vue/src/layout/components/Sidebar/index.vue @@ -3,7 +3,6 @@ import Logo from './components/Logo' import SidebarItem from './components/SidebarItem' import {isExternal} from "@/utils/validate" - import variables from '@/assets/styles/variables.scss' export default { name: 'sidebar', @@ -126,9 +125,6 @@ const menu = ( .el-submenu__title { - color: $--color-primary !important; - } - - // menu hover - .submenu-title-noDropdown, - .el-submenu__title { - &:hover { - background-color: $menu-hover !important; - } - } - - .nest-menu > .el-submenu__title, - .el-submenu .el-menu-item { - background-color: $sub-menu-background !important; - - &:hover { - background-color: $sub-menu-hover !important; - } - } } .el-menu { @@ -118,31 +96,46 @@ $iconSize: 17px; height: $iconSize; } - a { - display: inline-block; - width: 100%; - overflow: hidden; + //菜单hover + .el-menu-item:hover, + .el-submenu__title:hover { + color: $--menu-item-hover-color; + } - &.el-menu--popup { - max-height: 88vh; - margin-bottom: 0.5vh; - overflow-y: auto; - overflow-y: overlay; + //子级菜单激活时,父级同样高亮 + .el-menu-item.is-active, + .is-active > .el-submenu__title { + color: $--color-primary !important; + } + + //子级菜单的背景颜色 + &.el-menu--inline, + .el-submenu .el-submenu > .el-submenu__title { + background-color: $sub-menu-background; } + //子级菜单内阴影 + &.el-menu--inline { + box-shadow: inset 0 2px 8px rgba(0, 0, 0, .45) + } + + //箭头图标与字体同色 .el-submenu__title i { color: inherit; } - .popover-menu__title { - cursor: auto; - text-align: center; - color: $menu-text-color; - border-bottom: 1px solid $sub-menu-background; + //折叠时的弹出菜单 + &.el-menu--popup { + max-height: 88vh; + margin-bottom: 0.5vh; + overflow-y: overlay; - &.el-menu-item:hover { - background-color: $menu-background; + .popover-menu__title { + cursor: auto; + color: $--menu-item-hover-color; + text-align: center; + border-bottom: 1px solid $sub-menu-background; } } }