"use client"; import * as React from "react"; import Link from "next/link"; import { usePathname, useRouter } from "next/navigation"; import { LayoutDashboard, Users, Settings, ChevronRight, LogOut, ChevronsUpDown, CloudUpload, } from "lucide-react"; import { Sidebar, SidebarContent, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarMenu, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarFooter, SidebarRail, } from "@/components/ui/sidebar"; import { Collapsible, CollapsibleContent, CollapsibleTrigger, } from "@/components/ui/collapsible"; import { Avatar, AvatarFallback, AvatarImage, } from "@/components/ui/avatar"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { authClient } from "@/lib/auth-client"; type NavItem = { title: string; url: string; icon: React.ComponentType<{ className?: string }>; items?: { title: string; url: string }[]; }; const navData: NavItem[] = [ { title: "仪表盘", url: "/admin", icon: LayoutDashboard }, { title: "用户管理", url: "/admin/users", icon: Users, items: [ { title: "用户列表", url: "/admin/users" }, { title: "角色管理", url: "/admin/users/roles" }, ], }, { title: "文件管理", url: "/admin/uploads", icon: CloudUpload }, { title: "设置", url: "/admin/settings", icon: Settings }, ]; type SidebarUser = { name: string; email: string; image?: string | null; }; export function AppSidebar({ user, ...props }: React.ComponentProps & { user?: SidebarUser }) { const pathname = usePathname(); const router = useRouter(); const isActive = (url: string) => url === "/admin" ? pathname === url : pathname.startsWith(url); return ( } >
DX
鼎星管理后台 Admin Console
管理 {navData.map((item) => item.items ? ( isActive(sub.url))} className="group/collapsible [&[data-open]>li>button>svg:last-child]:rotate-90" > } > {item.title} {item.items.map((sub) => ( } isActive={isActive(sub.url)} > {sub.title} ))} ) : ( } > {item.title} ) )} } > {user?.name?.charAt(0) ?? "U"}
{user?.name ?? "用户"} {user?.email}
{user?.name ?? "用户"} {user?.email}
{ await authClient.signOut(); router.push("/login"); router.refresh(); }} > 退出登录
); }