修正GT未知类别舍弃模板传递

- GT Mask 导入请求改用与预览一致的 GT 模板 id,避免未激活模板时后端无法识别未知 maskid。

- 补充回归测试覆盖未显式激活模板但模板列表存在时,舍弃未知类别仍传入模板 id。
This commit is contained in:
2026-05-04 06:13:36 +08:00
parent 10fe17476d
commit f6ee9fa924
2 changed files with 14 additions and 2 deletions

View File

@@ -1729,7 +1729,18 @@ describe('VideoWorkspace', () => {
]); ]);
apiMock.importGtMask.mockResolvedValueOnce([]); apiMock.importGtMask.mockResolvedValueOnce([]);
apiMock.getProjectAnnotations.mockResolvedValueOnce([]).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(<VideoWorkspace />); render(<VideoWorkspace />);
await waitFor(() => expect(useStore.getState().frames).toHaveLength(1)); await waitFor(() => expect(useStore.getState().frames).toHaveLength(1));

View File

@@ -687,6 +687,7 @@ export function VideoWorkspace({ onNavigateToAI }: { onNavigateToAI?: () => void
const activeTemplateForGt = useMemo(() => ( const activeTemplateForGt = useMemo(() => (
templates.find((template) => String(template.id) === String(activeTemplateId)) || templates[0] || null templates.find((template) => String(template.id) === String(activeTemplateId)) || templates[0] || null
), [activeTemplateId, templates]); ), [activeTemplateId, templates]);
const gtImportTemplateId = activeTemplateForGt?.id ? String(activeTemplateForGt.id) : activeTemplateId;
const gtTemplateClasses = useMemo(() => ( const gtTemplateClasses = useMemo(() => (
normalizeClassMaskIds(activeTemplateForGt?.classes || []) normalizeClassMaskIds(activeTemplateForGt?.classes || [])
), [activeTemplateForGt?.classes]); ), [activeTemplateForGt?.classes]);
@@ -1485,7 +1486,7 @@ export function VideoWorkspace({ onNavigateToAI }: { onNavigateToAI?: () => void
setIsImportingGt(true); setIsImportingGt(true);
setStatusMessage('正在导入 GT Mask...'); setStatusMessage('正在导入 GT Mask...');
try { try {
const imported = await importGtMask(file, currentProject.id, currentFrame.id, activeTemplateId, { const imported = await importGtMask(file, currentProject.id, currentFrame.id, gtImportTemplateId, {
unknownColorPolicy, unknownColorPolicy,
}); });
await hydrateSavedAnnotations(currentProject.id, frames); await hydrateSavedAnnotations(currentProject.id, frames);