From af96824011dfdb2dbd2b7dd9ea6af2994cf6d9c0 Mon Sep 17 00:00:00 2001 From: Codex Date: Sat, 19 Sep 2026 15:35:11 +0800 Subject: [PATCH] fix: harden list mode and batch generation flow --- .../internal/app/cloud_agent_batch_table.go | 6 +- .../batch-generation-settings-dialog.tsx | 19 ++- web/src/pages/canvas/list-mode-generator.ts | 119 +++++++++++++----- .../pages/canvas/use-canvas-batch-table.ts | 5 +- web/test/canvas-batch-table.test.ts | 2 +- web/test/list-mode-generator.test.ts | 31 +++++ 6 files changed, 140 insertions(+), 42 deletions(-) create mode 100644 web/test/list-mode-generator.test.ts diff --git a/backend/internal/app/cloud_agent_batch_table.go b/backend/internal/app/cloud_agent_batch_table.go index b0aa9c02c..ab84ba3b5 100644 --- a/backend/internal/app/cloud_agent_batch_table.go +++ b/backend/internal/app/cloud_agent_batch_table.go @@ -12,7 +12,7 @@ import ( const ( maxCloudAgentBatchRows = 500 - maxCloudAgentBatchReferences = 6 + maxCloudAgentBatchReferences = 10 maxCloudAgentBatchPromptRunes = 20000 ) @@ -96,7 +96,7 @@ func batchTableNodeFromDocument(doc map[string]any, nodeID string) (map[string]a } columns := creationMaps(table["referenceColumns"]) if len(columns) < 1 || len(columns) > maxCloudAgentBatchReferences { - return nil, nil, nil, nil, BadAuthRequest("批量创作表必须包含 1 到 6 个参考图列") + return nil, nil, nil, nil, BadAuthRequest("批量创作表必须包含 1 到 10 个参考图列") } columnIDs := map[string]bool{} for _, column := range columns { @@ -299,7 +299,7 @@ func prepareCloudAgentBatchTableEdit(repo *repository.Repository, userID, canvas fields = []string{"并发数"} case "add_reference_column": if len(columns) >= maxCloudAgentBatchReferences { - return nil, BadAuthRequest("批量创作表最多支持6组参考图") + return nil, BadAuthRequest("批量创作表最多支持10组参考图") } if args.RowID != "" || len(args.Patch) != 0 || args.Operation != "" || args.Concurrency != 0 { return nil, BadAuthRequest("新增参考图列不接受其他修改参数") diff --git a/web/src/components/canvas/batch-generation-settings-dialog.tsx b/web/src/components/canvas/batch-generation-settings-dialog.tsx index 49df76d5c..84aec2cb7 100644 --- a/web/src/components/canvas/batch-generation-settings-dialog.tsx +++ b/web/src/components/canvas/batch-generation-settings-dialog.tsx @@ -6,10 +6,12 @@ import { ImageSettingsPanel } from "@/components/image-settings-panel"; import { ModelPicker } from "@/components/model-picker"; import { canvasThemes } from "@/lib/canvas-theme"; import { defaultImageParamsForModel } from "@/lib/model-selection"; +import { CanvasCameraControlPopover } from "./canvas-camera-control-popover"; +import type { CameraControlOptions } from "@/lib/canvas/camera-prompt-library"; import { useActiveTheme } from "@/stores/canvas/use-canvas-theme-store"; import type { AiConfig } from "@/stores/use-config-store"; -export type BatchGenerationSettings = Pick; +export type BatchGenerationSettings = Pick & { cameraControl?: CameraControlOptions }; type BatchGenerationSettingsDialogProps = { open: boolean; @@ -23,9 +25,13 @@ type BatchGenerationSettingsDialogProps = { export function BatchGenerationSettingsDialog({ open, config, rowCount, concurrency, onClose, onConfirm }: BatchGenerationSettingsDialogProps) { const theme = canvasThemes[useActiveTheme()]; const [generationConfig, setGenerationConfig] = useState(config); + const [cameraControl, setCameraControl] = useState(undefined); useEffect(() => { - if (open) setGenerationConfig(config); + if (open) { + setGenerationConfig(config); + setCameraControl(undefined); + } }, [config, open]); const handleConfigChange = (key: "quality" | "size" | "transparentBackground" | "count", value: string) => { @@ -78,6 +84,14 @@ export function BatchGenerationSettingsDialog({ open, config, rowCount, concurre /> +
+
+
摄像机控制
+
为本批次统一应用镜头、焦段和光圈设置
+
+ +
+