import type { Metadata, Viewport } from "next"; import { Inter } from "next/font/google"; import { getLocale, getMessages } from "next-intl/server"; import { Providers } from "./providers"; import { auth } from "@/auth"; import "./globals.css"; const inter = Inter({ subsets: ["latin"], display: "swap", variable: "--font-inter", }); export const metadata: Metadata = { title: "Next_Edu - K12 智慧教务系统", description: "Enterprise Grade K12 Education Management System", manifest: "/manifest.webmanifest", appleWebApp: { capable: true, statusBarStyle: "default", title: "Next_Edu", }, }; export const viewport: Viewport = { width: "device-width", initialScale: 1, maximumScale: 5, userScalable: true, themeColor: [ // eslint-disable-next-line no-restricted-syntax -- Next.js metadata requires literal hex { media: "(prefers-color-scheme: light)", color: "#ffffff" }, // eslint-disable-next-line no-restricted-syntax -- Next.js metadata requires literal hex { media: "(prefers-color-scheme: dark)", color: "#0a0a0a" }, ], }; export default async function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { // v3 i18n:从 cookie 读取 locale(getRequestConfig 已配置),SSR 注入字典 const locale = await getLocale(); const messages = await getMessages(); // v3: SSR 期间获取 session,传给 AuthSessionProvider, // 避免 next-auth useSession 在 SSR/CSR 之间返回不同 status 导致 hydration mismatch。 const session = await auth(); return (