diff --git a/admin/src/lib/api.ts b/admin/src/lib/api.ts index 22a25fe..7c80e5d 100644 --- a/admin/src/lib/api.ts +++ b/admin/src/lib/api.ts @@ -53,8 +53,8 @@ import type { import { getRuntimeAdminBaseUrl, normalizeAdminBaseUrl } from '@/lib/runtime-config' const envApiBase = normalizeAdminBaseUrl(import.meta.env.VITE_API_BASE) -const DEV_API_BASE = 'http://localhost:5150' const PROD_DEFAULT_API_PORT = '5150' +const DEV_DEFAULT_API_HOST = '127.0.0.1' function getApiBase() { const runtimeApiBase = getRuntimeAdminBaseUrl('apiBaseUrl') @@ -67,11 +67,12 @@ function getApiBase() { } if (import.meta.env.DEV) { - return DEV_API_BASE - } + if (typeof window !== 'undefined') { + const { protocol, hostname } = window.location + return `${protocol}//${hostname}:${PROD_DEFAULT_API_PORT}` + } - if (typeof window === 'undefined') { - return DEV_API_BASE + return `http://${DEV_DEFAULT_API_HOST}:${PROD_DEFAULT_API_PORT}` } const { protocol, hostname } = window.location diff --git a/admin/src/lib/types.ts b/admin/src/lib/types.ts index 2b7a1ae..ac372f6 100644 --- a/admin/src/lib/types.ts +++ b/admin/src/lib/types.ts @@ -329,6 +329,10 @@ export interface AdminSiteSettingsResponse { notification_webhook_url: string | null notification_comment_enabled: boolean notification_friend_link_enabled: boolean + subscription_popup_enabled: boolean + subscription_popup_title: string + subscription_popup_description: string + subscription_popup_delay_seconds: number search_synonyms: string[] } @@ -387,6 +391,10 @@ export interface SiteSettingsPayload { notificationWebhookUrl?: string | null notificationCommentEnabled?: boolean notificationFriendLinkEnabled?: boolean + subscriptionPopupEnabled?: boolean + subscriptionPopupTitle?: string | null + subscriptionPopupDescription?: string | null + subscriptionPopupDelaySeconds?: number | null searchSynonyms?: string[] } diff --git a/admin/src/pages/site-settings-page.tsx b/admin/src/pages/site-settings-page.tsx index 90c73ef..31d409f 100644 --- a/admin/src/pages/site-settings-page.tsx +++ b/admin/src/pages/site-settings-page.tsx @@ -158,6 +158,10 @@ function toPayload(form: AdminSiteSettingsResponse): SiteSettingsPayload { notificationWebhookUrl: form.notification_webhook_url, notificationCommentEnabled: form.notification_comment_enabled, notificationFriendLinkEnabled: form.notification_friend_link_enabled, + subscriptionPopupEnabled: form.subscription_popup_enabled, + subscriptionPopupTitle: form.subscription_popup_title, + subscriptionPopupDescription: form.subscription_popup_description, + subscriptionPopupDelaySeconds: form.subscription_popup_delay_seconds, searchSynonyms: form.search_synonyms, } } @@ -595,6 +599,70 @@ export function SiteSettingsPage() { + + + 订阅弹窗 + + 前台会在用户停留一段时间并有滚动/交互后,再延迟弹出订阅窗口;这里统一控制开关和文案。 + + + + + +
+ + + updateField('subscription_popup_title', event.target.value) + } + /> + + + + updateField( + 'subscription_popup_delay_seconds', + event.target.value ? Number(event.target.value) : 18, + ) + } + /> + +
+ + +