This commit is contained in:
dap
2026-04-16 19:56:08 +08:00
74 changed files with 3040 additions and 267 deletions

View File

@@ -79,7 +79,7 @@ export interface DrawerProps {
*/
headerClass?: ClassType;
/**
* 弹窗是否显示
* 抽屉加载状态
* @default false
*/
loading?: boolean;

View File

@@ -46,6 +46,7 @@ export class ModalApi {
contentClass: '',
destroyOnClose: true,
draggable: false,
overflow: false,
footer: true,
footerClass: '',
fullscreen: false,

View File

@@ -97,7 +97,7 @@ export interface ModalProps {
header?: boolean;
headerClass?: ClassType;
/**
* 弹窗是否显示
* 弹窗加载状态
* @default false
*/
loading?: boolean;
@@ -110,6 +110,11 @@ export interface ModalProps {
* 是否自动聚焦
*/
openAutoFocus?: boolean;
/**
* 拖动范围是否可以超出可视区
* @default false
*/
overflow?: boolean;
/**
* 弹窗遮罩模糊效果
*/

View File

@@ -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);
@@ -246,7 +248,8 @@ function handleClosed() {
{
'border border-border': bordered,
'shadow-3xl': !bordered,
'top-0 left-0 size-full max-h-full translate-0!': shouldFullscreen,
'top-0 left-0 size-full max-h-full transform-[translate(0,0)]!':
shouldFullscreen,
'top-1/2': centered && !shouldFullscreen,
'duration-300': !dragging,
hidden: isClosed,

View File

@@ -15,6 +15,7 @@ export function useModalDraggable(
draggable: ComputedRef<boolean>,
containerSelector?: ComputedRef<string | undefined>,
centered?: ComputedRef<boolean>,
overflow?: ComputedRef<boolean>,
) {
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;