/* eslint-disable @typescript-eslint/no-explicit-any */ import type { Metadata, Viewport } from 'next'; import { Inter } from 'next/font/google'; import './globals.css'; import 'sweetalert2/dist/sweetalert2.min.css'; import { getConfig } from '@/lib/config'; import { GlobalErrorIndicator } from '../components/GlobalErrorIndicator'; import { SiteProvider } from '../components/SiteProvider'; import { ThemeProvider } from '../components/ThemeProvider'; const inter = Inter({ subsets: ['latin'] }); // 动态生成 metadata,支持配置更新后的标题变化 export async function generateMetadata(): Promise { let siteName = process.env.NEXT_PUBLIC_SITE_NAME || 'MoonTV'; if (process.env.NEXT_PUBLIC_STORAGE_TYPE !== 'upstash') { const config = await getConfig(); siteName = config.SiteConfig.SiteName; } return { title: siteName, description: '影视聚合', manifest: '/manifest.json', }; } export const viewport: Viewport = { viewportFit: 'cover', }; export default async function RootLayout({ children, }: { children: React.ReactNode; }) { const storageType = process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage'; let siteName = process.env.NEXT_PUBLIC_SITE_NAME || 'MoonTV'; let announcement = process.env.ANNOUNCEMENT || '本网站仅提供影视信息搜索服务,所有内容均来自第三方网站。本站不存储任何视频资源,不对任何内容的准确性、合法性、完整性负责。'; let enableRegister = process.env.NEXT_PUBLIC_ENABLE_REGISTER === 'true'; let doubanProxyType = process.env.NEXT_PUBLIC_DOUBAN_PROXY_TYPE || 'direct'; let doubanProxy = process.env.NEXT_PUBLIC_DOUBAN_PROXY || ''; let doubanImageProxyType = process.env.NEXT_PUBLIC_DOUBAN_IMAGE_PROXY_TYPE || 'direct'; let doubanImageProxy = process.env.NEXT_PUBLIC_DOUBAN_IMAGE_PROXY || ''; let disableYellowFilter = process.env.NEXT_PUBLIC_DISABLE_YELLOW_FILTER === 'true'; if (storageType !== 'upstash' && storageType !== 'localstorage') { const config = await getConfig(); siteName = config.SiteConfig.SiteName; announcement = config.SiteConfig.Announcement; enableRegister = config.UserConfig.AllowRegister; doubanProxyType = config.SiteConfig.DoubanProxyType; doubanProxy = config.SiteConfig.DoubanProxy; doubanImageProxyType = config.SiteConfig.DoubanImageProxyType; doubanImageProxy = config.SiteConfig.DoubanImageProxy; disableYellowFilter = config.SiteConfig.DisableYellowFilter; } // 将运行时配置注入到全局 window 对象,供客户端在运行时读取 const runtimeConfig = { STORAGE_TYPE: process.env.NEXT_PUBLIC_STORAGE_TYPE || 'localstorage', ENABLE_REGISTER: enableRegister, DOUBAN_PROXY_TYPE: doubanProxyType, DOUBAN_PROXY: doubanProxy, DOUBAN_IMAGE_PROXY_TYPE: doubanImageProxyType, DOUBAN_IMAGE_PROXY: doubanImageProxy, DISABLE_YELLOW_FILTER: disableYellowFilter, }; return ( {/* 将配置序列化后直接写入脚本,浏览器端可通过 window.RUNTIME_CONFIG 获取 */} {/* eslint-disable-next-line @next/next/no-sync-scripts */}