"use client" import { MainNav } from "@/components/main-nav" import { SearchBar } from "@/components/search-bar" import { ThemeToggle } from "@/components/theme-toggle" import { UserNav } from "@/components/user-nav" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Separator } from "@/components/ui/separator" import { useToast } from "@/components/ui/use-toast" import { useAuth } from "@/context/auth-context" import { CheckCircle, Package } from "lucide-react" import { useRouter } from "next/navigation" import { useEffect, useState, use } 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[] } export default function OrderDetailPage({ params }: { params: Promise<{ id: string }> | { id: string } }) { // 使用 React.use() 解包 params const resolvedParams = "then" in params ? use(params) : params const orderId = resolvedParams.id const [order, setOrder] = useState(null) const [loading, setLoading] = useState(true) const { toast } = useToast() const router = useRouter() const { user } = useAuth() useEffect(() => { if (!user) { toast({ title: "请先登录", description: "您需要登录后才能查看订单", variant: "destructive", }) router.push("/login") return } const fetchOrder = async () => { try { const response = await fetchWithAuth(`orders/${orderId}`) const result = await response.json() if (result.code === 0) { setOrder(result.data) } else { toast({ variant: "destructive", title: "获取订单失败", description: result.msg || "无法获取订单信息", }) } } catch (error) { toast({ variant: "destructive", title: "获取订单失败", description: "服务器连接错误,请稍后再试", }) } finally { setLoading(false) } } fetchOrder() }, [orderId, toast, router, user]) if (loading) { return (
加载中...
) } if (!order) { return (
订单不存在
) } return (

订单详情

订单状态
{order.status}
订单商品
{order.items.map((item) => (

{item.bookTitle}

单价: ¥{item.unitPrice.toFixed(2)} × {item.quantity}

¥{(item.unitPrice * item.quantity).toFixed(2)}
))}
订单信息
订单号 {order.orderId}
下单时间 {new Date(order.orderDate).toLocaleString()}
用户名 {order.readerName}
商品总额 ¥{order.totalAmount.toFixed(2)}
运费 免费
实付款 ¥{order.totalAmount.toFixed(2)}
) }