52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
'use client'
|
|
|
|
import Link from 'next/link'
|
|
import { useRouter } from 'next/navigation'
|
|
|
|
export default function AdminLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) {
|
|
const router = useRouter()
|
|
|
|
const handleLogout = () => {
|
|
localStorage.removeItem('admin_token')
|
|
router.push('/login')
|
|
}
|
|
|
|
return (
|
|
<div className="min-h-screen bg-gray-100">
|
|
<nav className="bg-white shadow">
|
|
<div className="max-w-7xl mx-auto px-4">
|
|
<div className="flex justify-between h-16">
|
|
<div className="flex items-center space-x-8">
|
|
<span className="text-xl font-bold">管理后台</span>
|
|
<Link href="/admin" className="text-gray-600 hover:text-gray-900">
|
|
概览
|
|
</Link>
|
|
<Link href="/admin/providers" className="text-gray-600 hover:text-gray-900">
|
|
AI 配置
|
|
</Link>
|
|
<Link href="/admin/stats" className="text-gray-600 hover:text-gray-900">
|
|
统计
|
|
</Link>
|
|
</div>
|
|
<div className="flex items-center">
|
|
<button
|
|
onClick={handleLogout}
|
|
className="text-gray-600 hover:text-gray-900"
|
|
>
|
|
退出
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</nav>
|
|
<main className="max-w-7xl mx-auto py-6 px-4">
|
|
{children}
|
|
</main>
|
|
</div>
|
|
)
|
|
}
|