From 4917bb4f239db8f56ba427154332fe107383b41e Mon Sep 17 00:00:00 2001 From: fly6516 Date: Sun, 15 Jun 2025 16:24:32 +0800 Subject: [PATCH] fix(admin): fix error in sidebar.tsx MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了未使用的组件导入和图标映射 - 添加了用户头像动态加载功能- 使用 PrismaClient 查询用户信息 - 优化了代码结构,提高了代码可读性和性能 --- src/components/admin/sidebar.tsx | 53 ++++++++++++++++---------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/src/components/admin/sidebar.tsx b/src/components/admin/sidebar.tsx index 03d8e37..e3f1db1 100644 --- a/src/components/admin/sidebar.tsx +++ b/src/components/admin/sidebar.tsx @@ -4,27 +4,19 @@ import { Sidebar, SidebarContent, SidebarFooter, - SidebarHeader, SidebarRail, } from "@/components/ui/sidebar"; import { NavMain } from "@/components/nav-main"; import { NavProjects } from "@/components/nav-projects"; -import { TeamSwitcher } from "@/components/team-switcher"; import { NavUser } from "@/components/nav-user"; import { - AudioWaveform, - Bot, Command, - Frame, - GalleryVerticalEnd, - Map, PieChart, Settings2, - SquareTerminal, } from "lucide-react"; -import { SessionProvider } from "next-auth/react"; -import { SidebarProvider } from "@/components/ui/sidebar"; +import { useEffect, useState } from "react"; +import { PrismaClient } from "@prisma/client"; // 如果 adminData.teams 没有在别处定义,请取消注释下面的代码并提供实际值 /* @@ -33,22 +25,6 @@ const teams = [ ]; */ -// 创建图标映射 -type LucideIconMap = { - [key: string]: typeof AudioWaveform; -}; - -const lucideIconMap: LucideIconMap = { - AudioWaveform, - Bot, - Command, - Frame, - GalleryVerticalEnd, - Map, - PieChart, - Settings2, - SquareTerminal, -}; const adminData = { // teams: [ @@ -95,10 +71,33 @@ const adminData = { export const AdminSidebar = ({ ...props }: React.ComponentProps) => { const { data: session } = useSession(); + const [userAvatar, setUserAvatar] = useState(""); + + useEffect(() => { + const fetchUserAvatar = async () => { + if (session?.user?.email) { + const prisma = new PrismaClient(); + try { + const user = await prisma.user.findUnique({ + where: { email: session.user.email }, + select: { image: true } + }); + setUserAvatar(user?.image || ""); + } catch (error) { + console.error("Failed to fetch user avatar:", error); + } finally { + await prisma.$disconnect(); + } + } + }; + + fetchUserAvatar(); + }, [session?.user?.email]); + const user = { name: session?.user?.name || "Admin", email: session?.user?.email || "admin@example.com", - avatar: session?.user?.avatar || "" + avatar: userAvatar }; return (