fix(menu): fix mix-menu incorrect jumping in hover mode

修复悬停触发模式下左侧混合菜单会在没有子菜单且被激活时直接跳转路由
This commit is contained in:
无木
2021-07-09 19:20:05 +08:00
parent 5ceeefd17d
commit cad021c34b
2 changed files with 21 additions and 16 deletions

View File

@@ -63,7 +63,7 @@
</div>
<ScrollContainer :class="`${prefixCls}-menu-list__content`">
<SimpleMenu
:items="chilrenMenus"
:items="childrenMenus"
:theme="getMenuTheme"
mixSider
@menuClick="handleMenuClick"
@@ -114,7 +114,7 @@
setup() {
let menuModules = ref<Menu[]>([]);
const activePath = ref('');
const chilrenMenus = ref<Menu[]>([]);
const childrenMenus = ref<Menu[]>([]);
const openMenu = ref(false);
const dragBarRef = ref<ElRef>(null);
const sideRef = ref<ElRef>(null);
@@ -150,7 +150,7 @@
const getIsFixed = computed(() => {
/* eslint-disable-next-line */
mixSideHasChildren.value = unref(chilrenMenus).length > 0;
mixSideHasChildren.value = unref(childrenMenus).length > 0;
const isFixed = unref(getMixSideFixed) && unref(mixSideHasChildren);
if (isFixed) {
/* eslint-disable-next-line */
@@ -209,9 +209,8 @@
}
// Process module menu click
async function hanldeModuleClick(path: string, hover = false) {
async function handleModuleClick(path: string, hover = false) {
const children = await getChildrenMenus(path);
if (unref(activePath) === path) {
if (!hover) {
if (!unref(openMenu)) {
@@ -233,12 +232,12 @@
}
if (!children || children.length === 0) {
go(path);
chilrenMenus.value = [];
if (!hover) go(path);
childrenMenus.value = [];
closeMenu();
return;
}
chilrenMenus.value = children;
childrenMenus.value = children;
}
// Set the currently active menu and submenu
@@ -253,14 +252,14 @@
if (p) {
const children = await getChildrenMenus(p);
if (setChildren) {
chilrenMenus.value = children;
childrenMenus.value = children;
if (unref(getMixSideFixed)) {
openMenu.value = children.length > 0;
}
}
if (children.length === 0) {
chilrenMenus.value = [];
childrenMenus.value = [];
}
}
}
@@ -278,11 +277,15 @@
function getItemEvents(item: Menu) {
if (unref(getMixSideTrigger) === 'hover') {
return {
onMouseenter: () => hanldeModuleClick(item.path, true),
onMouseenter: () => handleModuleClick(item.path, true),
onClick: async () => {
const children = await getChildrenMenus(item.path);
if (item.path && (!children || children.length === 0)) go(item.path);
},
};
}
return {
onClick: () => hanldeModuleClick(item.path),
onClick: () => handleModuleClick(item.path),
};
}
@@ -303,9 +306,9 @@
t,
prefixCls,
menuModules,
hanldeModuleClick,
handleModuleClick: handleModuleClick,
activePath,
chilrenMenus,
childrenMenus: childrenMenus,
getShowDragBar,
handleMenuClick,
getMenuStyle,