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:
zz 2022-11-25 21:47:05 +08:00 committed by GitHub
parent 22a2bebd8a
commit 6dc77e3e93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 86 deletions

View File

@ -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', () => {

View File

@ -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) => {