diff --git a/components/agents/AgentGenerationWorkspaceDarkV2.tsx b/components/agents/AgentGenerationWorkspaceDarkV2.tsx index 233c90ecb..15a6df1c8 100644 --- a/components/agents/AgentGenerationWorkspaceDarkV2.tsx +++ b/components/agents/AgentGenerationWorkspaceDarkV2.tsx @@ -910,13 +910,15 @@ function DetailResultLocalEditDialog({ useState(null); const [uploadingRegionId, setUploadingRegionId] = useState(null); const [drawingTargetRegionId, setDrawingTargetRegionId] = useState(null); + const [mode, setMode] = useState("local_edit"); const dragStartRef = useRef<{ x: number; y: number } | null>(null); const editSurfaceRef = useRef(null); - const mode: DetailResultLocalEditMode = - target?.mode === "scale_adjust" ? "scale_adjust" : "local_edit"; const isScaleAdjustMode = mode === "scale_adjust"; const activePreviewResult = - previewResult && target && previewResult.cardId === target.cardId + previewResult && + target && + previewResult.cardId === target.cardId && + previewResult.mode === mode ? previewResult : null; const isBusy = submitting || Boolean(uploadingRegionId); @@ -926,6 +928,7 @@ function DetailResultLocalEditDialog({ const isDrawingScaleTarget = isScaleAdjustMode && Boolean(drawingTargetRegionId); useEffect(() => { + setMode(target?.mode === "scale_adjust" ? "scale_adjust" : "local_edit"); setRegions([]); setDraftRect(null); setActiveRegionId(null); @@ -935,6 +938,21 @@ function DetailResultLocalEditDialog({ dragStartRef.current = null; }, [target?.cardId, target?.imageUrl, target?.mode]); + const handleModeChange = useCallback( + (nextMode: DetailResultLocalEditMode) => { + if (nextMode === mode || submitting || activePreviewResult) return; + setMode(nextMode); + setRegions([]); + setDraftRect(null); + setActiveRegionId(null); + setRegionInteraction(null); + setUploadingRegionId(null); + setDrawingTargetRegionId(null); + dragStartRef.current = null; + }, + [activePreviewResult, mode, submitting] + ); + useEffect(() => { if (regions.length === 0) { if (activeRegionId) setActiveRegionId(null); @@ -1385,10 +1403,10 @@ function DetailResultLocalEditDialog({ target?.resultModeType === "detail_replacement" ? "处理完成后会更新当前套详情结果图。" : "处理完成后会加入 AI详情结果区。"; - const dialogTitle = isScaleAdjustMode ? "比例调整详情图" : "局部编辑详情图"; + const dialogTitle = "编辑详情图"; const dialogDescription = isScaleAdjustMode - ? "先框选要调整比例的物体,再框选目标大小和位置后生成。" - : "在图片上拖拽框选编辑位置,可添加多个区域,并为每个区域上传专属参考图。"; + ? "比例模式:先框主体,再框目标大小和位置。" + : "局部模式:框选要修改的位置,填写提示词,并可添加参考图。"; return ( (!open ? onClose() : undefined)}> @@ -1398,6 +1416,36 @@ function DetailResultLocalEditDialog({ {dialogDescription} + {!activePreviewResult ? ( +
+ + +
+ ) : null}
@@ -1676,20 +1724,20 @@ function DetailResultLocalEditDialog({
{isScaleAdjustMode - ? `先拖拽框选主体,再拖拽青色目标框设置大小和位置,最多 ${LOCAL_EDIT_MAX_REGIONS} 个区域。${completionCopy}` - : `拖拽图片添加区域。最多 ${LOCAL_EDIT_MAX_REGIONS} 个区域,每个区域最多 ${LOCAL_EDIT_MAX_REFERENCE_IMAGES_PER_REGION} 张参考图。${completionCopy}`} + ? `先框主体,再框目标大小和位置。最多 ${LOCAL_EDIT_MAX_REGIONS} 个区域。${completionCopy}` + : `框选要局部修改的位置,填写提示词;可为每个区域添加参考图。最多 ${LOCAL_EDIT_MAX_REGIONS} 个区域。${completionCopy}`}
{!activePreviewResult && isScaleAdjustMode ? (
- Target Box + 目标框
{pendingScaleTargetRegion - ? `继续在左侧为区域 ${pendingScaleTargetRegion.index} 拖拽青色目标框。` + ? `请为区域 ${pendingScaleTargetRegion.index} 框选目标大小和位置。` : regions.length > 0 - ? "目标框已补齐,可拖动或拉伸青色框继续调整位置和大小。" - : "先在左侧拖拽框选要调整比例的主体。"} + ? "目标框已补齐,可拖动或拉伸继续调整。" + : "先在左侧框选要调整比例的主体。"}
) : null} @@ -1706,7 +1754,7 @@ function DetailResultLocalEditDialog({ ) : regions.length === 0 ? (
{isScaleAdjustMode - ? "在左侧图片上先框主体,再框青色目标大小和位置。" + ? "先框主体,再框目标大小和位置。" : "在左侧图片上拖拽框选后,这里会显示区域提示词和参考图。"}
) : isScaleAdjustMode ? null : ( @@ -9701,36 +9749,18 @@ export function AgentGenerationWorkspaceDarkV2({ "inline-flex items-center gap-1.5 disabled:cursor-not-allowed disabled:opacity-45" )} > - {isDetailLocalEditBusy && !isDetailScaleAdjusting ? ( + {isDetailLocalEditBusy ? ( ) : ( )} - {isDetailLocalEditing ? "编辑中" : "局部编辑"} - - -