diff --git a/frontend/src/components/TagManagement.tsx b/frontend/src/components/TagManagement.tsx index 82a8bf9..7a0795a 100644 --- a/frontend/src/components/TagManagement.tsx +++ b/frontend/src/components/TagManagement.tsx @@ -92,17 +92,6 @@ function CustomTag({ ); } -export const mockPreparedTags = [ - { id: "1", name: "重要" }, - { id: "2", name: "待处理" }, - { id: "3", name: "已完成" }, - { id: "4", name: "审核中" }, - { id: "5", name: "高优先级" }, - { id: "6", name: "低优先级" }, - { id: "7", name: "客户A" }, - { id: "8", name: "客户B" }, -]; - const TagManager: React.FC = ({ onFetch, onCreate, @@ -112,7 +101,7 @@ const TagManager: React.FC = ({ onFetch: () => Promise; onCreate: (tag: Pick) => Promise<{ ok: boolean }>; onDelete: (tagId: number) => Promise<{ ok: boolean }>; - onUpdate: (oldTagId: number, newTag: string) => Promise<{ ok: boolean }>; + onUpdate: (tag: TagItem) => Promise<{ ok: boolean }>; }) => { const [showTagManager, setShowTagManager] = useState(false); const { message } = App.useApp(); @@ -121,9 +110,6 @@ const TagManager: React.FC = ({ const [editingTag, setEditingTag] = useState(null); const [editingTagValue, setEditingTagValue] = useState(""); - // 预置标签 - const [preparedTags, setPreparedTags] = useState(mockPreparedTags); - // 获取标签列表 const fetchTags = async () => { if (!onFetch) return; @@ -161,7 +147,7 @@ const TagManager: React.FC = ({ const updateTag = async (oldTag: TagItem, newTag: string) => { try { - await onUpdate?.(oldTag.id, { ...oldTag, name: newTag }); + await onUpdate?.({ ...oldTag, name: newTag }); fetchTags(); message.success("标签更新成功"); } catch (error) { @@ -213,55 +199,48 @@ const TagManager: React.FC = ({ title="标签管理" width={500} > -
+
{/* Add New Tag */} -
-
- setNewTag(e.target.value)} - onKeyPress={(e) => { - if (e.key === "Enter") { - addTag(e.target.value); - } - }} - /> - +
+ setNewTag(e.target.value)} + onKeyPress={(e) => { + if (e.key === "Enter") { + addTag(e.target.value); + } + }} + /> + +
+ +
+
+ {tags.map((tag) => ( + + ))}
- -

预置标签

-
- {preparedTags.length > 0 && - preparedTags.map((tag) => )} -
- -

自定义标签

-
- {tags.map((tag) => ( - - ))} -
diff --git a/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx b/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx index 9969849..329f32a 100644 --- a/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx +++ b/frontend/src/pages/DataAnnotation/Create/components/CreateAnnptationTaskDialog.tsx @@ -1,5 +1,8 @@ import { queryDatasetsUsingGet } from "@/pages/DataManagement/dataset.api"; -import { datasetTypeMap } from "@/pages/DataManagement/dataset.const"; +import { + datasetTypeMap, + mapDataset, +} from "@/pages/DataManagement/dataset.const"; import { Button, Form, Input, Modal, Select } from "antd"; import TextArea from "antd/es/input/TextArea"; import { Database } from "lucide-react"; @@ -26,7 +29,7 @@ export default function CreateAnnotationTask({ page: 0, size: 1000, }); - setDatasets(data.content || []); + setDatasets(data.content.map(mapDataset) || []); }; fetchDatasets(); }, [open]); @@ -74,22 +77,20 @@ export default function CreateAnnotationTask({ > ({ - label: ( -
-
- - {dataset.icon || } - - {dataset.name} + options={datasets.map((dataset) => { + return { + label: ( +
+
+ {dataset.icon} + {dataset.name} +
+
{dataset.size}
-
- {datasetTypeMap[dataset?.datasetType]?.label} -
-
- ), - value: dataset.id, - }))} + ), + value: dataset.id, + }; + })} /> diff --git a/frontend/src/pages/DataManagement/Create/components/BasicInformation.tsx b/frontend/src/pages/DataManagement/Create/components/BasicInformation.tsx index 42703b5..ae56fb0 100644 --- a/frontend/src/pages/DataManagement/Create/components/BasicInformation.tsx +++ b/frontend/src/pages/DataManagement/Create/components/BasicInformation.tsx @@ -2,7 +2,6 @@ import RadioCard from "@/components/RadioCard"; import { Input, Select, Form } from "antd"; import { datasetTypes } from "../../dataset.const"; import { useEffect, useState } from "react"; -import { mockPreparedTags } from "@/components/TagManagement"; import { queryDatasetTagsUsingGet } from "../../dataset.api"; export default function BasicInformation({ @@ -26,26 +25,11 @@ export default function BasicInformation({ const fetchTags = async () => { try { const { data } = await queryDatasetTagsUsingGet(); - const preparedTags = mockPreparedTags.map((tag) => ({ - label: tag.name, - value: tag.name, - })); const customTags = data.map((tag) => ({ label: tag.name, value: tag.name, })); - setTagOptions([ - { - label: 预置标签, - title: "prepared", - options: preparedTags, - }, - { - label: 自定义标签, - title: "custom", - options: customTags, - }, - ]); + setTagOptions(customTags); } catch (error) { console.error("Error fetching tags: ", error); } diff --git a/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx b/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx index fc73ebe..15b020e 100644 --- a/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx +++ b/frontend/src/pages/DataManagement/Detail/DatasetDetail.tsx @@ -121,7 +121,7 @@ export default function DatasetDetail() { { icon: , key: "time", - value: dataset?.createdAt, + value: dataset?.updatedAt, }, ]; diff --git a/frontend/src/pages/DataManagement/Home/DataManagement.tsx b/frontend/src/pages/DataManagement/Home/DataManagement.tsx index 5026c1c..a5a66fa 100644 --- a/frontend/src/pages/DataManagement/Home/DataManagement.tsx +++ b/frontend/src/pages/DataManagement/Home/DataManagement.tsx @@ -20,8 +20,8 @@ import { deleteDatasetByIdUsingDelete, createDatasetTagUsingPost, queryDatasetTagsUsingGet, - updateDatasetTagByIdUsingPut, - deleteDatasetTagByIdUsingDelete, + deleteDatasetTagUsingDelete, + updateDatasetTagUsingPut, } from "../dataset.api"; import { formatBytes } from "@/utils/unit"; import EditDataset from "../Create/EditDataset"; @@ -295,8 +295,8 @@ export default function DatasetManagementPage() { {/* tasks */} deleteDatasetTagUsingDelete({ ids })} + onUpdate={updateDatasetTagUsingPut} onFetch={queryDatasetTagsUsingGet} /> diff --git a/frontend/src/pages/DataManagement/dataset.api.ts b/frontend/src/pages/DataManagement/dataset.api.ts index 947d26a..c800b82 100644 --- a/frontend/src/pages/DataManagement/dataset.api.ts +++ b/frontend/src/pages/DataManagement/dataset.api.ts @@ -97,13 +97,13 @@ export function createDatasetTagUsingPost(data: any) { } // 更新数据集标签 -export function updateDatasetTagByIdUsingPut(id: string | number, data: any) { - return put(`/api/data-management/tags/${id}`, data); +export function updateDatasetTagUsingPut(data: any) { + return put(`/api/data-management/tags`, data); } // 删除数据集标签 -export function deleteDatasetTagByIdUsingDelete(id: string | number) { - return del(`/api/data-management/tags/${id}`); +export function deleteDatasetTagUsingDelete(data: any) { + return del(`/api/data-management/tags`, data); } // 数据集质量检查 diff --git a/frontend/src/pages/DataManagement/dataset.const.tsx b/frontend/src/pages/DataManagement/dataset.const.tsx index 6cfb8c4..ecee1cc 100644 --- a/frontend/src/pages/DataManagement/dataset.const.tsx +++ b/frontend/src/pages/DataManagement/dataset.const.tsx @@ -23,6 +23,8 @@ import { Music, Videotape, Database, + Image, + ScanText, } from "lucide-react"; export const datasetTypeMap: Record< @@ -41,8 +43,8 @@ export const datasetTypeMap: Record< value: DatasetType.TEXT, label: "文本", order: 1, - icon: FileText, - iconColor: "#3b82f6", + icon: ScanText, + iconColor: "blue", children: [ DatasetSubType.TEXT_DOCUMENT, DatasetSubType.TEXT_WEB, @@ -54,8 +56,8 @@ export const datasetTypeMap: Record< value: DatasetType.IMAGE, label: "图像", order: 2, - icon: FileImage, - iconColor: "#3b82f6", + icon: Image, + iconColor: "green", children: [DatasetSubType.IMAGE_IMAGE, DatasetSubType.IMAGE_CAPTION], description: "用于处理和分析图像数据的数据集", }, @@ -64,7 +66,7 @@ export const datasetTypeMap: Record< label: "音频", order: 3, icon: Music, - iconColor: "#3b82f6", + iconColor: "orange", children: [DatasetSubType.AUDIO_AUDIO, DatasetSubType.AUDIO_JSONL], description: "用于处理和分析音频数据的数据集", }, @@ -73,7 +75,7 @@ export const datasetTypeMap: Record< label: "视频", order: 3, icon: Video, - iconColor: "#3b82f6", + iconColor: "purple", children: [DatasetSubType.VIDEO_VIDEO, DatasetSubType.VIDEO_JSONL], description: "用于处理和分析视频数据的数据集", }, @@ -193,14 +195,22 @@ export const dataSourceMap: Record = { export const dataSourceOptions = Object.values(dataSourceMap); export function mapDataset(dataset: Dataset) { - const IconComponent = datasetTypeMap[dataset?.datasetType]?.icon || null; + const { icon: IconComponent, iconColor } = + datasetTypeMap[dataset?.datasetType] || {}; return { ...dataset, type: datasetTypeMap[dataset.datasetType]?.label || "未知", size: formatBytes(dataset.totalSize || 0), createdAt: formatDateTime(dataset.createdAt) || "--", updatedAt: formatDateTime(dataset?.updatedAt) || "--", - icon: IconComponent ? : , + icon: IconComponent ? ( + + ) : ( + + ), status: datasetStatusMap[dataset.status], statistics: [ { label: "文件数", value: dataset.fileCount || 0 }, diff --git a/frontend/src/pages/Layout/Sidebar.tsx b/frontend/src/pages/Layout/Sidebar.tsx index fb3c085..a63a6ed 100644 --- a/frontend/src/pages/Layout/Sidebar.tsx +++ b/frontend/src/pages/Layout/Sidebar.tsx @@ -1,4 +1,4 @@ -import React, { memo, useEffect, useState } from "react"; +import { memo, useEffect, useState } from "react"; import { Button, Menu, Popover } from "antd"; import { CloseOutlined, @@ -105,7 +105,6 @@ const AsiderAndHeaderLayout = () => { defaultOpenKeys={["synthesis"]} onClick={({ key }) => { setActiveItem(key); - console.log(`/data/${key}`); navigate(`/data/${key}`); }} /> @@ -169,10 +168,7 @@ const AsiderAndHeaderLayout = () => {
{ - console.log("clicked outside"); - setTaskCenterVisible(false); - toggleShowTaskPopover(false); }} /> )}