diff --git a/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx b/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx index ba95ed259..d56af75c6 100644 --- a/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx +++ b/app/(admin)/settings/agent-workflow/psd-templates/psd-templates-settings-client.tsx @@ -96,6 +96,7 @@ const SYSTEM_FONT_OPTIONS = [ const EMPTY_CATEGORY_SELECT_VALUE = "__none__"; const EMPTY_BRAND_SELECT_VALUE = "__unassigned__"; const ALL_TEMPLATE_BRANDS_SELECT_VALUE = "__all_template_brands__"; +const SELF_CLIP_MASK_SELECT_VALUE = "__self_clip_mask__"; const UNASSIGNED_BRAND_LABEL = "未分类"; const MAX_PSD_TEMPLATE_FILE_SIZE = 80 * 1024 * 1024; const PSD_TEMPLATE_MODE_OPTIONS: Array<{ @@ -1679,7 +1680,22 @@ export function PsdTemplatesSettingsClient({ : "当前筛选条件下没有图层,请换个关键词试试。"} ) : ( - filteredLayers.map((layer, index) => ( + filteredLayers.map((layer, index) => { + const clipMaskLayerOptions = + layer.slotType === "image" + ? draftTemplate.layers.filter( + (candidate) => + candidate.id !== layer.id && + (candidate.previewUrl || candidate.sourceUrl) && + !( + candidate.slotType === "text" && + !candidate.previewUrl && + !candidate.sourceUrl + ) + ) + : []; + + return (
@@ -1836,6 +1852,9 @@ export function PsdTemplatesSettingsClient({ forceClipMask: checked ? false : current.forceClipMask, + clipMaskLayerId: checked + ? undefined + : current.clipMaskLayerId, }; } @@ -1875,6 +1894,9 @@ export function PsdTemplatesSettingsClient({ forceClipMask: checked ? current.forceClipMask : false, + clipMaskLayerId: checked + ? current.clipMaskLayerId + : undefined, } : { ...current, @@ -1994,7 +2016,7 @@ export function PsdTemplatesSettingsClient({
强制剪切蒙版
- 开启后替换图会按当前 PSD 图层原始透明区域剪切,适合需要贴合固定形状的图片槽位。 + 开启后替换图会按指定目标图层的透明区域剪切,适合替换图需要贴合超级锁或固定形状的图片槽位。
+ {layer.forceClipMask ? ( +
+
剪切蒙版目标图层
+ +
+ 如果 PSD 里目标形状是超级锁图层,请在这里选择那个目标图层;前台只能移动替换图,目标图仍保持锁定不可选中。 +
+
+ ) : null} +
填充模式