From 6ca7feb1a04ba53ac8877931b054cd21f5be5e37 Mon Sep 17 00:00:00 2001 From: 134 Date: Fri, 7 Aug 2026 16:08:11 +0800 Subject: [PATCH] fix(canvas): restore PSD template replacement entry --- .../settings/admin-settings-client.tsx | 1 + components/canvas/CanvasWorkspace.tsx | 28 +++ components/canvas/nodes/ImageNode.tsx | 234 +++++++++++++++++- lib/canvas-toolbar-config.ts | 6 + store/canvas/index.ts | 1 + tests/routes/canvas-chat-helpers.test.ts | 12 + 6 files changed, 276 insertions(+), 6 deletions(-) diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 3c6b2f92d..0bc809e58 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -1053,6 +1053,7 @@ const CANVAS_TOOLBAR_FALLBACK_ICONS: Record = imageBoxCutout: Scan, imageLocalEdit: Wand2, imageLayoutReplace: LayoutTemplate, + imagePsdTemplateReplace: ImageIcon, imageRemoveWatermark: Eraser, imageResize: Maximize2, imageTextEdit: Type, diff --git a/components/canvas/CanvasWorkspace.tsx b/components/canvas/CanvasWorkspace.tsx index a1987f7e5..6eb703422 100644 --- a/components/canvas/CanvasWorkspace.tsx +++ b/components/canvas/CanvasWorkspace.tsx @@ -22,6 +22,7 @@ import { AlertTriangle, Check, Download, + FileImage, Flag, GitBranch, Heart, @@ -558,10 +559,15 @@ export function CanvasWorkspace({ canvasToolbarConfig, "imageLayoutReplace" ); + const selectedImagePsdTemplateReplaceItem = getCanvasToolbarItem( + canvasToolbarConfig, + "imagePsdTemplateReplace" + ); // 局部编辑属于主无限画布图片的固定能力,旧配置缺少该 key 时也保持可见。 const selectedImageLocalEditEnabled = true; // 排版替换同样是主无限画布图片的核心 AI 入口,旧配置缺少该 key 时也保持可见。 const selectedImageLayoutReplaceEnabled = true; + const selectedImagePsdTemplateReplaceEnabled = true; // Store actions const selectNode = useCanvasStore((state) => state.selectNode); @@ -2374,6 +2380,28 @@ export function CanvasWorkspace({ {selectedImageLocalEditItem.label} ) : null} + {selectedImagePsdTemplateReplaceEnabled && selectedImageNodes.length === 1 ? ( + + ) : null} {selectedImageLayoutReplaceEnabled && selectedImageNodes.length === 1 ? ( + ); + })} + + + ) : null} + +
+ + setPsdTemplateBrandName(event.target.value)} + placeholder="选择或输入已配置 PSD 模版的品牌名" + value={psdTemplateBrandName} + /> +
+ + + + + + + + + ) : null} + {isSelectedImageActionInline("psdTemplate") ? ( + + ) : null} + {isSelectedImageActionInline("layoutReplace") ? (