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 34a7d65ab..4ca1668c0 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 @@ -12,6 +12,7 @@ import { Clock3, Image as ImageIcon, Layers, + Lock, Loader2, RefreshCw, Save, @@ -173,12 +174,18 @@ function cloneTemplate(template: AgentPsdTemplate | null) { } function countEditableLayers(template: AgentPsdTemplate | null) { - return template?.layers.filter((layer) => layer.isEditable).length || 0; + return ( + template?.layers.filter((layer) => layer.isEditable && !layer.isSuperLocked) + .length || 0 + ); } function countEditableTextLayers(template: AgentPsdTemplate | null) { return ( - template?.layers.filter((layer) => layer.isEditable && layer.slotType === "text").length || 0 + template?.layers.filter( + (layer) => + layer.isEditable && !layer.isSuperLocked && layer.slotType === "text" + ).length || 0 ); } @@ -492,8 +499,8 @@ export function PsdTemplatesSettingsClient({ return; } - if (!selectedTemplateId || !templates.some((template) => template.id === selectedTemplateId)) { - setSelectedTemplateId(templates[0].id); + if (selectedTemplateId && !templates.some((template) => template.id === selectedTemplateId)) { + setSelectedTemplateId(null); } }, [selectedTemplateId, templateListErrorMessage, templates]); @@ -1134,6 +1141,1126 @@ export function PsdTemplatesSettingsClient({ } } + const templateEditorContent = ( +
+ {draftTemplate ? ( + <> + + + 模板基础信息 + 启用前请至少配置一个可编辑槽位,文字槽位建议明确字体和字号。 + + +
+
+
+ {hasTemplateParsedCanvas(draftTemplate) ? ( + {draftTemplate.name} + ) : ( +
+ +
{getTemplateParseLabel(draftTemplate)}
+
+ 先完成 PSD 解析,再配置图层和可编辑槽位 +
+
+ )} +
+
+
+
+ + {getTemplateParseLabel(draftTemplate)} + + +
+
+ {draftTemplate.parseStage || + (draftTemplate.parseStatus === "completed" + ? "解析完成,可开始配置槽位" + : hasTemplateParsedCanvas(draftTemplate) + ? "快速解析已完成,后台正在补全图层缩略图、源图和模板底图" + : "上传完成后需要手动解析,适合批量上传多个 PSD 再逐个处理")} +
+ {draftTemplate.parseStatus === "processing" ? ( +
+
+ {draftTemplate.parseStage || "正在解析 PSD..."} + {getTemplateParseProgress(draftTemplate)}% +
+ +
+ ) : null} + {draftTemplate.parseError ? ( +
+ {draftTemplate.parseError} +
+ ) : null} +
+
+
+
画布尺寸
+
+ {hasTemplateParsedCanvas(draftTemplate) + ? `${draftTemplate.width} x ${draftTemplate.height}` + : "待解析"} +
+
+
+
当前槽位
+
+ {hasTemplateParsedCanvas(draftTemplate) + ? `${countEditableLayers(draftTemplate)} / ${draftTemplate.layers.length}` + : "待解析"} +
+
+
+
+ +
+
+
+ + + setDraftTemplate((current) => + current ? { ...current, name: event.target.value } : current + ) + } + /> +
+
+ + {selectableDraftBrandOptions.length > 0 ? ( + + ) : ( + + setDraftTemplate((current) => + current ? { ...current, brandName: event.target.value } : current + ) + } + placeholder="请输入品牌名称" + /> + )} +
+
+ + +
+
+ + {draftBrandCategoryOptions.length > 0 ? ( + + ) : ( + + setDraftTemplate((current) => + current + ? { ...current, secondaryCategory: event.target.value } + : current + ) + } + placeholder="例如:凳子类 / 升降桌类" + /> + )} +
+
+ +
+ {draftTemplateCategoryTagOptions.map((tag) => { + const isSelected = hasTemplateCategoryTag( + draftTemplate.categoryTags, + tag + ); + return ( + + ); + })} +
+

+ 可多选。勾选“适合所有”后,模板会在所有品类下都显示;未设置标签的旧模板仍会保持可见,避免影响现有使用。 +

+
+
+ +
+
+ + +
+
+ +
+ +