diff --git a/frontend/src/components/CardView.tsx b/frontend/src/components/CardView.tsx index f230280..92363dd 100644 --- a/frontend/src/components/CardView.tsx +++ b/frontend/src/components/CardView.tsx @@ -168,12 +168,12 @@ function CardView(props: CardViewProps) { const ops = (item) => typeof operations === "function" ? operations(item) : operations; return ( -
-
+
+
{data.map((item) => (
{/* Header */} diff --git a/frontend/src/components/DetailHeader.tsx b/frontend/src/components/DetailHeader.tsx index dc14b63..b3c910e 100644 --- a/frontend/src/components/DetailHeader.tsx +++ b/frontend/src/components/DetailHeader.tsx @@ -48,7 +48,7 @@ function DetailHeader({
{ +const DevelopmentInProgress = ({ showHome = true, showTime = "" }) => { return (
🚧

功能开发中

-

- 为了给您带来更好的体验,我们计划2025.10.30 - 开放此功能 -

+ {showTime && ( +

+ 为了给您带来更好的体验,我们计划{showTime} + 开放此功能 +

+ )} {showHome && ( +
+ 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/components/TaskPopover.tsx b/frontend/src/components/TaskPopover.tsx index 768c796..2a0e746 100644 --- a/frontend/src/components/TaskPopover.tsx +++ b/frontend/src/components/TaskPopover.tsx @@ -89,7 +89,7 @@ export default function TaskPopover() { {tasks.map((task) => (
diff --git a/frontend/src/index.css b/frontend/src/index.css index 5b2646d..e5fca1b 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -42,4 +42,28 @@ opacity: 100%; visibility: visible; transform: translateX(0); -} \ No newline at end of file +} + +@layer components { + .flex-center { + @apply flex items-center justify-center; + } + .flex-overflow-auto { + @apply flex-1 flex flex-col overflow-auto h-full; + } + .flex-overflow-hidden { + @apply flex flex-col h-full overflow-hidden; + } + .border-card { + @apply border border-[#f0f0f0] rounded-lg bg-white; + } + .border { + @apply border border-gray-100; + } + .border-bottom { + @apply border-b border-gray-100; + } + .border-top { + @apply border-t border-gray-100; + } +} diff --git a/frontend/src/pages/DataAnnotation/Annotate/components/ImageAnnotation.tsx b/frontend/src/pages/DataAnnotation/Annotate/components/ImageAnnotation.tsx index 0e9090e..8d95e2b 100644 --- a/frontend/src/pages/DataAnnotation/Annotate/components/ImageAnnotation.tsx +++ b/frontend/src/pages/DataAnnotation/Annotate/components/ImageAnnotation.tsx @@ -429,7 +429,7 @@ export default function ImageAnnotationWorkspace({ }`} onClick={() => setSelectedImageIndex(index)} > -
+
{index + 1}
-
+
+
{/* Header */}
@@ -134,7 +134,7 @@ export default function AnnotationTaskCreate() {

创建标注任务

-
+
({ - 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/DataCleansing/Create/components/OperatorOrchestration.tsx b/frontend/src/pages/DataCleansing/Create/components/OperatorOrchestration.tsx index 6bae1b8..eaea432 100644 --- a/frontend/src/pages/DataCleansing/Create/components/OperatorOrchestration.tsx +++ b/frontend/src/pages/DataCleansing/Create/components/OperatorOrchestration.tsx @@ -105,7 +105,7 @@ const OperatorFlow: React.FC = ({
{/* 编排区域 */}
e.preventDefault()} onDragLeave={handleContainerDragLeave} onDrop={handleDropToContainer} diff --git a/frontend/src/pages/DataCleansing/Home/components/ProcessFlowDiagram.tsx b/frontend/src/pages/DataCleansing/Home/components/ProcessFlowDiagram.tsx index 426012c..c307057 100644 --- a/frontend/src/pages/DataCleansing/Home/components/ProcessFlowDiagram.tsx +++ b/frontend/src/pages/DataCleansing/Home/components/ProcessFlowDiagram.tsx @@ -56,7 +56,7 @@ export default function ProcessFlowDiagram() { ]; return ( -
+
{flowSteps.map((step, index) => { diff --git a/frontend/src/pages/DataCleansing/cleansing.model.ts b/frontend/src/pages/DataCleansing/cleansing.model.ts index c8fa829..58cdce0 100644 --- a/frontend/src/pages/DataCleansing/cleansing.model.ts +++ b/frontend/src/pages/DataCleansing/cleansing.model.ts @@ -16,7 +16,11 @@ export interface CleansingTask { color: string; }; startedAt: string; - progress: number; + progress: { + finishedFileNum: number; + process: 100, + totalFileNum: number; + }; operators: OperatorI[]; createdAt: string; updatedAt: string; diff --git a/frontend/src/pages/DataCollection/Create/CreateTask.tsx b/frontend/src/pages/DataCollection/Create/CreateTask.tsx index 0b6c357..2a1135b 100644 --- a/frontend/src/pages/DataCollection/Create/CreateTask.tsx +++ b/frontend/src/pages/DataCollection/Create/CreateTask.tsx @@ -59,7 +59,7 @@ const defaultTemplates = [ ]; export default function CollectionTaskCreate() { - return ; + return ; const navigate = useNavigate(); const [form] = Form.useForm(); diff --git a/frontend/src/pages/DataCollection/Home/DataCollection.tsx b/frontend/src/pages/DataCollection/Home/DataCollection.tsx index 88dbe3f..8cdd66a 100644 --- a/frontend/src/pages/DataCollection/Home/DataCollection.tsx +++ b/frontend/src/pages/DataCollection/Home/DataCollection.tsx @@ -10,7 +10,7 @@ export default function DataCollection() { const navigate = useNavigate(); const [activeTab, setActiveTab] = useState("task-management"); - return ; + return ; return (
diff --git a/frontend/src/pages/DataEvaluation/Home/DataEvaluation.tsx b/frontend/src/pages/DataEvaluation/Home/DataEvaluation.tsx index 87e09b1..d589b37 100644 --- a/frontend/src/pages/DataEvaluation/Home/DataEvaluation.tsx +++ b/frontend/src/pages/DataEvaluation/Home/DataEvaluation.tsx @@ -180,9 +180,7 @@ export default function DataEvaluationPage() { setTasks(tasks.filter((task) => task.id !== taskId)); }; - return ( - - ); + return ; // 主列表界面 return (
diff --git a/frontend/src/pages/DataManagement/Create/CreateDataset.tsx b/frontend/src/pages/DataManagement/Create/CreateDataset.tsx index 610404a..4042630 100644 --- a/frontend/src/pages/DataManagement/Create/CreateDataset.tsx +++ b/frontend/src/pages/DataManagement/Create/CreateDataset.tsx @@ -56,7 +56,7 @@ export default function DatasetCreate() {
{/* form */} -
+
-
+
- 筛选器 +

筛选器

{hasActiveFilters && ( { - const iconMap = { - preprocessing: Code, - training: Brain, - inference: Cpu, - postprocessing: Package, - }; - const IconComponent = iconMap[type as keyof typeof iconMap] || Code; - return ; - }; return ( ( diff --git a/frontend/src/pages/RatioTask/CreateRatioTask.tsx b/frontend/src/pages/RatioTask/CreateRatioTask.tsx index fe9a13b..4353e95 100644 --- a/frontend/src/pages/RatioTask/CreateRatioTask.tsx +++ b/frontend/src/pages/RatioTask/CreateRatioTask.tsx @@ -31,8 +31,8 @@ const { TextArea } = Input; const { Option } = Select; export default function CreateRatioTask() { - return ; - + return ; + const navigate = useNavigate(); const [form] = Form.useForm(); // 配比任务相关状态 diff --git a/frontend/src/pages/RatioTask/RatioTask.tsx b/frontend/src/pages/RatioTask/RatioTask.tsx index 03a9e8f..c5e1231 100644 --- a/frontend/src/pages/RatioTask/RatioTask.tsx +++ b/frontend/src/pages/RatioTask/RatioTask.tsx @@ -28,7 +28,7 @@ import { SearchControls } from "@/components/SearchControls"; import DevelopmentInProgress from "@/components/DevelopmentInProgress"; export default function RatioTasksPage() { - return ; + return ; const navigate = useNavigate(); const [searchQuery, setSearchQuery] = useState(""); const [filterStatus, setFilterStatus] = useState("all"); diff --git a/frontend/src/pages/SynthesisTask/CreateTask.tsx b/frontend/src/pages/SynthesisTask/CreateTask.tsx index e243468..6eaf791 100644 --- a/frontend/src/pages/SynthesisTask/CreateTask.tsx +++ b/frontend/src/pages/SynthesisTask/CreateTask.tsx @@ -41,7 +41,7 @@ import DevelopmentInProgress from "@/components/DevelopmentInProgress"; const { TextArea } = Input; export default function SynthesisTaskCreate() { - return ; + return ; const navigate = useNavigate(); const [form] = Form.useForm(); const [searchQuery, setSearchQuery] = useState(""); diff --git a/frontend/src/pages/SynthesisTask/CreateTemplate.tsx b/frontend/src/pages/SynthesisTask/CreateTemplate.tsx index e80379f..f196a23 100644 --- a/frontend/src/pages/SynthesisTask/CreateTemplate.tsx +++ b/frontend/src/pages/SynthesisTask/CreateTemplate.tsx @@ -1,15 +1,15 @@ import { useState, useRef } from "react"; -import { Card, Select, Input, Button, Badge, Divider, Form, message } from "antd"; import { - Plus, - ArrowLeft, - Play, - Save, - RefreshCw, - FileText, - Code, - X, -} from "lucide-react"; + Card, + Select, + Input, + Button, + Badge, + Divider, + Form, + message, +} from "antd"; +import { Plus, ArrowLeft, Play, Save, RefreshCw, Code, X } from "lucide-react"; import { useNavigate } from "react-router"; import { mockTemplates } from "@/mock/annotation"; import DevelopmentInProgress from "@/components/DevelopmentInProgress"; @@ -17,9 +17,11 @@ import DevelopmentInProgress from "@/components/DevelopmentInProgress"; const { TextArea } = Input; export default function InstructionTemplateCreate() { - return ; + return ; const navigate = useNavigate(); - const [selectedTemplate, setSelectedTemplate] = useState