@@ -198,7 +213,12 @@ export function AgentWorkflowMaterialPicker({
) : (
- {isLoading ? (
+ {disabled ? (
+ <>
+
+ 先选择生图模式,再搜索并选择素材图。
+ >
+ ) : isLoading ? (
<>
正在搜索并导入图片,请稍候...
diff --git a/components/agents/AgentWorkflowMaterialSelectionPanel.tsx b/components/agents/AgentWorkflowMaterialSelectionPanel.tsx
index bc272f940..82deeeb67 100644
--- a/components/agents/AgentWorkflowMaterialSelectionPanel.tsx
+++ b/components/agents/AgentWorkflowMaterialSelectionPanel.tsx
@@ -14,6 +14,8 @@ interface AgentWorkflowMaterialSelectionPanelProps {
onMaterialsChange: (next: AgentWorkflowMaterialSelections) => void;
title?: string;
description?: string;
+ disabled?: boolean;
+ disabledHint?: string;
}
export function AgentWorkflowMaterialSelectionPanel({
@@ -23,6 +25,8 @@ export function AgentWorkflowMaterialSelectionPanel({
onMaterialsChange,
title = "SKU / SPU 选图",
description = "先确定生图模式,再搜索主 SKU 或搭配 SKU 的白底图。选中的图片会自动进入对应槽位。",
+ disabled = false,
+ disabledHint = "请先在下方选择一个生图模式,再启用 SKU / SPU 搜图。",
}: AgentWorkflowMaterialSelectionPanelProps) {
const [materialSearchState, setMaterialSearchState] = useState<{
primary: { isLoading: boolean; errorText: string | null };
@@ -122,6 +126,8 @@ export function AgentWorkflowMaterialSelectionPanel({
placeholder="输入主 SKU / SPU"
buttonLabel="搜索主图"
searchNote="当前上游接口实际按可命中的 SKU 查图;若提供了 SPU 接口,后续可直接无缝切换。"
+ disabled={disabled}
+ disabledHint={disabledHint}
isLoading={materialSearchState.primary.isLoading}
errorText={materialSearchState.primary.errorText}
result={materials.primary.result}
@@ -148,6 +154,8 @@ export function AgentWorkflowMaterialSelectionPanel({
placeholder="输入搭配 SKU"
buttonLabel="搜索搭配图"
searchNote="选中的搭配图会进入第二个产品槽位,你也可以在下面继续手动替换。"
+ disabled={disabled}
+ disabledHint={disabledHint}
isLoading={materialSearchState.secondary.isLoading}
errorText={materialSearchState.secondary.errorText}
result={materials.secondary.result}
diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx
index 60aafde40..6b42c99a7 100644
--- a/components/canvas/CanvasChatPanel.tsx
+++ b/components/canvas/CanvasChatPanel.tsx
@@ -9,7 +9,6 @@ import useSWR, { useSWRConfig } from "swr";
import { Send, Loader2, ImagePlus, Paperclip, X, Plus, History, LayoutGrid, ArrowRightToLine, RefreshCw, Globe, Box, ArrowUp, Video, Sparkles, Check, ChevronDown, ChevronUp, AlertCircle, CheckCircle2, Brain, ThumbsUp, ThumbsDown, Eye, Trash2, Download, MessageCircle } from "lucide-react";
import { Button } from "@/components/ui/button";
import { Textarea } from "@/components/ui/textarea";
-import { AgentWorkflowMaterialSelectionPanel } from "@/components/agents/AgentWorkflowMaterialSelectionPanel";
import {
Collapsible,
CollapsibleContent,
@@ -52,7 +51,6 @@ import type { Attachment, ChatMessage } from "@/lib/types";
import type {
AgentPreset,
AgentWorkflowComposerContext,
- AgentWorkflowMaterialSelections,
} from "@/types/agent";
import { type CanvasLaunchPayload, getCanvasLaunchStorageKey } from "@/lib/canvas-launch";
import {
@@ -60,7 +58,6 @@ import {
normalizeCanvasSkillTags,
type CanvasSkillTag,
} from "@/lib/canvas-skill-tags";
-import type { AgentWorkflowInputs } from "@/components/agents/AgentWorkflowPanel";
import { getCanvasSkillIconComponent } from "@/components/canvas/canvas-skill-icons";
import { ImageParamsBar, type ImageGenerationParams } from "@/components/image-params-bar";
import { VideoParamsBar, type VideoGenerationParams } from "@/components/video-params-bar";
@@ -117,10 +114,6 @@ interface CanvasChatPanelProps {
selectedAgentPresetId?: string | null;
chatScope?: "canvas" | "agent";
workflowContext?: AgentWorkflowComposerContext | null;
- workflowInputs?: AgentWorkflowInputs | null;
- onWorkflowInputsChange?: ((next: AgentWorkflowInputs) => void) | null;
- workflowMaterials?: AgentWorkflowMaterialSelections | null;
- onWorkflowMaterialsChange?: ((next: AgentWorkflowMaterialSelections) => void) | null;
}
type VideoStoryboardStreamData =
@@ -1693,10 +1686,6 @@ export function CanvasChatPanel({
selectedAgentPresetId,
chatScope = "canvas",
workflowContext = null,
- workflowInputs = null,
- onWorkflowInputsChange = null,
- workflowMaterials = null,
- onWorkflowMaterialsChange = null,
}: CanvasChatPanelProps) {
const { data: session } = useSession();
const [input, setInput] = useState("");
@@ -2827,9 +2816,6 @@ export function CanvasChatPanel({
[agentPresetResponse]
);
const workflowReferenceImages = workflowContext?.referenceImages || [];
- const canManageWorkflowMaterials = Boolean(
- workflowInputs && workflowMaterials && onWorkflowInputsChange && onWorkflowMaterialsChange
- );
const hasWorkflowContext = Boolean(
workflowContext &&
(String(workflowContext.summaryText || "").trim() ||
@@ -9468,26 +9454,6 @@ export function CanvasChatPanel({
) : null}
)}
- {!isDetailGenerationMode &&
- activeComposerMode === "agent" &&
- selectedAgentPreset &&
- hasAgentUploadSlots &&
- canManageWorkflowMaterials &&
- workflowInputs &&
- workflowMaterials &&
- onWorkflowInputsChange &&
- onWorkflowMaterialsChange ? (
-
- ) : null}