Files
NextEdu/src/app/layout.tsx
SpecialX 4b6cb5f11e feat(app): update dashboard layout and student learning error boundaries
- Update src/app/layout.tsx

- Update student/learning/study-path/error.tsx
2026-07-04 10:23:43 +08:00

77 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { Metadata, Viewport } from "next";
import { Inter } from "next/font/google";
import { NextIntlClientProvider } from "next-intl";
import { getLocale, getMessages } from "next-intl/server";
import { ThemeProvider } from "@/shared/components/theme-provider";
import { Toaster } from "@/shared/components/ui/sonner";
import { NuqsAdapter } from "nuqs/adapters/next/app";
import { AuthSessionProvider } from "@/shared/components/auth-session-provider";
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: [
{ media: "(prefers-color-scheme: light)", color: "#ffffff" },
{ media: "(prefers-color-scheme: dark)", color: "#0a0a0a" },
],
};
export default async function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
// v3 i18n从 cookie 读取 localegetRequestConfig 已配置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 (
<html lang={locale} suppressHydrationWarning>
<body
className={`${inter.variable} antialiased font-sans`}
suppressHydrationWarning
>
<NextIntlClientProvider locale={locale} messages={messages}>
<ThemeProvider
attribute="class"
defaultTheme="system"
enableSystem
disableTransitionOnChange
>
<AuthSessionProvider session={session}>
<NuqsAdapter>{children}</NuqsAdapter>
</AuthSessionProvider>
<Toaster />
</ThemeProvider>
</NextIntlClientProvider>
</body>
</html>
);
}