diff --git a/src/components/VideoWorkspace.test.tsx b/src/components/VideoWorkspace.test.tsx index bbf05aa..5214378 100644 --- a/src/components/VideoWorkspace.test.tsx +++ b/src/components/VideoWorkspace.test.tsx @@ -1729,7 +1729,18 @@ describe('VideoWorkspace', () => { ]); apiMock.importGtMask.mockResolvedValueOnce([]); apiMock.getProjectAnnotations.mockResolvedValueOnce([]).mockResolvedValueOnce([]); - useStore.setState({ activeTemplateId: '2' }); + useStore.setState({ + activeTemplateId: null, + templates: [{ + id: '2', + name: '当前模板', + classes: [ + { id: 'known', name: '已定义', color: '#ff0000', zIndex: 10, maskId: 1 }, + { id: 'reserved-unclassified', name: '待分类', color: '#000000', zIndex: 0, maskId: 0 }, + ], + rules: [], + }], + }); render(); await waitFor(() => expect(useStore.getState().frames).toHaveLength(1)); diff --git a/src/components/VideoWorkspace.tsx b/src/components/VideoWorkspace.tsx index 886afe7..077e8fd 100644 --- a/src/components/VideoWorkspace.tsx +++ b/src/components/VideoWorkspace.tsx @@ -687,6 +687,7 @@ export function VideoWorkspace({ onNavigateToAI }: { onNavigateToAI?: () => void const activeTemplateForGt = useMemo(() => ( templates.find((template) => String(template.id) === String(activeTemplateId)) || templates[0] || null ), [activeTemplateId, templates]); + const gtImportTemplateId = activeTemplateForGt?.id ? String(activeTemplateForGt.id) : activeTemplateId; const gtTemplateClasses = useMemo(() => ( normalizeClassMaskIds(activeTemplateForGt?.classes || []) ), [activeTemplateForGt?.classes]); @@ -1485,7 +1486,7 @@ export function VideoWorkspace({ onNavigateToAI }: { onNavigateToAI?: () => void setIsImportingGt(true); setStatusMessage('正在导入 GT Mask...'); try { - const imported = await importGtMask(file, currentProject.id, currentFrame.id, activeTemplateId, { + const imported = await importGtMask(file, currentProject.id, currentFrame.id, gtImportTemplateId, { unknownColorPolicy, }); await hydrateSavedAnnotations(currentProject.id, frames);