diff --git a/frontend/src/pages/DataAnnotation/Annotate/LabelStudioTextEditor.tsx b/frontend/src/pages/DataAnnotation/Annotate/LabelStudioTextEditor.tsx index fe28229..36224c9 100644 --- a/frontend/src/pages/DataAnnotation/Annotate/LabelStudioTextEditor.tsx +++ b/frontend/src/pages/DataAnnotation/Annotate/LabelStudioTextEditor.tsx @@ -192,6 +192,7 @@ const stableStringify = (value: unknown) => { const buildAnnotationSnapshot = (annotation?: Record) => { if (!annotation) return ""; + if (isAnnotationResultEmpty(annotation)) return ""; const cleaned: Record = { ...annotation }; delete cleaned.updated_at; delete cleaned.updatedAt; @@ -717,11 +718,13 @@ export default function LabelStudioTextEditor() { const annotationRecord = annotation as Record; const currentTask = tasks.find((item) => item.fileId === String(fileId)); const currentStatus = currentTask?.annotationStatus; - const hasExistingAnnotation = !!currentTask?.hasAnnotation; let resolvedStatus: AnnotationResultStatus; if (isAnnotationResultEmpty(annotationRecord)) { - if (currentStatus === AnnotationResultStatus.ANNOTATED || (hasExistingAnnotation && !currentStatus)) { - resolvedStatus = AnnotationResultStatus.ANNOTATED; + if ( + currentStatus === AnnotationResultStatus.NO_ANNOTATION || + currentStatus === AnnotationResultStatus.NOT_APPLICABLE + ) { + resolvedStatus = currentStatus; } else { const selectedStatus = await confirmEmptyAnnotationStatus(); if (!selectedStatus) return false; @@ -1033,6 +1036,15 @@ export default function LabelStudioTextEditor() { [segmentTreeData] ); + const inProgressSegmentedCount = useMemo(() => { + if (tasks.length === 0) return 0; + return tasks.reduce((count, item) => { + const summary = resolveSegmentSummary(item); + if (!summary) return count; + return summary.done < summary.total ? count + 1 : count; + }, 0); + }, [tasks]); + const handleSegmentSelect = useCallback((keys: Array) => { const [first] = keys; if (first === undefined || first === null) return; @@ -1214,8 +1226,13 @@ export default function LabelStudioTextEditor() { className="border-r border-gray-200 bg-gray-50 flex flex-col transition-all duration-200 min-h-0" style={{ width: sidebarCollapsed ? 0 : 240, overflow: "hidden" }} > -
- 文件列表 +
+ 文件列表 + {segmented && ( + + 标注中 {inProgressSegmentedCount} + + )}