flnxi-Wu/app/layout.tsx
WuYongJie e4dcb6260a
Some checks failed
CI Check / check (push) Has been cancelled
feat: Admin页面重构 & UI三层架构系统
- 创建统一UI三层架构系统(基础层、颜色层、组合层)
- 拆分Admin页面为独立Tab组件(MonitorTab、UsersTab、DepartmentsTab等)
- 提取公共逻辑到Hooks(useToast、useDataFetch、useUserOperations等)
- 提取工具函数(validators、formatters、api等)
- 创建统一弹窗组件(Modal)和useModal Hook
- 添加错误边界和统一状态组件
- 完善类型定义和可访问性支持
- 更新文档(优化记录、优化计划、更新日志)
2025-11-22 15:17:10 +08:00

71 lines
1.8 KiB
TypeScript

import type { Metadata } from 'next'
import './globals.css'
import Providers from './providers'
import { prisma } from '@/lib/prisma'
// 强制动态渲染,避免构建时数据库连接错误
export const dynamic = 'force-dynamic'
async function getSystemSettings() {
try {
// 直接从数据库查询,避免网络请求超时问题
const settings = await prisma.systemSettings.findFirst({
select: {
siteName: true,
}
})
return settings
} catch (error) {
console.error('Failed to fetch system settings:', error)
}
return null
}
export async function generateMetadata(): Promise<Metadata> {
const settings = await getSystemSettings()
return {
title: settings?.siteName || '由壹点3D素材',
description: '3D素材分享平台',
}
}
const themeInitScript = `
(function() {
try {
var storageKey = 'admin-theme-preference';
var classNameDark = 'dark';
var stored = typeof window !== 'undefined' ? window.localStorage.getItem(storageKey) : null;
var prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;
var theme = stored === 'light' || stored === 'dark' ? stored : (prefersDark ? 'dark' : 'light');
var root = document.documentElement;
if (theme === 'dark') {
root.classList.add(classNameDark);
} else {
root.classList.remove(classNameDark);
}
root.dataset.theme = theme;
} catch (error) {
console.warn('初始化主题失败', error);
}
})();
`
export default function RootLayout({
children,
}: {
children: React.ReactNode
}) {
return (
<html lang="zh-CN" suppressHydrationWarning>
<body className="font-sans antialiased">
<script dangerouslySetInnerHTML={{ __html: themeInitScript }} />
<Providers>
{children}
</Providers>
</body>
</html>
)
}