fix: 优化侧边栏拖拽逻辑,支持展开和折叠

This commit is contained in:
zouawen
2026-02-27 10:53:50 +08:00
parent 99710ef9dc
commit afffc4b3f0
4 changed files with 35 additions and 25 deletions

View File

@@ -3,11 +3,11 @@ import type { CSSProperties } from 'vue';
import { computed, shallowRef, useSlots, watchEffect } from 'vue';
import { useResizable } from '@vben-core/composables';
import { VbenScrollbar } from '@vben-core/shadcn-ui';
import { useScrollLock } from '@vueuse/core';
import { useSidebarDrag } from '../hooks/use-sidebar-drag';
import { SidebarCollapseButton, SidebarFixedButton } from './widgets';
interface Props {
@@ -256,18 +256,29 @@ function handleMouseleave() {
extraVisible.value = false;
}
const { startDrag } = useResizable({
min: 160,
max: 320,
onChange: (newWidth) => {
emit('update:width', newWidth);
},
});
const { startDrag } = useSidebarDrag();
const handleDragSidebar = (e: MouseEvent) => {
const { isSidebarMixed, extraWidth, width } = props;
const { isSidebarMixed, collapseWidth, extraWidth, width } = props;
const minLimit = isSidebarMixed ? width + collapseWidth : collapseWidth;
const maxLimit = isSidebarMixed ? width + 320 : 320;
const currentWidth = isSidebarMixed ? extraWidth : width;
startDrag(e, currentWidth, asideRef.value, dragBarRef.value);
startDrag(
e,
minLimit,
maxLimit,
currentWidth,
asideRef.value,
dragBarRef.value,
(newWidth) => {
emit('update:width', newWidth);
if (isSidebarMixed) {
extraCollapse.value = newWidth <= collapseWidth;
} else {
collapse.value = newWidth <= collapseWidth;
}
},
);
};
</script>