|
@@ -10,6 +10,7 @@
|
|
|
open: openMenu,
|
|
|
},
|
|
|
]"
|
|
|
+ v-bind="getMenuEvents"
|
|
|
>
|
|
|
<AppLogo :showTitle="false" :class="`${prefixCls}-logo`" />
|
|
|
<ScrollContainer>
|
|
@@ -23,7 +24,7 @@
|
|
|
]"
|
|
|
v-for="item in menuModules"
|
|
|
:key="item.path"
|
|
|
- @click="hanldeModuleClick(item.path)"
|
|
|
+ v-bind="getItemEvents(item)"
|
|
|
>
|
|
|
<MenuTag :item="item" :showTitle="false" :isHorizontal="false" />
|
|
|
<g-icon
|
|
@@ -112,6 +113,7 @@
|
|
|
getCanDrag,
|
|
|
getCloseMixSidebarOnChange,
|
|
|
getMenuTheme,
|
|
|
+ getMixSideTrigger,
|
|
|
} = useMenuSetting();
|
|
|
const { title } = useGlobSetting();
|
|
|
|
|
@@ -125,6 +127,16 @@
|
|
|
}
|
|
|
);
|
|
|
|
|
|
+ const getMenuEvents = computed(() => {
|
|
|
+ return unref(getMixSideTrigger) === 'hover'
|
|
|
+ ? {
|
|
|
+ onMouseleave: () => {
|
|
|
+ openMenu.value = false;
|
|
|
+ },
|
|
|
+ }
|
|
|
+ : {};
|
|
|
+ });
|
|
|
+
|
|
|
const getShowDragBar = computed(() => unref(getCanDrag));
|
|
|
|
|
|
onMounted(async () => {
|
|
@@ -139,11 +151,13 @@
|
|
|
}
|
|
|
});
|
|
|
|
|
|
- async function hanldeModuleClick(path: string) {
|
|
|
+ async function hanldeModuleClick(path: string, hover = false) {
|
|
|
const children = await getChildrenMenus(path);
|
|
|
|
|
|
if (unref(activePath) === path) {
|
|
|
- openMenu.value = !unref(openMenu);
|
|
|
+ if (!hover) {
|
|
|
+ openMenu.value = !unref(openMenu);
|
|
|
+ }
|
|
|
if (!unref(openMenu)) {
|
|
|
setActive();
|
|
|
}
|
|
@@ -178,6 +192,17 @@
|
|
|
setActive();
|
|
|
}
|
|
|
|
|
|
+ function getItemEvents(item: Menu) {
|
|
|
+ if (unref(getMixSideTrigger) === 'hover') {
|
|
|
+ return {
|
|
|
+ onMouseenter: () => hanldeModuleClick(item.path, true),
|
|
|
+ };
|
|
|
+ }
|
|
|
+ return {
|
|
|
+ onClick: () => hanldeModuleClick(item.path),
|
|
|
+ };
|
|
|
+ }
|
|
|
+
|
|
|
return {
|
|
|
t,
|
|
|
prefixCls,
|
|
@@ -194,6 +219,8 @@
|
|
|
title,
|
|
|
openMenu,
|
|
|
getMenuTheme,
|
|
|
+ getItemEvents,
|
|
|
+ getMenuEvents,
|
|
|
};
|
|
|
},
|
|
|
});
|