import { useEffect } from "react"; import { createPortal } from "react-dom"; import { CloseOutlined, DeleteOutlined, DownloadOutlined } from "@ant-design/icons"; export interface ProductSetPreviewSelection { src: string; label: string; nodeId?: string; cardId?: string; removable?: boolean; } interface ProductSetPreviewModalProps { preview: ProductSetPreviewSelection | null; onClose: () => void; onDownload: (preview: ProductSetPreviewSelection) => void; onRemove: (preview: ProductSetPreviewSelection) => void; } // 商品套图大图预览弹窗。通过 portal 挂到 body,支持下载/移除。 export default function ProductSetPreviewModal({ preview, onClose, onDownload, onRemove }: ProductSetPreviewModalProps) { // Esc 关闭 useEffect(() => { if (!preview) return; const handleKey = (event: KeyboardEvent) => { if (event.key === "Escape") onClose(); }; window.addEventListener("keydown", handleKey); return () => window.removeEventListener("keydown", handleKey); }, [preview, onClose]); if (!preview || typeof document === "undefined") return null; return createPortal(