修复布尔范围操作重复执行

- 重新开始区域合并或重叠区域去除时取消旧的顶栏按帧范围请求
- 防止先选择按帧范围、再处理当前帧后还能继续执行旧范围合并
- 补充 VideoWorkspace 回归测试覆盖旧范围请求被取消的路径
- 更新项目指南、设计冻结和测试计划中的互斥交互说明
This commit is contained in:
2026-05-04 01:04:13 +08:00
parent f42bf42989
commit 5603872821
6 changed files with 106 additions and 3 deletions

View File

@@ -1015,6 +1015,17 @@ export function VideoWorkspace({ onNavigateToAI }: { onNavigateToAI?: () => void
setStatusMessage(`请选择${booleanOperationLabel(request.operation)}帧范围,再点击“确认${booleanOperationLabel(request.operation)}`);
}, [frameNumberById]);
const clearPendingBooleanRangeSelection = useCallback(() => {
setPendingBooleanRangeRequest(null);
setPendingBooleanRangeConfirm(null);
if (rangeSelectionMode === 'boolean') {
setRangeSelectionMode(null);
setIsPropagationRangeSelecting(false);
setHasExplicitPropagationRange(false);
setStatusMessage('');
}
}, [rangeSelectionMode]);
const handleConfirmBooleanFrameRangeOperation = useCallback(() => {
if (!pendingBooleanRangeRequest || frames.length === 0) return;
const clampRangeFrameNumber = (value: number) => {
@@ -2114,6 +2125,7 @@ export function VideoWorkspace({ onNavigateToAI }: { onNavigateToAI?: () => void
totalFrames={totalFrames}
onRequestDeleteMasks={(maskIds) => void handleDeleteSelectedMasks(maskIds)}
onRequestBooleanFrameRange={handleBooleanFrameRangeRequest}
onBooleanOperationStart={clearPendingBooleanRangeSelection}
onDeleteMaskAnnotations={handleDeleteMaskAnnotations}
/>
</div>