From de142d0be744e909900253d9895172aca14d8c4f Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 25 Mar 2026 17:54:32 +0800 Subject: [PATCH] fix: preserve ai detail placeholder cards --- .../agents/AgentGenerationWorkspaceDarkV2.tsx | 63 ++++++++++++++++--- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/components/agents/AgentGenerationWorkspaceDarkV2.tsx b/components/agents/AgentGenerationWorkspaceDarkV2.tsx index d0a97d0d2..4ad849ec0 100644 --- a/components/agents/AgentGenerationWorkspaceDarkV2.tsx +++ b/components/agents/AgentGenerationWorkspaceDarkV2.tsx @@ -1874,13 +1874,41 @@ export function AgentGenerationWorkspaceDarkV2({ ).length, [skuResultCards] ); + const detailGenerationExpectedCount = useMemo(() => { + if ( + pendingGeneration?.modeType === "detail_generation" && + Number.isFinite(pendingGeneration.expectedCount) && + pendingGeneration.expectedCount > 0 + ) { + return pendingGeneration.expectedCount; + } + + const progressTotal = Number(detailGenerationProgress.total || 0); + if (progressTotal > 1) { + return Math.max( + detailGenerationRunResults.length, + Math.round((progressTotal - 1) / 2) + ); + } + + return detailGenerationRunResults.length; + }, [ + detailGenerationProgress.total, + detailGenerationRunResults.length, + pendingGeneration?.expectedCount, + pendingGeneration?.modeType, + ]); + const hasDetailGenerationPlaceholderState = + currentResultModeType === "detail_generation" && + detailGenerationExpectedCount > detailGenerationRunResults.length && + (pendingGeneration?.modeType === "detail_generation" || + detailGenerationProgress.status === "running" || + detailGenerationProgress.status === "error"); const gridRequestedImageCount = activeResultModeType === "detail_generation" ? Math.max( 1, - pendingGeneration?.modeType === "detail_generation" - ? pendingGeneration.expectedCount - : activeResultModeUrls.length + detailGenerationExpectedCount || activeResultModeUrls.length ) : Math.max(1, imageParams.imageCount || 1); const gridPendingRemainingCount = @@ -1888,9 +1916,9 @@ export function AgentGenerationWorkspaceDarkV2({ pendingGeneration?.modeType === "scene_generation" ? Math.max(pendingGeneration.expectedCount - currentSceneGeneratedUrls.length, 0) : activeResultModeType === "detail_generation" && - pendingGeneration?.modeType === "detail_generation" + hasDetailGenerationPlaceholderState ? Math.max( - pendingGeneration.expectedCount - detailGenerationRunResults.length, + detailGenerationExpectedCount - detailGenerationRunResults.length, 0 ) : 0; @@ -1922,7 +1950,11 @@ export function AgentGenerationWorkspaceDarkV2({ url, status: url ? ("completed" as const) - : gridPendingRemainingCount > 0 + : activeResultModeType === "detail_generation" && + detailGenerationProgress.status === "error" && + gridPendingRemainingCount > 0 + ? ("missing" as const) + : gridPendingRemainingCount > 0 ? placeholderOffset === 0 ? ("generating" as const) : ("queued" as const) @@ -1930,13 +1962,19 @@ export function AgentGenerationWorkspaceDarkV2({ }; }); }, - [activeResultModeType, activeResultModeUrls, gridPendingRemainingCount, gridResultCardCount] + [ + activeResultModeType, + activeResultModeUrls, + detailGenerationProgress.status, + gridPendingRemainingCount, + gridResultCardCount, + ] ); const shouldShowGridResultSection = activeResultModeUrls.length > 0 || ((activeResultModeType === "scene_generation" && isSceneResultModeGenerating) || (activeResultModeType === "detail_generation" && - isDetailGenerationResultModeGenerating)); + (isDetailGenerationResultModeGenerating || hasDetailGenerationPlaceholderState))); const attachmentCount = attachments.filter(Boolean).length; const hasBrandModelSelection = Boolean( selectedBrandModel?.imageUrl || referenceImages.some((image) => image.source === "brandModel") @@ -4511,7 +4549,7 @@ export function AgentGenerationWorkspaceDarkV2({ isDetailAiGenerationMethod && activeResultModeType === currentResultModeType ? (
- 预估 {pendingGeneration?.expectedCount || detailGenerationRunResults.length || 0} 屏 + 预估 {detailGenerationExpectedCount || 0} 屏
) : activeResultModeType === "sku_replacement" && isSkuReplacementPreset && @@ -4529,6 +4567,13 @@ export function AgentGenerationWorkspaceDarkV2({ 处理中 {Math.min(pendingGenerationProgressCount, pendingGeneration.expectedCount)}/ {pendingGeneration.expectedCount} + ) : activeResultModeType === "detail_generation" && + detailGenerationProgress.status === "running" && + detailGenerationExpectedCount > 0 ? ( +
+ 处理中 {Math.min(detailGenerationRunResults.length, detailGenerationExpectedCount)}/ + {detailGenerationExpectedCount} +
) : null}