import { CloudUploadOutlined, FileImageOutlined, FolderOpenOutlined, FrownOutlined, LoadingOutlined, QuestionCircleOutlined, } from "@ant-design/icons"; import type { ChangeEvent, DragEvent, KeyboardEvent, RefObject } from "react"; import { toast } from "../../../components/toast/toastStore"; export interface WatermarkImageItem { src: string; name: string; format: string; } export type WatermarkStatus = "idle" | "processing" | "done" | "failed"; interface WatermarkToolPageProps { inputRef: RefObject; urlInputRef: RefObject; image: WatermarkImageItem | null; isDragging: boolean; status: WatermarkStatus; progress: number; resultUrl: string | null; onUpload: (event: ChangeEvent) => void; onDrop: (event: DragEvent) => void; onDraggingChange: (dragging: boolean) => void; onRemoveImage: () => void; onUrlImport: () => void; onGenerate: () => void; onDownload: () => void; onClose: () => void; } // 去水印工具页面:上传含水印图片 → AI 清理 → 预览/下载结果。 // 从 EcommercePage 的 watermarkPreview 抽出,状态与处理逻辑仍在父组件,本组件纯展示 + 回调。 export default function WatermarkToolPage({ inputRef, urlInputRef, image, isDragging, status, progress, resultUrl, onUpload, onDrop, onDraggingChange, onRemoveImage, onUrlImport, onGenerate, onDownload, onClose, }: WatermarkToolPageProps) { return (
{!image ? (
inputRef.current?.click()} onKeyDown={(event: KeyboardEvent) => { if (event.key === "Enter" || event.key === " ") { event.preventDefault(); inputRef.current?.click(); } }} onDragEnter={(event) => { event.preventDefault(); onDraggingChange(true); }} onDragOver={(event) => event.preventDefault()} onDragLeave={() => onDraggingChange(false)} onDrop={onDrop} > 点击或拖拽上传图片 支持 PNG / JPG / WebP,上传含水印图片后点击开始去水印
) : (
原图 原图
去水印结果 {status === "processing" ? (
正在去水印 AI 正在清理图片中的水印和文字
{Math.round(progress)}%
) : status === "done" && resultUrl ? ( <> 去水印结果 ) : status === "failed" ? (
去水印失败 请检查网络或重试,如余额不足请先充值
) : (
等待处理 点击开始去水印后显示结果
)}
)}
); }