diff --git a/frontend/src/pages/DataManagement/Create/CreateDataset.tsx b/frontend/src/pages/DataManagement/Create/CreateDataset.tsx index 356dac4..5479324 100644 --- a/frontend/src/pages/DataManagement/Create/CreateDataset.tsx +++ b/frontend/src/pages/DataManagement/Create/CreateDataset.tsx @@ -1,24 +1,37 @@ -import { useState } from "react"; +import { useEffect, useMemo, useState } from "react"; import { ArrowLeft } from "lucide-react"; import { Button, Form, App } from "antd"; -import { Link, useNavigate } from "react-router"; +import { Link, useLocation, useNavigate } from "react-router"; import { createDatasetUsingPost } from "../dataset.api"; import { DatasetType } from "../dataset.model"; import BasicInformation from "./components/BasicInformation"; export default function DatasetCreate() { const navigate = useNavigate(); + const location = useLocation(); const { message } = App.useApp(); const [form] = Form.useForm(); - const [newDataset, setNewDataset] = useState({ + const parentDatasetId = useMemo(() => { + const state = location.state as CreateDatasetLocationState | null; + return state?.parentDatasetId || ""; + }, [location.state]); + const [newDataset, setNewDataset] = useState(() => ({ name: "", description: "", datasetType: DatasetType.TEXT, tags: [], - parentDatasetId: "", - }); + parentDatasetId, + })); + + useEffect(() => { + if (!parentDatasetId) { + return; + } + setNewDataset((prev) => ({ ...prev, parentDatasetId })); + form.setFieldsValue({ parentDatasetId }); + }, [form, parentDatasetId]); const handleSubmit = async () => { const formValues = await form.validateFields(); @@ -39,7 +52,7 @@ export default function DatasetCreate() { }; const handleValuesChange = (_, allValues) => { - setNewDataset({ ...newDataset, ...allValues }); + setNewDataset((prev) => ({ ...prev, ...allValues })); }; return ( @@ -82,3 +95,7 @@ export default function DatasetCreate() { ); } + +interface CreateDatasetLocationState { + parentDatasetId?: string; +} diff --git a/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx b/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx index 4a45100..af9c00e 100644 --- a/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx +++ b/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx @@ -1,12 +1,13 @@ import { useEffect, useMemo, useState } from "react"; import { Breadcrumb, App, Tabs } from "antd"; import { - ReloadOutlined, - DownloadOutlined, - UploadOutlined, - EditOutlined, - DeleteOutlined, -} from "@ant-design/icons"; + ReloadOutlined, + DownloadOutlined, + UploadOutlined, + EditOutlined, + DeleteOutlined, + PlusOutlined, +} from "@ant-design/icons"; import DetailHeader from "@/components/DetailHeader"; import { mapDataset, datasetTypeMap } from "../dataset.const"; import type { Dataset } from "@/pages/DataManagement/dataset.model"; @@ -45,7 +46,7 @@ export default function DatasetDetail() { const [parentDataset, setParentDataset] = useState(null); const filesOperation = useFilesOperation(dataset); - const [showUploadDialog, setShowUploadDialog] = useState(false); + const [showUploadDialog, setShowUploadDialog] = useState(false); const navigateItems = useMemo(() => { const items = [ { @@ -66,6 +67,14 @@ export default function DatasetDetail() { }); return items; }, [dataset, parentDataset]); + const handleCreateChildDataset = () => { + if (!dataset?.id) { + return; + } + navigate("/data/management/create", { + state: { parentDatasetId: dataset.id }, + }); + }; const fetchDataset = async () => { if (!id) { return; @@ -158,12 +167,22 @@ export default function DatasetDetail() { ]; // 数据集操作列表 - const operations = [ - { - key: "edit", - label: "编辑", - icon: , - onClick: () => { + const operations = [ + ...(dataset?.id && !dataset.parentDatasetId + ? [ + { + key: "create-child", + label: "创建子数据集", + icon: , + onClick: handleCreateChildDataset, + }, + ] + : []), + { + key: "edit", + label: "编辑", + icon: , + onClick: () => { setShowEditDialog(true); }, },