"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 { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination" 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, Eye, Search } from "lucide-react" import Link from "next/link" import { useRouter } from "next/navigation" import { useEffect, useState } from "react" import { fetchWithAuth } from "@/lib/api" interface OrderItem { orderItemId: number bookId: number bookTitle: string quantity: number unitPrice: number } interface Order { orderId: number readerId: number readerName: string orderDate: string totalAmount: number status: string items: OrderItem[] } interface OrdersResponse { pageNum: number pageSize: number total: number data: Order[] } export default function AdminOrdersPage() { const { user } = useAuth() const router = useRouter() const { toast } = useToast() const [orders, setOrders] = useState(null) const [loading, setLoading] = useState(true) const [currentPage, setCurrentPage] = useState(1) const [searchTerm, setSearchTerm] = 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 fetchOrders = async () => { setLoading(true) try { const response = await fetchWithAuth(`orders/admin/all?pageNum=${currentPage}&pageSize=10`) const result = await response.json() if (result.code === 0) { setOrders(result.data) } else { toast({ variant: "destructive", title: "获取订单失败", description: result.msg || "无法获取订单信息", }) } } catch (error) { toast({ variant: "destructive", title: "获取订单失败", description: "服务器连接错误,请稍后再试", }) } finally { setLoading(false) } } fetchOrders() }, [user, router, toast, currentPage]) const handlePageChange = (page: number) => { setCurrentPage(page) } const handleSearch = (e: React.FormEvent) => { e.preventDefault() // 实际项目中应该有搜索订单的API toast({ title: "搜索功能", description: "订单搜索功能尚未实现", }) } if (!user || !user.isAdmin) { return null } return (
图书管理系统 - 管理后台

订单管理

订单列表
setSearchTerm(e.target.value)} />
{loading ? (
加载中...
) : !orders || orders.data.length === 0 ? (

没有找到订单

系统中还没有订单记录

) : ( <>
订单号 用户 下单时间 总金额 状态 操作 {orders.data.map((order) => ( {order.orderId} {order.readerName} {new Date(order.orderDate).toLocaleString()} ¥{order.totalAmount.toFixed(2)} {order.status} ))}
{orders.total > orders.pageSize && ( { e.preventDefault() if (currentPage > 1) handlePageChange(currentPage - 1) }} className={currentPage === 1 ? "pointer-events-none opacity-50" : ""} /> {Array.from({ length: Math.min(5, Math.ceil(orders.total / orders.pageSize)) }).map( (_, index) => { let pageNumber = currentPage - 2 + index if (pageNumber < 1) pageNumber = index + 1 if (pageNumber > Math.ceil(orders.total / orders.pageSize)) pageNumber = Math.ceil(orders.total / orders.pageSize) - (4 - index) return ( { e.preventDefault() handlePageChange(pageNumber) }} isActive={currentPage === pageNumber} > {pageNumber} ) }, )} { e.preventDefault() if (currentPage < Math.ceil(orders.total / orders.pageSize)) { handlePageChange(currentPage + 1) } }} className={ currentPage >= Math.ceil(orders.total / orders.pageSize) ? "pointer-events-none opacity-50" : "" } /> )} )}
) }