From de25557f86945a96b89294043796ccf4ab476ad5 Mon Sep 17 00:00:00 2001 From: vben Date: Thu, 17 Dec 2020 00:20:29 +0800 Subject: [PATCH] fix(menu): fix scrillbar not work --- CHANGELOG.zh_CN.md | 6 + src/components/Menu/src/BasicMenu.vue | 3 +- src/layouts/default/header/index.vue | 18 ++- src/layouts/default/menu/index.tsx | 8 +- src/layouts/default/setting/SettingDrawer.tsx | 20 ++- src/layouts/default/setting/enum.ts | 34 +++-- src/layouts/default/setting/handler.ts | 1 + src/layouts/default/sider/LayoutSider.tsx | 121 ---------------- src/layouts/default/sider/LayoutSider.vue | 132 ++++++++++++++++++ src/layouts/default/sider/index.vue | 2 +- .../{useLayoutSider.tsx => useLayoutSider.ts} | 16 +-- 11 files changed, 204 insertions(+), 157 deletions(-) delete mode 100644 src/layouts/default/sider/LayoutSider.tsx create mode 100644 src/layouts/default/sider/LayoutSider.vue rename src/layouts/default/sider/{useLayoutSider.tsx => useLayoutSider.ts} (90%) diff --git a/CHANGELOG.zh_CN.md b/CHANGELOG.zh_CN.md index 815c9caeb85..c053de5e05e 100644 --- a/CHANGELOG.zh_CN.md +++ b/CHANGELOG.zh_CN.md @@ -1,3 +1,9 @@ +## Wip + +### 🐛 Bug Fixes + +- 修复混合模式下滚动条丢失问题 + ## 2.0.0-rc.14 (2020-12-15) ### ✨ Features diff --git a/src/components/Menu/src/BasicMenu.vue b/src/components/Menu/src/BasicMenu.vue index 99aa939d48f..463b0516c2a 100644 --- a/src/components/Menu/src/BasicMenu.vue +++ b/src/components/Menu/src/BasicMenu.vue @@ -90,9 +90,10 @@ }); const getMenuClass = computed(() => { + const align = props.isHorizontal && unref(getSplit) ? 'start' : unref(getTopMenuAlign); return [ prefixCls, - `justify-${unref(getTopMenuAlign)}`, + `justify-${align}`, { [`${prefixCls}--hide-title`]: !unref(showTitle), [`${prefixCls}--collapsed-show-title`]: props.collapsedShowTitle, diff --git a/src/layouts/default/header/index.vue b/src/layouts/default/header/index.vue index 4f248cf3962..bb1e8d42327 100644 --- a/src/layouts/default/header/index.vue +++ b/src/layouts/default/header/index.vue @@ -7,6 +7,7 @@ v-if="getShowHeaderLogo || getIsMobile" :class="`${prefixCls}-logo`" :theme="getHeaderTheme" + :style="getLogoWidth" /> { + if (!unref(getIsMixMode)) { + return {}; + } + const width = unref(getMenuWidth) < 180 ? 180 : unref(getMenuWidth); + return { width: `${width}px` }; + }); + const getSplitType = computed(() => { return unref(getSplit) ? MenuSplitTyeEnum.TOP : MenuSplitTyeEnum.NONE; }); @@ -157,6 +172,7 @@ getShowNotice, getUseLockPage, getUseErrorHandle, + getLogoWidth, }; }, }); diff --git a/src/layouts/default/menu/index.tsx b/src/layouts/default/menu/index.tsx index 66ccd76d2f9..ef6ca57252a 100644 --- a/src/layouts/default/menu/index.tsx +++ b/src/layouts/default/menu/index.tsx @@ -47,6 +47,7 @@ export default defineComponent({ getMenuTheme, getCollapsed, getAccordion, + getIsHorizontal, getIsSidebarType, } = useMenuSetting(); const { getShowLogo } = useRootSetting(); @@ -66,7 +67,12 @@ export default defineComponent({ const getIsShowLogo = computed(() => unref(getShowLogo) && unref(getIsSidebarType)); const getUseScroll = computed(() => { - return unref(getIsSidebarType) || props.splitType === MenuSplitTyeEnum.LEFT; + return ( + !unref(getIsHorizontal) && + (unref(getIsSidebarType) || + props.splitType === MenuSplitTyeEnum.LEFT || + props.splitType === MenuSplitTyeEnum.NONE) + ); }); const getWrapperStyle = computed( diff --git a/src/layouts/default/setting/SettingDrawer.tsx b/src/layouts/default/setting/SettingDrawer.tsx index 1871f787f91..1b4c7748a36 100644 --- a/src/layouts/default/setting/SettingDrawer.tsx +++ b/src/layouts/default/setting/SettingDrawer.tsx @@ -10,7 +10,7 @@ import { InputNumberItem, } from './components'; -import { MenuTypeEnum } from '/@/enums/menuEnum'; +import { MenuTypeEnum, TriggerEnum } from '/@/enums/menuEnum'; import { useRootSetting } from '/@/hooks/setting/useRootSetting'; import { useMenuSetting } from '/@/hooks/setting/useMenuSetting'; @@ -25,7 +25,7 @@ import { HandlerEnum, contentModeOptions, topMenuAlignOptions, - menuTriggerOptions, + getMenuTriggerOptions, routerTransitionOptions, menuTypeList, } from './enum'; @@ -134,6 +134,14 @@ export default defineComponent({ * @description: */ function renderFeatures() { + let triggerDef = unref(getTrigger); + + const triggerOptions = getMenuTriggerOptions(unref(getSplit)); + const some = triggerOptions.some((item) => item.value === triggerDef); + if (!some) { + triggerDef = TriggerEnum.FOOTER; + } + return ( <> { + return [ + { + value: TriggerEnum.NONE, + label: t('layout.setting.menuTriggerNone'), + }, + { + value: TriggerEnum.FOOTER, + label: t('layout.setting.menuTriggerBottom'), + }, + ...(hideTop + ? [] + : [ + { + value: TriggerEnum.HEADER, + label: t('layout.setting.menuTriggerTop'), + }, + ]), + ]; +}; export const routerTransitionOptions = [ RouterTransitionEnum.ZOOM_FADE, diff --git a/src/layouts/default/setting/handler.ts b/src/layouts/default/setting/handler.ts index 227e4127d70..6a2dc41516b 100644 --- a/src/layouts/default/setting/handler.ts +++ b/src/layouts/default/setting/handler.ts @@ -25,6 +25,7 @@ export function handler(event: HandlerEnum, value: any): DeepPartial(null); - const sideRef = ref(null); - - const { - getCollapsed, - getMenuWidth, - getSplit, - getMenuTheme, - getRealWidth, - getMenuHidden, - getMenuFixed, - getIsMixMode, - } = useMenuSetting(); - - const { prefixCls } = useDesign('layout-sideBar'); - - const { getIsMobile } = useAppInject(); - - const { getTriggerAttr, getTriggerSlot } = useTrigger(getIsMobile); - - useDragLine(sideRef, dragBarRef); - - const { getCollapsedWidth, onBreakpointChange, onCollapseChange } = useSiderEvent(); - - const getMode = computed(() => { - return unref(getSplit) ? MenuModeEnum.INLINE : null; - }); - - const getSplitType = computed(() => { - return unref(getSplit) ? MenuSplitTyeEnum.LEFT : MenuSplitTyeEnum.NONE; - }); - - const showClassSideBarRef = computed(() => { - return unref(getSplit) ? !unref(getMenuHidden) : true; - }); - - const getSiderClass = computed(() => { - return [ - prefixCls, - { - [`${prefixCls}--fixed`]: unref(getMenuFixed), - hidden: !unref(showClassSideBarRef), - [`${prefixCls}--mix`]: unref(getIsMixMode) && !unref(getIsMobile), - }, - ]; - }); - - const getHiddenDomStyle = computed( - (): CSSProperties => { - const width = `${unref(getRealWidth)}px`; - return { - width: width, - overflow: 'hidden', - flex: `0 0 ${width}`, - maxWidth: width, - minWidth: width, - transition: 'all 0.2s', - }; - } - ); - - function renderDefault() { - return ( - <> - - - - ); - } - - return () => { - return ( - <> - {unref(getMenuFixed) && !unref(getIsMobile) && ( -
- )} - - {{ - ...unref(getTriggerSlot), - default: () => renderDefault(), - }} - - - ); - }; - }, -}); diff --git a/src/layouts/default/sider/LayoutSider.vue b/src/layouts/default/sider/LayoutSider.vue new file mode 100644 index 00000000000..7793a9ff7be --- /dev/null +++ b/src/layouts/default/sider/LayoutSider.vue @@ -0,0 +1,132 @@ + + + diff --git a/src/layouts/default/sider/index.vue b/src/layouts/default/sider/index.vue index 57920038a2c..ebf48c24826 100644 --- a/src/layouts/default/sider/index.vue +++ b/src/layouts/default/sider/index.vue @@ -15,7 +15,7 @@