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 3eda31702..5571c4a63 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 @@ -67,18 +67,40 @@ export function PsdTemplatesSettingsClient({ backLabel: string; }) { const { data, mutate } = useSWR("/api/admin/psd-templates", fetcher); + const { data: siteSettingsData } = useSWR<{ + agentWorkflowUiConfig?: { + inputOptions?: { + brands?: string[]; + }; + }; + }>("/api/site-settings", fetcher); const { data: fontsData, mutate: mutateFonts } = useSWR( "/api/admin/psd-fonts", fetcher ); const templates = useMemo(() => (data?.success ? data.templates : []), [data]); + const brandOptions = useMemo( + () => + Array.from( + new Set( + [ + ...(siteSettingsData?.agentWorkflowUiConfig?.inputOptions?.brands || []), + ...templates.map((template) => template.brandName), + ] + .map((item) => String(item || "").trim()) + .filter(Boolean) + ) + ), + [siteSettingsData, templates] + ); const fonts = useMemo(() => (fontsData?.success ? fontsData.fonts : []), [fontsData]); const [selectedTemplateId, setSelectedTemplateId] = useState(null); const [draftTemplate, setDraftTemplate] = useState(null); const [layerKeyword, setLayerKeyword] = useState(""); const [uploadName, setUploadName] = useState(""); + const [uploadBrandName, setUploadBrandName] = useState(""); const [uploadDescription, setUploadDescription] = useState(""); const [uploadFile, setUploadFile] = useState(null); const [fontUploadName, setFontUploadName] = useState(""); @@ -177,8 +199,14 @@ export function PsdTemplatesSettingsClient({ return; } + if (!uploadBrandName.trim()) { + toast.error("请先选择模板品牌"); + return; + } + const formData = new FormData(); formData.set("name", uploadName.trim() || uploadFile.name.replace(/\.[^.]+$/, "")); + formData.set("brandName", uploadBrandName.trim()); formData.set("description", uploadDescription.trim()); formData.set("status", "disabled"); formData.set("file", uploadFile); @@ -197,6 +225,7 @@ export function PsdTemplatesSettingsClient({ toast.success("PSD 模板已上传,请继续配置图层"); setUploadName(""); + setUploadBrandName(""); setUploadDescription(""); setUploadFile(null); await mutate(); @@ -279,6 +308,7 @@ export function PsdTemplatesSettingsClient({ }, body: JSON.stringify({ name: draftTemplate.name, + brandName: draftTemplate.brandName, description: draftTemplate.description || "", status: draftTemplate.status, layers: draftTemplate.layers, @@ -421,6 +451,29 @@ export function PsdTemplatesSettingsClient({ placeholder="例如:主图包装模板" /> +
+ + {brandOptions.length > 0 ? ( + + ) : ( + setUploadBrandName(event.target.value)} + placeholder="请输入品牌名称" + /> + )} +