From c754383ffc457657ee526bda68d669dddc0067bd Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 20 Mar 2026 17:55:49 +0800 Subject: [PATCH] feat: refine agent generation workflow ui --- .../agents/AgentGenerationWorkspaceDarkV2.tsx | 121 ++++++++---------- components/agents/AgentPresetDialog.tsx | 23 ++-- .../agents/AgentWorkflowBrandModelPicker.tsx | 5 + 3 files changed, 72 insertions(+), 77 deletions(-) diff --git a/components/agents/AgentGenerationWorkspaceDarkV2.tsx b/components/agents/AgentGenerationWorkspaceDarkV2.tsx index a5eca27dd..c06f28a05 100644 --- a/components/agents/AgentGenerationWorkspaceDarkV2.tsx +++ b/components/agents/AgentGenerationWorkspaceDarkV2.tsx @@ -298,6 +298,8 @@ export function AgentGenerationWorkspaceDarkV2({ onResultPreviewUrlsChange, topNavRightSlot, }: AgentGenerationWorkspaceDarkV2Props) { + const darkSelectContentClass = + "border-white/10 bg-zinc-950 text-white shadow-2xl [--popover:hsl(240_10%_3.9%)] [--popover-foreground:hsl(0_0%_98%)] [--accent:rgba(255,255,255,0.08)] [--accent-foreground:hsl(0_0%_98%)] [--muted:rgba(255,255,255,0.04)] [--muted-foreground:rgba(255,255,255,0.56)]"; const rawChatId = useMemo( () => (chatId.startsWith("canvas-") ? chatId.replace("canvas-", "") : chatId), [chatId] @@ -769,6 +771,10 @@ export function AgentGenerationWorkspaceDarkV2({ (image) => image.source === "primary" || image.source === "secondary" ); const hasSatisfiedSlotRequirement = !hasAgentUploadSlots || attachmentCount >= requiredUploadCount; + const mergedSettingsStepLabel = hasMaterialStep ? "选图与生成" : "生成参数"; + const mergedSettingsStepDescription = hasMaterialStep + ? "搜索素材、补充要求、确认槽位并开始生成" + : "补充要求并开始生成"; const toolSteps = useMemo( () => [ @@ -794,35 +800,15 @@ export function AgentGenerationWorkspaceDarkV2({ }, ] : []), - ...(hasMaterialStep - ? [ - { - key: "materials" as const, - label: "SKU / SPU 选图", - description: "搜索主图和搭配图", - icon: Upload, - disabled: !selectedAgentPresetId, - completed: hasMaterialSelections, - optional: true, - }, - ] - : []), - { - key: "prompt" as const, - label: "补充要求", - description: "补充风格、构图和细节要求", - icon: Sparkles, - disabled: !selectedAgentPresetId, - completed: Boolean(input.trim()), - optional: true, - }, { key: "settings" as const, - label: "生成参数", - description: "选择模型并开始生成", + label: mergedSettingsStepLabel, + description: mergedSettingsStepDescription, icon: Settings2, disabled: !selectedAgentPresetId, - completed: Boolean(selectedAgentPresetId), + completed: + Boolean(selectedAgentPresetId) && + (Boolean(input.trim()) || hasMaterialSelections || hasSatisfiedSlotRequirement), optional: false, }, ], @@ -830,8 +816,10 @@ export function AgentGenerationWorkspaceDarkV2({ hasBrandModelSelection, hasBrandModelStep, hasMaterialSelections, - hasMaterialStep, hasSatisfiedSlotRequirement, + mergedSettingsStepDescription, + mergedSettingsStepLabel, + hasMaterialStep, input, selectedAgentPresetId, ] @@ -943,28 +931,27 @@ export function AgentGenerationWorkspaceDarkV2({ } setActiveToolStep((current) => { - if (current !== "preset") return current; - if (isDetailReplacementPreset || isSkuReplacementPreset) { - if (hasMaterialStep) return "materials"; - return "prompt"; + if ( + current !== "preset" && + current !== "materials" && + current !== "prompt" + ) { + return current; } + if (hasBrandModelStep) return "brand-model"; - if (hasMaterialStep) return "materials"; - return "prompt"; + return "settings"; }); }, [ hasBrandModelStep, - hasMaterialStep, - isDetailReplacementPreset, - isSkuReplacementPreset, selectedAgentPresetId, ]); useEffect(() => { if (!toolSteps.some((step) => step.key === activeToolStep)) { - setActiveToolStep("preset"); + setActiveToolStep(selectedAgentPresetId ? "settings" : "preset"); } - }, [activeToolStep, toolSteps]); + }, [activeToolStep, selectedAgentPresetId, toolSteps]); useEffect(() => { if (!syncGeneratedResultsToCanvas) { @@ -1581,7 +1568,7 @@ export function AgentGenerationWorkspaceDarkV2({ {assignableSourceLibrary.length > 0 ? ( -
+
{assignableSourceLibrary.map((source) => { const assignedToActiveSlot = activeAssignmentSlotIndex !== null && @@ -1613,7 +1600,7 @@ export function AgentGenerationWorkspaceDarkV2({ {source.sourceLabel}
-
+
{source.label}
@@ -1629,7 +1616,7 @@ export function AgentGenerationWorkspaceDarkV2({
{activeAssignmentIsModelSlot ? "当前模特槽位还没有可分配的品牌模特图,请先在“品牌模特”步骤里选择。" - : "当前产品槽位还没有来自已选素材区的图片,请先到“SKU / SPU 选图”里完成选择。"} + : "当前产品槽位还没有来自已选素材区的图片,请先在当前页上方完成 SKU / SPU 选图。"}
)}
@@ -1733,29 +1720,21 @@ export function AgentGenerationWorkspaceDarkV2({
) : null} - {hasMaterialStep ? ( -
- {materialSelectionPanel} -
- ) : null} - -
-
-

- - 补充要求 -

-