diff --git a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx index 5ab468b46..3872ad89e 100644 --- a/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx +++ b/app/(admin)/settings/agent-workflow/agent-workflow-settings-client.tsx @@ -3139,7 +3139,7 @@ export function AgentWorkflowSettingsClient({ variants={containerVariants} className="grid gap-6 lg:grid-cols-2" > - +
diff --git a/components/agents/AgentPsdTemplateEditorDialog.tsx b/components/agents/AgentPsdTemplateEditorDialog.tsx index cf0bf1906..f42c4bc49 100644 --- a/components/agents/AgentPsdTemplateEditorDialog.tsx +++ b/components/agents/AgentPsdTemplateEditorDialog.tsx @@ -21,7 +21,6 @@ import { Dialog, DialogContent, } from "@/components/ui/dialog"; -import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; @@ -107,6 +106,63 @@ const PREVIEW_STAGE_TARGET_HEIGHT = 760; const MIN_IMAGE_SCALE = 0.4; const MAX_IMAGE_SCALE = 3; +function getTemplateMetaLabel( + template: AgentPsdTemplate, + showSecondaryCategory: boolean +) { + const metaParts = [ + `${template.width} x ${template.height}`, + showSecondaryCategory ? String(template.secondaryCategory || "").trim() : "", + ].filter(Boolean); + return metaParts.join(" · "); +} + +function renderTemplateSelectContent( + template: AgentPsdTemplate, + params?: { + showSecondaryCategory?: boolean; + compact?: boolean; + } +) { + const showSecondaryCategory = params?.showSecondaryCategory === true; + const compact = params?.compact === true; + const metaLabel = getTemplateMetaLabel(template, showSecondaryCategory); + + return ( +
+
+ {template.name} +
+
+
+ {template.name} +
+ {metaLabel ? ( +
+ {metaLabel} +
+ ) : null} +
+
+ ); +} + function clampImageScale(value: number) { if (!Number.isFinite(value)) { return 1; @@ -507,10 +563,6 @@ export function AgentPsdTemplateEditorDialog({ ), [selectedTemplateLayers] ); - const fixedLayerCount = useMemo(() => { - if (!selectedTemplate) return 0; - return selectedTemplateLayers.filter((layer) => !layer.isEditable).length; - }, [selectedTemplate, selectedTemplateLayers]); const orderedPreviewLayers = useMemo( () => [...selectedTemplateLayers].reverse(), [selectedTemplateLayers] @@ -617,6 +669,81 @@ export function AgentPsdTemplateEditorDialog({ const selectedTextColor = selectedTextLayer ? effectiveTextColorAssignments[selectedTextLayer.id] || selectedTextLayer.textColor : "#111111"; + const selectedImageAdjustmentPanel = + selectedImageLayer && effectiveImageAssignments[selectedImageLayer.id] ? ( +
+
+ + 选中画布中的图片后可直接拖动位置 +
+
+
+
+ + 缩放 +
+ + {Math.round(selectedImagePlacement.scale * 100)}% + +
+
+
+ + { + const newScale = clampImageScale(value[0] || 1); + updateImagePlacement(selectedImageLayer.id, (current) => ({ + ...current, + scale: newScale, + })); + }} + /> + +
+
+ 40% + 100% + 300% +
+
+
+
+ +
+
+ ) : null; const fontFaceCss = useMemo(() => buildPreviewFontFaces(selectedTemplate), [selectedTemplate]); const selectedTemplateSelectValue = selectedTemplate?.id; const hasTemplateOptions = templates.length > 0; @@ -1027,28 +1154,13 @@ export function AgentPsdTemplateEditorDialog({ {hasTemplateOptions ? (