diff --git a/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx b/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx index 329f32a..292f393 100644 --- a/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx +++ b/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx @@ -1,14 +1,12 @@ import { queryDatasetsUsingGet } from "@/pages/DataManagement/dataset.api"; -import { - datasetTypeMap, - mapDataset, -} from "@/pages/DataManagement/dataset.const"; -import { Button, Form, Input, Modal, Select } from "antd"; +import { mapDataset } from "@/pages/DataManagement/dataset.const"; +import { Button, Form, Input, Modal, Select, message } from "antd"; import TextArea from "antd/es/input/TextArea"; -import { Database } from "lucide-react"; import { useEffect, useState } from "react"; import { createAnnotationTaskUsingPost } from "../../annotation.api"; import { Dataset } from "@/pages/DataManagement/dataset.model"; +import LabelingConfigEditor from "./LabelingConfigEditor"; +import { useRef } from "react"; export default function CreateAnnotationTask({ open, @@ -21,6 +19,10 @@ export default function CreateAnnotationTask({ }) { const [form] = Form.useForm(); const [datasets, setDatasets] = useState([]); + const [submitting, setSubmitting] = useState(false); + const [nameManuallyEdited, setNameManuallyEdited] = useState(false); + const editorRef = useRef(null); + const EDITOR_LIST_HEIGHT = 420; useEffect(() => { if (!open) return; @@ -34,11 +36,36 @@ export default function CreateAnnotationTask({ fetchDatasets(); }, [open]); + // Reset form and manual-edit flag when modal opens + useEffect(() => { + if (open) { + form.resetFields(); + setNameManuallyEdited(false); + } + }, [open, form]); + const handleSubmit = async () => { - const values = await form.validateFields(); - await createAnnotationTaskUsingPost(values); - onClose(); - onRefresh(); + try { + const values = await form.validateFields(); + setSubmitting(true); + await createAnnotationTaskUsingPost(values); + message?.success?.("创建标注任务成功"); + onClose(); + onRefresh(); + } catch (err: any) { + console.error("Create annotation task failed", err); + const msg = err?.message || err?.data?.message || "创建失败,请稍后重试"; + // show a user friendly message + (message as any)?.error?.(msg); + } finally { + setSubmitting(false); + } + }; + + // Placeholder function: generates labeling interface from config + // For now it simply returns the parsed config (per requirement) + const generateLabelingInterface = (config: any) => { + return config; }; return ( @@ -48,51 +75,124 @@ export default function CreateAnnotationTask({ title="创建标注任务" footer={ <> - - + } + width={1200} > -
- - - - -