"use client" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { listOrders } from "@/lib/api" import { statusLabels } from "@/lib/constants" import { isActiveOrder, isCompletedOrder, isDisputedOrder } from "@/lib/domain/order-filters" import { toApiError } from "@/lib/errors" import { useMyShop } from "@/lib/hooks/use-my-shop" import { notifyInfo } from "@/lib/toast" import { AlertCircle, CheckCircle, Clock, ListOrdered } from "lucide-react" import Link from "next/link" import { useEffect, useMemo, useState } from "react" export default function ShopOrdersPage() { const { shop, loading, error } = useMyShop() const [orders, setOrders] = useState>>([]) const [ordersLoading, setOrdersLoading] = useState(true) useEffect(() => { if (!shop) return let cancelled = false listOrders({ role: "owner" }) .then((items) => { if (cancelled) return setOrders(items) }) .catch((error) => { if (cancelled) return notifyInfo(toApiError(error).msg) }) .finally(() => { if (cancelled) return setOrdersLoading(false) }) return () => { cancelled = true } }, [shop]) const shopOrders = useMemo( () => (shop ? orders.filter((order) => order.shopId === shop.id) : []), [orders, shop], ) if (loading) { return
加载中...
} if (error) { return
{error}
} if (!shop) { return
当前账号没有可管理的店铺
} const totalOrders = shopOrders.length const activeOrders = shopOrders.filter((o) => isActiveOrder(o.status)).length const completedOrders = shopOrders.filter((o) => isCompletedOrder(o.status)).length const disputedOrders = shopOrders.filter((o) => isDisputedOrder(o.status)).length return (

订单总览

总订单
{totalOrders}
进行中
{activeOrders}
已完成
{completedOrders}
争议订单
{disputedOrders}
订单列表 服务名称 客户 打手 状态 金额 创建时间 操作 {ordersLoading ? ( 加载中... ) : shopOrders.length === 0 ? ( 暂无订单 ) : ( shopOrders.map((order) => ( {order.service.title} {order.consumerId} {order.playerId} {statusLabels[order.status]} ¥{order.totalPrice} {new Date(order.createdAt).toLocaleDateString()} )) )}
) }