"use client" import type React from "react" import { AdminNav } from "@/components/admin-nav" import { ThemeToggle } from "@/components/theme-toggle" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { useToast } from "@/components/ui/use-toast" import { useAuth } from "@/context/auth-context" import { BookOpen, Lock, Search, Shield, ShieldAlert, ShieldCheck, Unlock } from "lucide-react" import { useRouter } from "next/navigation" import { useEffect, useState } from "react" import { fetchWithAuth } from "@/lib/api" interface Reader { readerId: number username: string email: string phone: string isAdmin: boolean isBanned: boolean } export default function AdminUsersPage() { const { user } = useAuth() const router = useRouter() const { toast } = useToast() const [readers, setReaders] = useState([]) const [loading, setLoading] = useState(true) const [searchTerm, setSearchTerm] = useState("") const [filteredReaders, setFilteredReaders] = useState([]) useEffect(() => { // 检查用户是否登录且是管理员 if (!user) { toast({ title: "请先登录", description: "您需要登录后才能访问管理页面", variant: "destructive", }) router.push("/login") return } if (!user.isAdmin) { toast({ title: "权限不足", description: "您没有管理员权限", variant: "destructive", }) router.push("/") return } const fetchReaders = async () => { try { const response = await fetchWithAuth("reader/admin/all") const result = await response.json() if (result.code === 0) { setReaders(result.data) setFilteredReaders(result.data) } else { toast({ variant: "destructive", title: "获取用户失败", description: result.msg || "无法获取用户信息", }) } } catch (error) { toast({ variant: "destructive", title: "获取用户失败", description: "服务器连接错误,请稍后再试", }) } finally { setLoading(false) } } fetchReaders() }, [user, router, toast]) useEffect(() => { if (searchTerm) { const filtered = readers.filter( (reader) => reader.username.toLowerCase().includes(searchTerm.toLowerCase()) || reader.email.toLowerCase().includes(searchTerm.toLowerCase()), ) setFilteredReaders(filtered) } else { setFilteredReaders(readers) } }, [searchTerm, readers]) const handleSearch = (e: React.FormEvent) => { e.preventDefault() } const handleToggleAdmin = async (readerId: number, isAdmin: boolean) => { try { const url = isAdmin ? `reader/admin/${readerId}/remove-admin` : `reader/admin/${readerId}/make-admin` const response = await fetchWithAuth(url, { method: "PUT", }) const result = await response.json() if (result.code === 0) { toast({ title: "操作成功", description: isAdmin ? "已移除管理员权限" : "已设为管理员", }) // 更新本地状态 const updatedReaders = readers.map((reader) => reader.readerId === readerId ? { ...reader, isAdmin: !isAdmin } : reader, ) setReaders(updatedReaders) // 如果有搜索词,也更新过滤后的列表 if (searchTerm) { const updatedFiltered = filteredReaders.map((reader) => reader.readerId === readerId ? { ...reader, isAdmin: !isAdmin } : reader, ) setFilteredReaders(updatedFiltered) } } else { toast({ variant: "destructive", title: "操作失败", description: result.msg || "无法更改用户权限", }) } } catch (error) { toast({ variant: "destructive", title: "操作失败", description: "服务器连接错误,请稍后再试", }) } } const handleToggleBan = async (readerId: number, isBanned: boolean) => { try { const url = isBanned ? `reader/admin/${readerId}/unban` : `reader/admin/${readerId}/ban` const response = await fetchWithAuth(url, { method: "PUT", }) const result = await response.json() if (result.code === 0) { toast({ title: "操作成功", description: isBanned ? "已解除封禁" : "已封禁用户", }) // 更新本地状态 const updatedReaders = readers.map((reader) => reader.readerId === readerId ? { ...reader, isBanned: !isBanned } : reader, ) setReaders(updatedReaders) // 如果有搜索词,也更新过滤后的列表 if (searchTerm) { const updatedFiltered = filteredReaders.map((reader) => reader.readerId === readerId ? { ...reader, isBanned: !isBanned } : reader, ) setFilteredReaders(updatedFiltered) } } else { toast({ variant: "destructive", title: "操作失败", description: result.msg || "无法更改用户状态", }) } } catch (error) { toast({ variant: "destructive", title: "操作失败", description: "服务器连接错误,请稍后再试", }) } } if (!user || !user.isAdmin) { return null } return (
图书管理系统 - 管理后台

用户管理

用户列表
setSearchTerm(e.target.value)} />
{loading ? (
加载中...
) : filteredReaders.length === 0 ? (

没有找到用户

{searchTerm ? "尝试使用不同的搜索词" : "系统中还没有用户"}

) : (
ID 用户名 邮箱 电话 状态 角色 操作 {filteredReaders.map((reader) => ( {reader.readerId} {reader.username} {reader.email} {reader.phone} {reader.isBanned ? ( 已封禁 ) : ( 正常 )} {reader.isAdmin ? ( 管理员 ) : ( 普通用户 )}
))}
)}
) }