mirror of
https://github.com/vbenjs/vue-vben-admin.git
synced 2025-08-27 14:47:28 +08:00
fix(menu): fix mix-menu incorrect jumping in hover
mode
修复悬停触发模式下左侧混合菜单会在没有子菜单且被激活时直接跳转路由
This commit is contained in:
@@ -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,
|
||||
|
Reference in New Issue
Block a user