mirror of https://github.com/ElemeFE/element
add suport for mutil level submenu
parent
e7e104df5d
commit
4fa158eb32
|
@ -77,6 +77,10 @@ Vertical NavMenu with sub-menus.
|
|||
<el-menu-item-group title="Group Two">
|
||||
<el-menu-item index="1-3">item three</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-submenu index="1-4">
|
||||
<template slot="title">item four</template>
|
||||
<el-menu-item index="1-4-1">item one</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-submenu>
|
||||
<el-menu-item index="2"><i class="el-icon-menu"></i>Navigator Two</el-menu-item>
|
||||
<el-menu-item index="3"><i class="el-icon-setting"></i>Navigator Three</el-menu-item>
|
||||
|
@ -94,6 +98,10 @@ Vertical NavMenu with sub-menus.
|
|||
<el-menu-item-group title="Group Two">
|
||||
<el-menu-item index="1-3">item three</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-submenu index="1-4">
|
||||
<template slot="title">item four</template>
|
||||
<el-menu-item index="1-4-1">item one</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-submenu>
|
||||
<el-menu-item index="2">Navigator Two</el-menu-item>
|
||||
<el-menu-item index="3">Navigator Three</el-menu-item>
|
||||
|
@ -109,16 +117,6 @@ Vertical NavMenu with sub-menus.
|
|||
<el-menu-item-group title="Group Two">
|
||||
<el-menu-item index="3"><i class="el-icon-message"></i>Navigator Three</el-menu-item>
|
||||
<el-menu-item index="4"><i class="el-icon-message"></i>Navigator Four</el-menu-item>
|
||||
<!-- <el-submenu index="5">
|
||||
<template slot="title">Navigator Five</template>
|
||||
<el-menu-item-group title="Group One">
|
||||
<el-menu-item index="5-1">item one</el-menu-item>
|
||||
<el-menu-item index="5-2">item two</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-menu-item-group title="Group Two">
|
||||
<el-menu-item index="5-3">item three</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
</el-submenu> -->
|
||||
</el-menu-item-group>
|
||||
</el-menu>
|
||||
</el-col>
|
||||
|
|
|
@ -108,6 +108,10 @@
|
|||
<el-menu-item-group title="分组2">
|
||||
<el-menu-item index="1-3">选项3</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-submenu index="1-4">
|
||||
<template slot="title">选项4</template>
|
||||
<el-menu-item index="1-4-1">选项1</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-submenu>
|
||||
<el-menu-item index="2"><i class="el-icon-menu"></i>导航二</el-menu-item>
|
||||
<el-menu-item index="3"><i class="el-icon-setting"></i>导航三</el-menu-item>
|
||||
|
@ -125,6 +129,10 @@
|
|||
<el-menu-item-group title="分组2">
|
||||
<el-menu-item index="1-3">选项3</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-submenu index="1-4">
|
||||
<template slot="title">选项4</template>
|
||||
<el-menu-item index="1-4-1">选项1</el-menu-item>
|
||||
</el-submenu>
|
||||
</el-submenu>
|
||||
<el-menu-item index="2">导航二</el-menu-item>
|
||||
<el-menu-item index="3">导航三</el-menu-item>
|
||||
|
@ -140,16 +148,6 @@
|
|||
<el-menu-item-group title="分组二">
|
||||
<el-menu-item index="3"><i class="el-icon-message"></i>导航三</el-menu-item>
|
||||
<el-menu-item index="4"><i class="el-icon-message"></i>导航四</el-menu-item>
|
||||
<!-- <el-submenu index="5">
|
||||
<template slot="title">导航五</template>
|
||||
<el-menu-item-group title="分组一">
|
||||
<el-menu-item index="5-1">选项1</el-menu-item>
|
||||
<el-menu-item index="5-2">选项2</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
<el-menu-item-group title="分组二">
|
||||
<el-menu-item index="5-3">选项3</el-menu-item>
|
||||
</el-menu-item-group>
|
||||
</el-submenu> -->
|
||||
</el-menu-item-group>
|
||||
</el-menu>
|
||||
</el-col>
|
||||
|
|
|
@ -14,31 +14,26 @@
|
|||
paddingLeft: 20
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
initPadding() {
|
||||
var parent = this.$parent;
|
||||
var level = 0;
|
||||
var component = parent.$options.componentName;
|
||||
|
||||
while (component !== 'ElMenu') {
|
||||
if (component === 'ElSubmenu') {
|
||||
level++;
|
||||
computed: {
|
||||
levelPadding() {
|
||||
let padding = 10;
|
||||
let parent = this.$parent;
|
||||
while (parent && parent.$options.componentName !== 'ElMenu') {
|
||||
if (parent.$options.componentName === 'ElSubmenu') {
|
||||
padding += 20;
|
||||
}
|
||||
parent = parent.$parent;
|
||||
component = parent.$options.componentName;
|
||||
}
|
||||
this.paddingLeft += level * 10;
|
||||
padding === 10 && (padding = 20);
|
||||
return padding;
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
this.initPadding();
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<li class="el-menu-item-group">
|
||||
<div class="el-menu-item-group__title" :style="{'padding-left': paddingLeft + 'px'}">
|
||||
<div class="el-menu-item-group__title" :style="{paddingLeft: levelPadding + 'px'}">
|
||||
<template v-if="!$slots.title">{{title}}</template>
|
||||
<slot v-else name="title"></slot>
|
||||
</div>
|
||||
|
|
|
@ -1,3 +1,14 @@
|
|||
<template>
|
||||
<li class="el-menu-item"
|
||||
:style="paddingStyle"
|
||||
@click="handleClick"
|
||||
:class="{
|
||||
'is-active': active,
|
||||
'is-disabled': disabled
|
||||
}">
|
||||
<slot></slot>
|
||||
</li>
|
||||
</template>
|
||||
<script>
|
||||
import Menu from './menu-mixin';
|
||||
module.exports = {
|
||||
|
@ -41,14 +52,3 @@
|
|||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<li class="el-menu-item"
|
||||
@click="handleClick"
|
||||
:class="{
|
||||
'is-active': active,
|
||||
'is-disabled': disabled
|
||||
}">
|
||||
<slot></slot>
|
||||
</li>
|
||||
</template>
|
||||
|
|
|
@ -17,6 +17,19 @@ module.exports = {
|
|||
parent = parent.$parent;
|
||||
}
|
||||
return parent;
|
||||
},
|
||||
paddingStyle() {
|
||||
if (this.rootMenu.mode !== 'vertical') return {};
|
||||
|
||||
let padding = 20;
|
||||
let parent = this.$parent;
|
||||
while (parent && parent.$options.componentName !== 'ElMenu') {
|
||||
if (parent.$options.componentName === 'ElSubmenu') {
|
||||
padding += 20;
|
||||
}
|
||||
parent = parent.$parent;
|
||||
}
|
||||
return {paddingLeft: padding + 'px'};
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -6,14 +6,13 @@
|
|||
'is-opened': opened
|
||||
}"
|
||||
>
|
||||
<div class="el-submenu__title" ref="submenu-title">
|
||||
|
||||
<div class="el-submenu__title" ref="submenu-title" :style="paddingStyle">
|
||||
<slot name="title"></slot>
|
||||
<i :class="{
|
||||
'el-submenu__icon-arrow': true,
|
||||
'el-icon-arrow-down': rootMenu.mode === 'vertical',
|
||||
'el-icon-caret-bottom': rootMenu.mode === 'horizontal'
|
||||
}">
|
||||
'el-submenu__icon-arrow': true,
|
||||
'el-icon-arrow-down': rootMenu.mode === 'vertical',
|
||||
'el-icon-caret-bottom': rootMenu.mode === 'horizontal'
|
||||
}">
|
||||
</i>
|
||||
</div>
|
||||
<transition :name="rootMenu.mode === 'horizontal' ? 'el-zoom-in-top' : ''">
|
||||
|
|
|
@ -189,7 +189,7 @@
|
|||
}
|
||||
}
|
||||
@when opened {
|
||||
.el-submenu__icon-arrow {
|
||||
> .el-submenu__title .el-submenu__icon-arrow {
|
||||
transform: rotateZ(180deg);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue