diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 5a44689c4..4f9a3ac5b 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -396,6 +396,13 @@ export function AdminSettingsClient() { timeout: 120, }); + // 场景裂变配置状态 + const [sceneFusionConfig, setSceneFusionConfig] = useState({ + enabled: true, + defaultPrompt: "将图1的产品替换到图2的场景中,保持图1产品的外观、颜色和细节不变,自然融合到图2的环境中。", + maxScenes: 10, + }); + // 加载抠图API配置 const { data: rmbgConfigData } = useSWR("/api/admin/settings?key=rmbg_api_config", fetcher); useEffect(() => { @@ -479,6 +486,23 @@ export function AdminSettingsClient() { } }, [angleEditConfigData]); + // 加载场景裂变配置 + const { data: sceneFusionConfigData } = useSWR("/api/admin/settings?key=scene_fusion_config", fetcher); + useEffect(() => { + if (sceneFusionConfigData?.setting?.value) { + const config = sceneFusionConfigData.setting.value as { + enabled?: boolean; + defaultPrompt?: string; + maxScenes?: number; + }; + setSceneFusionConfig({ + enabled: config.enabled ?? true, + defaultPrompt: config.defaultPrompt || "将图1的产品替换到图2的场景中,保持图1产品的外观、颜色和细节不变,自然融合到图2的环境中。", + maxScenes: config.maxScenes ?? 10, + }); + } + }, [sceneFusionConfigData]); + // 导航链接状态 const [navLinkForm, setNavLinkForm] = useState({ id: "", @@ -922,6 +946,34 @@ export function AdminSettingsClient() { } }; + // --- 场景裂变配置逻辑 --- + const handleSaveSceneFusionConfig = async () => { + try { + if (!sceneFusionConfig.defaultPrompt.trim()) { + toast.error("默认提示词不能为空"); + return; + } + + const response = await fetch("/api/admin/settings", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify({ + key: "scene_fusion_config", + value: { + enabled: sceneFusionConfig.enabled, + defaultPrompt: sceneFusionConfig.defaultPrompt.trim(), + maxScenes: sceneFusionConfig.maxScenes, + }, + }), + }); + + if (!response.ok) throw new Error("保存失败"); + toast.success("场景裂变配置保存成功"); + } catch (error) { + toast.error("保存场景裂变配置失败"); + } + }; + // --- 导航链接逻辑 --- const resetNavLinkForm = () => { setNavLinkForm({ id: "", name: "", url: "", order: 0, isEnabled: true }); @@ -3764,6 +3816,81 @@ export function AdminSettingsClient() { + + {/* 场景裂变配置 */} + + + + + 场景裂变配置 + + + 配置场景裂变功能的默认提示词和参数。场景裂变可将产品图批量融合到多个场景中。 + + + + {/* 功能开关 */} +
+
+ +
+ 开启后用户可在图片编辑器中使用场景裂变功能 +
+
+ setSceneFusionConfig({ ...sceneFusionConfig, enabled: checked })} + /> +
+ + {/* 默认提示词 */} +
+ +