From ee4bb147368e779c0c1c00557e996fe09893bb4f Mon Sep 17 00:00:00 2001 From: Your Name Date: Mon, 26 Jan 2026 22:26:44 +0800 Subject: [PATCH] feat: add banner settings to admin panel for configuring ad banner text and link --- .../settings/admin-settings-client.tsx | 51 +++++++++++++++++++ app/api/site-settings/route.ts | 9 ++++ components/canvas/CanvasChatPanel.tsx | 35 ++++++++++--- lib/db/queries.ts | 22 +++++++- lib/db/schema.ts | 4 ++ 5 files changed, 111 insertions(+), 10 deletions(-) diff --git a/app/(admin)/settings/admin-settings-client.tsx b/app/(admin)/settings/admin-settings-client.tsx index 89e63f626..f5b2c00d4 100644 --- a/app/(admin)/settings/admin-settings-client.tsx +++ b/app/(admin)/settings/admin-settings-client.tsx @@ -152,6 +152,9 @@ type SiteSettings = { usageTimeEnd: string; usageTimeMessage: string; defaultTheme: "light" | "dark" | "system"; + bannerEnabled: boolean; + bannerText: string; + bannerLink: string | null; }; type NavLink = { @@ -342,6 +345,9 @@ export function AdminSettingsClient() { usageTimeEnd: "20:00", usageTimeMessage: "由壹点累了也是需要休息的", defaultTheme: "system", + bannerEnabled: true, + bannerText: "升级会员, Nano Banana Pro 免费365天!", + bannerLink: null, }); useEffect(() => { @@ -357,6 +363,9 @@ export function AdminSettingsClient() { usageTimeEnd: siteSettingsData.usageTimeEnd || "20:00", usageTimeMessage: siteSettingsData.usageTimeMessage || "由壹点累了也是需要休息的", defaultTheme: siteSettingsData.defaultTheme || "system", + bannerEnabled: siteSettingsData.bannerEnabled ?? true, + bannerText: siteSettingsData.bannerText || "升级会员, Nano Banana Pro 免费365天!", + bannerLink: siteSettingsData.bannerLink || null, }); } }, [siteSettingsData]); @@ -2394,6 +2403,48 @@ export function AdminSettingsClient() { )} + + {/* 广告横幅设置 */} +
+
+
+ +
+ 在无限画布等页面的聊天面板中显示广告横幅 +
+
+ setSiteSettings({ ...siteSettings, bannerEnabled: checked })} + /> +
+ {siteSettings.bannerEnabled && ( + <> +
+ + setSiteSettings({ ...siteSettings, bannerText: e.target.value })} + placeholder="输入横幅显示的文字" + /> +
+
+ + setSiteSettings({ ...siteSettings, bannerLink: e.target.value || null })} + placeholder="输入点击横幅后跳转的链接" + /> +
+ 如果不填写链接,点击横幅将不会跳转 +
+
+ + )} +