diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index d10212934..dbd3c1953 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -1056,6 +1056,7 @@ const CANVAS_TOOLBAR_FALLBACK_ICONS: Record = imageRemoveBackground: Scissors, imageBoxCutout: Scan, imageLocalEdit: Wand2, + imagePsdTemplateReplace: ImageIcon, imageRemoveWatermark: Eraser, imageResize: Maximize2, imageTextEdit: Type, diff --git a/components/canvas/CanvasWorkspace.tsx b/components/canvas/CanvasWorkspace.tsx index 91beecfda..f22bcecfb 100644 --- a/components/canvas/CanvasWorkspace.tsx +++ b/components/canvas/CanvasWorkspace.tsx @@ -20,6 +20,7 @@ import { AlertTriangle, Check, Download, + FileImage, Flag, GitBranch, Heart, @@ -715,8 +716,14 @@ export function CanvasWorkspace({ canvasToolbarConfig, "imageLocalEdit" ); + const selectedImagePsdTemplateReplaceItem = getCanvasToolbarItem( + canvasToolbarConfig, + "imagePsdTemplateReplace" + ); // 局部编辑属于主无限画布图片的固定能力,旧配置缺少该 key 时也保持可见。 const selectedImageLocalEditEnabled = true; + // 模版替换属于主无限画布图片的固定入口,兼容没有新 key 的历史配置。 + const selectedImagePsdTemplateReplaceEnabled = true; // Store actions const selectNode = useCanvasStore((state) => state.selectNode); @@ -2529,6 +2536,29 @@ export function CanvasWorkspace({ {selectedImageLocalEditItem.label} ) : null} + {selectedImagePsdTemplateReplaceEnabled && + selectedImageNodes.length === 1 ? ( + + ) : null} + ); + })} + + + ) : null} + +
+ + setPsdTemplateBrandName(event.target.value)} + placeholder="选择或输入已配置 PSD 模版的品牌名" + value={psdTemplateBrandName} + /> +
+ + + + + + + + + ) : null} - {isSelectedImageActionInline("localEdit") ? ( + {isSelectedImageActionInline("localEdit") ? ( + ) : null} + {isSelectedImageActionInline("removeWatermark") ? (