From 4e4ffc439cd2f035481a7f5cdc5b93b7e593d2ae Mon Sep 17 00:00:00 2001 From: dullathanol <327533967@qq.com> Date: Tue, 7 Apr 2026 11:41:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=20overflow=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BB=A5=E5=85=81=E8=AE=B8=E6=8B=96=E6=8B=BD?= =?UTF-8?q?=E8=B6=85=E5=87=BA=E5=8F=AF=E8=A7=86=E5=8C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/components/common-ui/vben-modal.md | 3 ++- packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts | 1 + packages/@core/ui-kit/popup-ui/src/modal/modal.ts | 5 +++++ packages/@core/ui-kit/popup-ui/src/modal/modal.vue | 2 ++ .../@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts | 7 +++++-- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/docs/src/components/common-ui/vben-modal.md b/docs/src/components/common-ui/vben-modal.md index 4d99f59f4..65c2912d4 100644 --- a/docs/src/components/common-ui/vben-modal.md +++ b/docs/src/components/common-ui/vben-modal.md @@ -34,7 +34,7 @@ Modal 内的内容一般业务中,会比较复杂,所以我们可以将 moda ## 开启拖拽 -通过 `draggable` 参数,可开启拖拽功能。 +通过 `draggable` 参数,可开启拖拽功能。若需要拖动范围超出可视区,可设置 `overflow: true`(需已开启 `draggable`)。 @@ -101,6 +101,7 @@ const [Modal, modalApi] = useVbenModal({ | fullscreen | 全屏显示 | `boolean` | `false` | | fullscreenButton | 显示全屏按钮 | `boolean` | `true` | | draggable | 可拖拽 | `boolean` | `false` | +| overflow | 拖动范围可以超出可视区 | `boolean` | `false` | | closable | 显示关闭按钮 | `boolean` | `true` | | centered | 居中显示 | `boolean` | `false` | | modal | 显示遮罩 | `boolean` | `true` | diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts index 650155871..9bfda4e90 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal-api.ts @@ -46,6 +46,7 @@ export class ModalApi { contentClass: '', destroyOnClose: true, draggable: false, + overflow: false, footer: true, footerClass: '', fullscreen: false, diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts index 4debaff4b..0ce29412b 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.ts @@ -110,6 +110,11 @@ export interface ModalProps { * 是否自动聚焦 */ openAutoFocus?: boolean; + /** + * 拖动范围是否可以超出可视区 + * @default false + */ + overflow?: boolean; /** * 弹窗遮罩模糊效果 */ diff --git a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue index a01871c65..1947b2254 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/modal.vue +++ b/packages/@core/ui-kit/popup-ui/src/modal/modal.vue @@ -81,6 +81,7 @@ const { description, destroyOnClose, draggable, + overflow, footer: showFooter, footerClass, fullscreen, @@ -122,6 +123,7 @@ const { dragging, transform } = useModalDraggable( shouldDraggable, getAppendTo, shouldCentered, + overflow, ); const firstOpened = ref(false); diff --git a/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts b/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts index 84910b744..a7bcba555 100644 --- a/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts +++ b/packages/@core/ui-kit/popup-ui/src/modal/use-modal-draggable.ts @@ -15,6 +15,7 @@ export function useModalDraggable( draggable: ComputedRef, containerSelector?: ComputedRef, centered?: ComputedRef, + overflow?: ComputedRef, ) { const transform = reactive({ offsetX: 0, @@ -67,8 +68,10 @@ export function useModalDraggable( let moveX = offsetX + e.clientX - downX; let moveY = offsetY + e.clientY - downY; - moveX = Math.min(Math.max(moveX, minLeft), maxLeft); - moveY = Math.min(Math.max(moveY, minTop), maxTop); + if (!overflow?.value) { + moveX = Math.min(Math.max(moveX, minLeft), maxLeft); + moveY = Math.min(Math.max(moveY, minTop), maxTop); + } transform.offsetX = moveX; transform.offsetY = moveY;