+
+
+
+
+
+
+ 生图模式
+
+
+ 先在本页选择生图模式,再使用上方 SKU / SPU 取图,右侧全屏工作区会自动进入对应图片槽位并展示结果。
+
+
+ 第 2 步 / 2 步
+
+
-
+ {!workflowProgress.isComplete ? (
+
+ 第一步尚未完成,你也可以在当前直接继续生图模式选择。
+
+ ) : null}
- {!workflowProgress.isComplete ? (
-
- 第一步尚未完成,你也可以在当前直接继续生图模式选择。
+
-
-
-
-
-
{}}
- selectedAgentPresetId={isAgentFeatureEnabled ? selectedAgentPresetId : null}
- chatScope="agent"
- workflowContext={workflowContext}
- />
+
+
+
+
+
执行工作区
+
+ 这里不再是侧边对话框,而是全屏生图工作台。生成结果、槽位操作和补充指令都在这里完成。
+
+
+
+ {selectedAgentPresetId ? (
+
+ 当前模式已选
+
+ ) : (
+
+ 请选择左侧生图模式
+
+ )}
+
+
+
+
+
+
diff --git a/components/canvas/CanvasChatPanel.tsx b/components/canvas/CanvasChatPanel.tsx
index 6b42c99a7..73c29b602 100644
--- a/components/canvas/CanvasChatPanel.tsx
+++ b/components/canvas/CanvasChatPanel.tsx
@@ -114,6 +114,7 @@ interface CanvasChatPanelProps {
selectedAgentPresetId?: string | null;
chatScope?: "canvas" | "agent";
workflowContext?: AgentWorkflowComposerContext | null;
+ presentation?: "panel" | "workspace";
}
type VideoStoryboardStreamData =
@@ -1686,6 +1687,7 @@ export function CanvasChatPanel({
selectedAgentPresetId,
chatScope = "canvas",
workflowContext = null,
+ presentation = "panel",
}: CanvasChatPanelProps) {
const { data: session } = useSession();
const [input, setInput] = useState("");
@@ -7882,9 +7884,15 @@ export function CanvasChatPanel({
const fallbackTitle = String(projectTitle || "").trim();
return fallbackTitle || "未命名画布";
}, [activeSessionTitle, projectTitle]);
+ const isWorkspacePresentation = presentation === "workspace";
return (
-
+
{/* 全局遮罩提示 - 当处于画布选图模式时显示 */}
{detailSlotPickerIndex !== null && (
@@ -7912,111 +7920,112 @@ export function CanvasChatPanel({
)}
- {/* Header - Minimal with Icons */}
-
-
-
-
-
-
- {displayCanvasName}
-
-
-
-
-
-
-
-
+ ) : null}
{/* 消息列表 */}
{isDetailEmptyState ? (
@@ -8025,7 +8034,8 @@ export function CanvasChatPanel({