feat: add traffic analytics configuration (Umami/GA/Custom)
Add traffic analytics support to the admin panel with three provider options: - Umami (open-source, self-hosted) — script URL + website ID - Google Analytics 4 — Measurement ID (G-XXXXXXXXXX) - Custom — any third-party analytics script (百度统计, Plausible, 51la, etc.) Changes: - admin.types.ts: Add AnalyticsEnabled, AnalyticsProvider, AnalyticsScriptUrl, AnalyticsWebsiteId, AnalyticsCustomScript to SiteConfig interface - config.ts: Add default values in getInitConfig() and configSelfCheck() - api/admin/site/route.ts: Add analytics fields to destructuring, type validation, and SiteConfig update - admin/page.tsx: Add SiteConfig interface fields, state initialization, config sync, and analytics configuration UI with provider-specific input fields - layout.tsx: Inject analytics scripts into <head> based on provider type (Umami: async script with data-website-id; GA: gtag.js + config; Custom: dangerouslySetInnerHTML)
This commit is contained in:
@@ -73,6 +73,12 @@ export interface AdminConfig {
|
||||
OIDCClientSecret?: string; // OIDC Client Secret
|
||||
OIDCButtonText?: string; // OIDC登录按钮文字
|
||||
OIDCMinTrustLevel?: number; // 最低信任等级(仅LinuxDo网站有效,为0时不判断)
|
||||
// 流量统计配置
|
||||
AnalyticsEnabled?: boolean; // 是否启用流量统计
|
||||
AnalyticsProvider?: 'umami' | 'google' | 'custom'; // 统计服务提供商
|
||||
AnalyticsScriptUrl?: string; // 脚本URL(Umami: umami.js地址; GA: gtag URL; 自定义: 脚本src)
|
||||
AnalyticsWebsiteId?: string; // 网站ID(Umami: website_id; GA: Measurement ID如G-XXXX; 自定义: 留空)
|
||||
AnalyticsCustomScript?: string; // 自定义统计代码(仅custom模式使用,完整的HTML脚本内容)
|
||||
};
|
||||
UserConfig: {
|
||||
Users: {
|
||||
|
||||
@@ -328,6 +328,12 @@ async function getInitConfig(
|
||||
TurnstileSiteKey: '',
|
||||
TurnstileSecretKey: '',
|
||||
DefaultUserTags: [],
|
||||
// 流量统计配置
|
||||
AnalyticsEnabled: false,
|
||||
AnalyticsProvider: 'umami',
|
||||
AnalyticsScriptUrl: '',
|
||||
AnalyticsWebsiteId: '',
|
||||
AnalyticsCustomScript: '',
|
||||
},
|
||||
UserConfig: {
|
||||
Users: [],
|
||||
@@ -588,6 +594,22 @@ export function configSelfCheck(adminConfig: AdminConfig): AdminConfig {
|
||||
if (adminConfig.SiteConfig.DefaultUserTags === undefined) {
|
||||
adminConfig.SiteConfig.DefaultUserTags = [];
|
||||
}
|
||||
// 流量统计配置补全
|
||||
if (adminConfig.SiteConfig.AnalyticsEnabled === undefined) {
|
||||
adminConfig.SiteConfig.AnalyticsEnabled = false;
|
||||
}
|
||||
if (adminConfig.SiteConfig.AnalyticsProvider === undefined) {
|
||||
adminConfig.SiteConfig.AnalyticsProvider = 'umami';
|
||||
}
|
||||
if (adminConfig.SiteConfig.AnalyticsScriptUrl === undefined) {
|
||||
adminConfig.SiteConfig.AnalyticsScriptUrl = '';
|
||||
}
|
||||
if (adminConfig.SiteConfig.AnalyticsWebsiteId === undefined) {
|
||||
adminConfig.SiteConfig.AnalyticsWebsiteId = '';
|
||||
}
|
||||
if (adminConfig.SiteConfig.AnalyticsCustomScript === undefined) {
|
||||
adminConfig.SiteConfig.AnalyticsCustomScript = '';
|
||||
}
|
||||
if (!adminConfig.TelegramConfig) {
|
||||
adminConfig.TelegramConfig = {
|
||||
enabled: process.env.TELEGRAM_BOT_ENABLED === 'true' || Boolean(process.env.TELEGRAM_BOT_TOKEN),
|
||||
|
||||
Reference in New Issue
Block a user