From 5799df9bf202eb17f7b784be7eb79404fce68e8f Mon Sep 17 00:00:00 2001 From: baiyaaaaa Date: Thu, 18 Jan 2018 12:22:23 +0800 Subject: [PATCH] add menu-list --- packages/menu/src/menu-list.vue | 96 ++++++++++++++++++++++++++++++ packages/menu/src/submenu.vue | 74 +++++------------------ packages/theme-chalk/src/menu.scss | 6 +- 3 files changed, 115 insertions(+), 61 deletions(-) create mode 100644 packages/menu/src/menu-list.vue diff --git a/packages/menu/src/menu-list.vue b/packages/menu/src/menu-list.vue new file mode 100644 index 000000000..63d72e4f8 --- /dev/null +++ b/packages/menu/src/menu-list.vue @@ -0,0 +1,96 @@ + diff --git a/packages/menu/src/submenu.vue b/packages/menu/src/submenu.vue index 4de506bac..e53949bce 100644 --- a/packages/menu/src/submenu.vue +++ b/packages/menu/src/submenu.vue @@ -3,6 +3,7 @@ import menuMixin from './menu-mixin'; import Emitter from 'element-ui/src/mixins/emitter'; import Popper from 'element-ui/src/utils/vue-popper'; + import MenuList from './menu-list'; export default { name: 'ElSubmenu', @@ -11,13 +12,9 @@ mixins: [menuMixin, Emitter, Popper], - components: { ElCollapseTransition }, + components: { ElCollapseTransition, MenuList }, props: { - transformOrigin: { - type: [Boolean, String], - default: false - }, index: { type: String, required: true @@ -105,17 +102,12 @@ ? this.activeTextColor : this.textColor }; + }, + popperPlacement() { + return this.mode === 'horizontal' ? 'bottom-start' : 'right-start'; } }, methods: { - handleCollapseToggle(value) { - if (value) { - this.initPopper(); - } else { - this.doDestroy(); - document.body.removeChild(this.popperElm); - } - }, addItem(item) { this.$set(this.items, item.index, item); }, @@ -173,23 +165,11 @@ if (this.mode === 'horizontal' && !this.rootMenu.backgroundColor) return; const title = this.$refs['submenu-title']; title && (title.style.backgroundColor = this.rootMenu.backgroundColor || ''); - }, - updatePlacement() { - this.currentPlacement = this.mode === 'horizontal' ? 'bottom-start' : 'right-start'; - }, - initPopper() { - this.referenceElm = this.$el; - this.popperElm = this.$refs.menu; - this.updatePlacement(); } }, created() { this.parentMenu.addSubmenu(this); this.rootMenu.addSubmenu(this); - this.$on('toggle-collapse', this.handleCollapseToggle); - }, - mounted() { - this.initPopper(); }, beforeDestroy() { this.parentMenu.removeSubmenu(this); @@ -204,42 +184,10 @@ backgroundColor, $slots, rootMenu, - currentPlacement, - menuTransitionName, + isMenuPopup, mode } = this; - const popupMenu = ( - -
- -
-
- ); - - const inlineMenu = ( - - - - ); - return (
  • - {this.isMenuPopup ? popupMenu : inlineMenu} + + {$slots.default} +
  • ); } diff --git a/packages/theme-chalk/src/menu.scss b/packages/theme-chalk/src/menu.scss index c34fcc74c..213eebf3b 100644 --- a/packages/theme-chalk/src/menu.scss +++ b/packages/theme-chalk/src/menu.scss @@ -103,6 +103,9 @@ border-bottom: 2px solid $--color-primary; color: $--color-text-primary; } + & .el-menu--popup { + padding: 5px 0; + } } @include m(collapse) { width: 64px; @@ -159,10 +162,9 @@ z-index: 100; min-width: 200px; border: none; - padding: 5px 0; border-radius: $--border-radius-small; box-shadow: $--box-shadow-light; - overflow: hidden; + // overflow: hidden; &-bottom-start { margin-top: 5px;