mirror of
https://github.com/element-plus/element-plus.git
synced 2025-02-17 11:49:41 +08:00
Revert "fix(components): [menu] menus that are not in the expanded path do not open" (#10769)
Revert "fix(components): [menu] menus that are not in the expanded path do not open (#10480)"
This reverts commit 781b891c25
.
This commit is contained in:
parent
22a2bebd8a
commit
6dc77e3e93
@ -275,68 +275,6 @@ describe('default active', () => {
|
||||
expect(submenu.classes()).toContain('is-opened')
|
||||
expect(submenu.classes()).toContain('is-active')
|
||||
})
|
||||
test('default active and uniqueOpened', async () => {
|
||||
const template = `<div>
|
||||
<el-menu unique-opened default-active="0-0-0">
|
||||
<el-sub-menu v-for="(menu, index) of menus" :index="menu.key" :ref="'submenu' + index" @click="handleOpenSubMenu(index)">
|
||||
<template #title>{{ menu.title }}</template>
|
||||
<el-sub-menu :index="menu.key + '-0'" v-if="navData[menu.title]">
|
||||
<template #title>{{ navData[menu.title].subTitle }}</template>
|
||||
<el-menu-item :index="menu.key + '-0-0'" :ref="'submenuItem' + index">
|
||||
<template #title>{{ navData[menu.title].itemTitle }}</template>
|
||||
</el-menu-item>
|
||||
</el-sub-menu>
|
||||
</el-sub-menu>
|
||||
</el-menu>
|
||||
</div>`
|
||||
|
||||
const wrapper = _mount(template, {
|
||||
data() {
|
||||
return {
|
||||
menus: [],
|
||||
navData: {},
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
handleOpenSubMenu(index) {
|
||||
const { menus, navData } = this
|
||||
const menu = menus[index]
|
||||
if (navData[menu.title]) return
|
||||
navData[menu.title] = {
|
||||
subTitle: `subTitle${index}`,
|
||||
itemTitle: `menuItem${index}`,
|
||||
}
|
||||
},
|
||||
},
|
||||
})
|
||||
const instance = wrapper.vm as any
|
||||
instance.menus = Array.from({ length: 7 }).map((_, i) => {
|
||||
return {
|
||||
key: `${i}`,
|
||||
title: `menu${i}`,
|
||||
}
|
||||
})
|
||||
await nextTick()
|
||||
const submenu1 = await wrapper.findComponent({ ref: 'submenu0' })
|
||||
submenu1.vm.$el.querySelector('.el-sub-menu__title').click()
|
||||
await nextTick()
|
||||
const submenuItem1 = await wrapper.findComponent({ ref: 'submenuItem0' })
|
||||
expect(submenuItem1.classes()).toContain('is-active')
|
||||
expect(submenu1.classes()).toContain('is-opened')
|
||||
expect(submenu1.classes()).toContain('is-active')
|
||||
|
||||
const submenu2 = await wrapper.findComponent({ ref: 'submenu1' })
|
||||
submenu2.vm.$el.querySelector('.el-sub-menu__title').click()
|
||||
await nextTick()
|
||||
const submenuItem2 = await wrapper.findComponent({ ref: 'submenuItem1' })
|
||||
expect(submenu2.classes()).toContain('is-opened')
|
||||
expect(submenu1.classes()).not.toContain('is-opened')
|
||||
await submenuItem2.trigger('click')
|
||||
await nextTick()
|
||||
expect(submenu2.classes()).toContain('is-opened')
|
||||
expect(submenu2.classes()).toContain('is-active')
|
||||
expect(submenuItem2.classes()).toContain('is-active')
|
||||
})
|
||||
})
|
||||
|
||||
describe('submenu', () => {
|
||||
|
@ -116,7 +116,7 @@ export default defineComponent({
|
||||
const activeIndex = ref<MenuProvider['activeIndex']>(props.defaultActive)
|
||||
const items = ref<MenuProvider['items']>({})
|
||||
const subMenus = ref<MenuProvider['subMenus']>({})
|
||||
let activeItemFirstOpend = true
|
||||
|
||||
// computed
|
||||
const isMenuPopup = computed<MenuProvider['isMenuPopup']>(() => {
|
||||
return (
|
||||
@ -128,34 +128,16 @@ export default defineComponent({
|
||||
// methods
|
||||
const initMenu = () => {
|
||||
const activeItem = activeIndex.value && items.value[activeIndex.value]
|
||||
if (
|
||||
!activeItem ||
|
||||
props.mode === 'horizontal' ||
|
||||
props.collapse ||
|
||||
(props.uniqueOpened && !activeItemFirstOpend)
|
||||
)
|
||||
return
|
||||
if (!activeItem || props.mode === 'horizontal' || props.collapse) return
|
||||
|
||||
const indexPath = activeItem.indexPath
|
||||
|
||||
// 展开该菜单项的路径上所有子菜单
|
||||
// expand all subMenus of the menu item
|
||||
const openAllActiveItem = () => {
|
||||
activeItemFirstOpend = false
|
||||
indexPath.forEach((index) => {
|
||||
const subMenu = subMenus.value[index]
|
||||
subMenu && openMenu(index, subMenu.indexPath)
|
||||
})
|
||||
}
|
||||
|
||||
if (activeIndex.value === props.defaultActive && activeItemFirstOpend) {
|
||||
openAllActiveItem()
|
||||
} else {
|
||||
// fix: #10431
|
||||
if (indexPath.every((index) => openedMenus.value.includes(index))) {
|
||||
openAllActiveItem()
|
||||
}
|
||||
}
|
||||
indexPath.forEach((index) => {
|
||||
const subMenu = subMenus.value[index]
|
||||
subMenu && openMenu(index, subMenu.indexPath)
|
||||
})
|
||||
}
|
||||
|
||||
const openMenu: MenuProvider['openMenu'] = (index, indexPath) => {
|
||||
|
Loading…
Reference in New Issue
Block a user