'use client'; import * as React from 'react'; import * as DialogPrimitive from '@radix-ui/react-dialog'; import { XIcon } from 'lucide-react'; import { cn } from '@/lib/utils'; function Dialog({ onOpenChange, open, ...props }: React.ComponentProps) { const handleOpenChange = React.useCallback( (isOpen: boolean) => { onOpenChange?.(isOpen); // 当对话框关闭时,确保清理 body 样式 if (!isOpen) { // 立即清理 document.body.style.removeProperty('pointer-events'); document.body.style.removeProperty('overflow'); // 延迟再次清理,确保覆盖 Radix 的设置 setTimeout(() => { document.body.style.removeProperty('pointer-events'); document.body.style.removeProperty('overflow'); }, 0); setTimeout(() => { document.body.style.removeProperty('pointer-events'); document.body.style.removeProperty('overflow'); }, 50); setTimeout(() => { document.body.style.removeProperty('pointer-events'); document.body.style.removeProperty('overflow'); }, 150); } }, [onOpenChange], ); // 使用 effect 监控 open 状态变化 React.useEffect(() => { if (open === false) { const cleanup = () => { document.body.style.removeProperty('pointer-events'); document.body.style.removeProperty('overflow'); }; cleanup(); const timer1 = setTimeout(cleanup, 0); const timer2 = setTimeout(cleanup, 50); const timer3 = setTimeout(cleanup, 150); const timer4 = setTimeout(cleanup, 300); return () => { clearTimeout(timer1); clearTimeout(timer2); clearTimeout(timer3); clearTimeout(timer4); }; } }, [open]); return ( ); } function DialogTrigger({ ...props }: React.ComponentProps) { return ; } function DialogPortal({ ...props }: React.ComponentProps) { return ; } function DialogClose({ ...props }: React.ComponentProps) { return ; } function DialogOverlay({ className, ...props }: React.ComponentProps) { return ( ); } function DialogContent({ className, children, ...props }: React.ComponentProps) { return ( {children} Close ); } function DialogHeader({ className, ...props }: React.ComponentProps<'div'>) { return (
); } function DialogFooter({ className, ...props }: React.ComponentProps<'div'>) { return (
); } function DialogTitle({ className, ...props }: React.ComponentProps) { return ( ); } function DialogDescription({ className, ...props }: React.ComponentProps) { return ( ); } export { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, };