import { Select, Input, Form, Radio, Modal, Button, UploadFile } from "antd"; import { InboxOutlined } from "@ant-design/icons"; import { dataSourceOptions } from "../../dataset.const"; import { Dataset, DataSource } from "../../dataset.model"; import { useEffect, useMemo, useState } from "react"; import { queryTasksUsingGet } from "@/pages/DataCollection/collection.apis"; import { updateDatasetByIdUsingPut } from "../../dataset.api"; import { sliceFile } from "@/utils/file.util"; import Dragger from "antd/es/upload/Dragger"; export default function ImportConfiguration({ data, open, onClose, updateEvent = "update:dataset", }: { data: Dataset | null; open: boolean; onClose: () => void; updateEvent?: string; }) { const [form] = Form.useForm(); const [collectionOptions, setCollectionOptions] = useState([]); const [importConfig, setImportConfig] = useState({ source: DataSource.UPLOAD, }); const [fileList, setFileList] = useState([]); const fileSliceList = useMemo(() => { const sliceList = fileList.map((file) => { const slices = sliceFile(file); return { originFile: file, slices, name: file.name, size: file.size }; }); return sliceList; }, [fileList]); // 本地上传文件相关逻辑 const resetFiles = () => { setFileList([]); }; const handleUpload = async (dataset: Dataset) => { const formData = new FormData(); fileList.forEach((file) => { formData.append("file", file); }); window.dispatchEvent( new CustomEvent("upload:dataset", { detail: { dataset, files: fileSliceList, updateEvent, }, }) ); resetFiles(); }; const handleBeforeUpload = (_, files: UploadFile[]) => { setFileList([...fileList, ...files]); return false; }; const handleRemoveFile = (file: UploadFile) => { setFileList((prev) => prev.filter((f) => f.uid !== file.uid)); }; const fetchCollectionTasks = async () => { if (importConfig.source !== DataSource.COLLECTION) return; try { const res = await queryTasksUsingGet({ page: 0, size: 100 }); const options = res.data.content.map((task: any) => ({ label: task.name, value: task.id, })); setCollectionOptions(options); } catch (error) { console.error("Error fetching collection tasks:", error); } }; const resetState = () => { form.resetFields(); setFileList([]); form.setFieldsValue({ files: null }); setImportConfig({ source: importConfig.source ? importConfig.source : DataSource.UPLOAD }); }; const handleImportData = async () => { if (!data) return; if (importConfig.source === DataSource.UPLOAD) { await handleUpload(data); } else if (importConfig.source === DataSource.COLLECTION) { await updateDatasetByIdUsingPut(data.id, { ...importConfig, }); } onClose(); }; useEffect(() => { if (open) { resetState(); fetchCollectionTasks(); } }, [open, importConfig.source]); return ( { onClose(); resetState(); }} maskClosable={false} footer={ <> } >
setImportConfig(allValues)} > {importConfig?.source === DataSource.COLLECTION && ( )} {/* Local Upload Component */} {importConfig?.source === DataSource.UPLOAD && (

本地文件上传

拖拽文件到此处或点击选择文件

)} {/* Target Configuration */} {importConfig?.target && importConfig?.target !== DataSource.UPLOAD && (
{importConfig?.target === DataSource.DATABASE && (
)}
)}
); }