diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx
index 43e202c..2175885 100644
--- a/src/app/admin/page.tsx
+++ b/src/app/admin/page.tsx
@@ -24,6 +24,7 @@ import { CSS } from '@dnd-kit/utilities';
import {
AlertCircle,
AlertTriangle,
+ BarChart3,
BookMarked,
BookOpen,
Bot,
@@ -406,6 +407,11 @@ interface SiteConfig {
OIDCClientId?: string;
OIDCClientSecret?: string;
OIDCButtonText?: string;
+ AnalyticsEnabled?: boolean;
+ AnalyticsProvider?: 'umami' | 'google' | 'clarity' | 'custom';
+ AnalyticsScriptUrl?: string;
+ AnalyticsWebsiteId?: string;
+ AnalyticsCustomScript?: string;
}
// 视频源数据类型
@@ -10198,6 +10204,11 @@ const SiteConfigComponent = ({
OIDCClientId: '',
OIDCClientSecret: '',
OIDCButtonText: '',
+ AnalyticsEnabled: false,
+ AnalyticsProvider: 'umami',
+ AnalyticsScriptUrl: '',
+ AnalyticsWebsiteId: '',
+ AnalyticsCustomScript: '',
});
// 豆瓣数据源相关状态
@@ -11528,6 +11539,194 @@ const SiteConfigComponent = ({
+ {/* 流量统计配置 */}
+
+
+
+
+ 流量统计
+
+
+
+
+ {/* 启用开关 */}
+
+
+
+
+ 开启后将在页面中注入统计脚本,支持 Umami、Google Analytics 和自定义代码
+
+
+
+
+
+ {siteSettings.AnalyticsEnabled && (
+ <>
+ {/* 统计服务提供商 */}
+
+
+
+
+
+ {siteSettings.AnalyticsProvider === 'umami' && (
+ <>
+
+
+
+ setSiteSettings((prev) => ({
+ ...prev,
+ AnalyticsScriptUrl: e.target.value,
+ }))
+ }
+ placeholder='https://your-umami-server.com/script.js'
+ className='mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200'
+ />
+
+ Umami 实例的 script.js 完整 URL
+
+
+
+
+
+ setSiteSettings((prev) => ({
+ ...prev,
+ AnalyticsWebsiteId: e.target.value,
+ }))
+ }
+ placeholder='e.g. 12345678-abcd-efgh-ijkl-1234567890ab'
+ className='mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200'
+ />
+
+ 在 Umami 后台添加网站后获取的 Website ID
+
+
+ >
+ )}
+
+ {siteSettings.AnalyticsProvider === 'google' && (
+
+
+
+ setSiteSettings((prev) => ({
+ ...prev,
+ AnalyticsWebsiteId: e.target.value,
+ }))
+ }
+ placeholder='G-XXXXXXXXXX'
+ className='mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200'
+ />
+
+ Google Analytics 4 的 Measurement ID,在 GA 后台「数据流」中获取
+
+
+ )}
+
+ {siteSettings.AnalyticsProvider === 'clarity' && (
+
+
+
+ setSiteSettings((prev) => ({
+ ...prev,
+ AnalyticsWebsiteId: e.target.value,
+ }))
+ }
+ placeholder='e.g. abc1234567'
+ className='mt-1 block w-full rounded-md border border-gray-300 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-800 dark:text-gray-200'
+ />
+
+ Microsoft Clarity 的 Project ID,在 clarity.microsoft.com 项目设置中获取
+
+
+ )}
+
+ {siteSettings.AnalyticsProvider === 'custom' && (
+
+ )}
+ >
+ )}
+
+
+
{/* 操作按钮 */}
+ {/* 流量统计脚本 */}
+ {analyticsEnabled && analyticsProvider === 'umami' && analyticsScriptUrl && (
+ <>
+ {/* eslint-disable-next-line @next/next/no-sync-scripts */}
+
+ >
+ )}
+ {analyticsEnabled && analyticsProvider === 'google' && analyticsWebsiteId && (
+ <>
+ {/* eslint-disable-next-line @next/next/no-sync-scripts */}
+
+
+ >
+ )}
+ {analyticsEnabled && analyticsProvider === 'clarity' && analyticsWebsiteId && (
+
+ )}
+ {analyticsEnabled && analyticsProvider === 'custom' && analyticsCustomScript && (
+
+ )}