feat(menu): add mixSideTrigger setting
| | |
| | | ## Wip |
| | | |
| | | ### ✨ Features |
| | | |
| | | - 新增`mixSideTrigger`配置。用于配置左侧混合模式菜单打开方式。可选`hover`,默认`click` |
| | | |
| | | ## 2.0.0-rc.15 (2020-12-31) |
| | | |
| | | ### ✨ 表格破坏性更新 |
| | |
| | | |
| | | const getMenuBgColor = computed(() => unref(getMenuSetting).bgColor); |
| | | |
| | | const getMixSideTrigger = computed(() => unref(getMenuSetting).mixSideTrigger); |
| | | |
| | | const getCanDrag = computed(() => unref(getMenuSetting).canDrag); |
| | | |
| | | const getAccordion = computed(() => unref(getMenuSetting).accordion); |
| | |
| | | getIsMixMode, |
| | | getIsMixSidebar, |
| | | getCloseMixSidebarOnChange, |
| | | getMixSideTrigger, |
| | | }; |
| | | } |
| | |
| | | open: openMenu, |
| | | }, |
| | | ]" |
| | | v-bind="getMenuEvents" |
| | | > |
| | | <AppLogo :showTitle="false" :class="`${prefixCls}-logo`" /> |
| | | <ScrollContainer> |
| | |
| | | ]" |
| | | 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 |
| | |
| | | getCanDrag, |
| | | getCloseMixSidebarOnChange, |
| | | getMenuTheme, |
| | | getMixSideTrigger, |
| | | } = useMenuSetting(); |
| | | const { title } = useGlobSetting(); |
| | | |
| | |
| | | }; |
| | | } |
| | | ); |
| | | |
| | | const getMenuEvents = computed(() => { |
| | | return unref(getMixSideTrigger) === 'hover' |
| | | ? { |
| | | onMouseleave: () => { |
| | | openMenu.value = false; |
| | | }, |
| | | } |
| | | : {}; |
| | | }); |
| | | |
| | | const getShowDragBar = computed(() => unref(getCanDrag)); |
| | | |
| | |
| | | } |
| | | }); |
| | | |
| | | async function hanldeModuleClick(path: string) { |
| | | async function hanldeModuleClick(path: string, hover = false) { |
| | | const children = await getChildrenMenus(path); |
| | | |
| | | if (unref(activePath) === path) { |
| | | if (!hover) { |
| | | openMenu.value = !unref(openMenu); |
| | | } |
| | | if (!unref(openMenu)) { |
| | | setActive(); |
| | | } |
| | |
| | | setActive(); |
| | | } |
| | | |
| | | function getItemEvents(item: Menu) { |
| | | if (unref(getMixSideTrigger) === 'hover') { |
| | | return { |
| | | onMouseenter: () => hanldeModuleClick(item.path, true), |
| | | }; |
| | | } |
| | | return { |
| | | onClick: () => hanldeModuleClick(item.path), |
| | | }; |
| | | } |
| | | |
| | | return { |
| | | t, |
| | | prefixCls, |
| | |
| | | title, |
| | | openMenu, |
| | | getMenuTheme, |
| | | getItemEvents, |
| | | getMenuEvents, |
| | | }; |
| | | }, |
| | | }); |
| | |
| | | accordion: true, |
| | | // Switch page to close menu |
| | | closeMixSidebarOnChange: false, |
| | | // Module opening method ‘click’ |'hover' |
| | | mixSideTrigger: 'hover', |
| | | }, |
| | | |
| | | // Multi-label |
| | |
| | | accordion: boolean; |
| | | closeMixSidebarOnChange: boolean; |
| | | collapsedShowTitle: boolean; |
| | | mixSideTrigger: 'click' | 'hover'; |
| | | } |
| | | |
| | | export interface MultiTabsSetting { |