hy2-panel/app/admin/layout.tsx
2026-05-06 00:10:45 +08:00

43 lines
1.2 KiB
TypeScript

import { requireAdminAccess } from "@/lib/session";
import { AdminNav } from "./admin-nav";
const navItems = [
{ href: "/admin/dashboard", label: "仪表盘" },
{ href: "/admin/users", label: "用户管理" },
{ href: "/admin/nodes", label: "节点管理" },
{ href: "/admin/subscriptions", label: "订阅配置" },
{ href: "/admin/audits", label: "审计日志" },
];
export default async function AdminLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
const session = await requireAdminAccess();
return (
<div className="admin-shell">
<aside className="sidebar">
<div className="brand-block">
<span className="eyebrow">HY2 PANEL</span>
<h1></h1>
<div className="badge-row">
<span className="status-pill status-pill--ink">{session.username}</span>
</div>
</div>
<AdminNav items={navItems} />
<form action="/logout" method="post">
<button className="ghost-button full-width" type="submit">
退
</button>
</form>
</aside>
<div className="content-shell">
<div className="content-frame">{children}</div>
</div>
</div>
);
}