{children}
diff --git a/src/components/auth/auth-state-sync.tsx b/src/components/auth/auth-state-sync.tsx
deleted file mode 100644
index 04f7a54..0000000
--- a/src/components/auth/auth-state-sync.tsx
+++ /dev/null
@@ -1,20 +0,0 @@
-"use client";
-
-import { useEffect } from "react";
-import { usePathname, useRouter } from "next/navigation";
-import { useSession } from "next-auth/react";
-
-export function AuthStateSync() {
- const { data: session, status, update } = useSession();
- const router = useRouter();
- const pathname = usePathname();
-
- useEffect(() => {
- // 当状态从"loading"变为"authenticated"时,强制刷新路由
- if (status === "authenticated" && session?.user) {
- router.refresh();
- }
- }, [status, session]);
-
- return null;
-}
diff --git a/src/components/layout/header-client.tsx b/src/components/layout/header-client.tsx
new file mode 100644
index 0000000..a05ddab
--- /dev/null
+++ b/src/components/layout/header-client.tsx
@@ -0,0 +1,191 @@
+"use client";
+
+import { useEffect, useState } from "react";
+import Link from "next/link";
+import { usePathname, useRouter } from "next/navigation";
+import { ChevronDown, User } from "lucide-react";
+import { signOut } from "next-auth/react";
+
+import { cn } from "@/lib/utils";
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
+import { Button } from "@/components/ui/button";
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu";
+
+import { ThemeToggle } from "../theme-toggle";
+
+interface HeaderClientProps {
+ initialUser: any;
+}
+
+export function HeaderClient({ initialUser }: HeaderClientProps) {
+ const [user, setUser] = useState(initialUser);
+ const router = useRouter();
+ const pathname = usePathname();
+
+ const handleSignOut = async () => {
+ await signOut({ redirect: false });
+ setUser(null);
+ router.refresh();
+ router.push("/");
+ };
+
+ const renderNavLinks = () => {
+ if (!user) return null;
+
+ return (
+
+
+ );
+}
+
+ 控制台
+
+
+ 应用管理
+
+
+ 设置
+
+ {user.role === "ADMIN" && (
+ <>
+
+
+ 管理后台
+
+
+
+
+
+
+
+
+ 用户列表
+
+
+
+
+ 应用管理
+
+
+
+
+ 授权管理
+
+
+
+
+ 系统日志
+
+
+
+
+ >
+ )}
+
+ );
+ };
+
+ return (
+
+ {renderNavLinks()}
+
+ {user ? (
+
+ );
+}
diff --git a/src/components/layout/header.tsx b/src/components/layout/header.tsx
new file mode 100644
index 0000000..b9b9397
--- /dev/null
+++ b/src/components/layout/header.tsx
@@ -0,0 +1,26 @@
+import Link from "next/link";
+
+import { getCurrentUser } from "@/lib/session";
+import { HeaderClient } from "@/components/layout/header-client";
+
+export async function Header() {
+ const user = await getCurrentUser();
+
+ return (
+
+
+
+
+ {user.name?.charAt(0) || user.username?.charAt(0)}
+
+
+
+
+ ) : (
+
+ )}
+
+
+
+
+
+
+
+
+
+