"use client" import { Clock, MessageSquare, RefreshCw } from "lucide-react" import Link from "next/link" import { useState } from "react" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { statusLabels } from "@/lib/constants" import { isActiveOrder, isCompletedOrder, isDisputedOrder, isPendingDispatch, } from "@/lib/domain/order-filters" import { resolveOwnerShop } from "@/lib/domain/resolve-current-shop" import type { OrderStatus, UserRole } from "@/lib/types" import { cn } from "@/lib/utils" import { useAuthStore } from "@/store/auth" import { useChatStore } from "@/store/chat" import { useOrderStore } from "@/store/orders" import { useShopStore } from "@/store/shops" const statusColors: Record = { pending_payment: "bg-yellow-100 text-yellow-800", pending_accept: "bg-blue-100 text-blue-800", in_progress: "bg-green-100 text-green-800", pending_close: "bg-orange-100 text-orange-800", pending_review: "bg-purple-100 text-purple-800", disputed: "bg-red-100 text-red-800", completed: "bg-gray-100 text-gray-800", cancelled: "bg-gray-100 text-gray-500", } type TabFilter = "all" | "active" | "completed" | "disputed" const consumerTabs = [ { value: "all", label: "全部" }, { value: "active", label: "进行中" }, { value: "completed", label: "已完成" }, { value: "disputed", label: "争议" }, ] const playerTabs = [ { value: "all", label: "全部" }, { value: "pending", label: "待接单" }, { value: "active", label: "进行中" }, { value: "completed", label: "已完成" }, ] const ownerTabs = [ { value: "all", label: "全部" }, { value: "pending", label: "待派单" }, { value: "active", label: "进行中" }, { value: "completed", label: "已完成" }, { value: "disputed", label: "争议" }, ] export default function OrderListPage() { const { currentRole, user } = useAuthStore() const shops = useShopStore((state) => state.shops) const ownerShop = resolveOwnerShop(user?.id, shops) return ( ) } function OrderListContent({ currentRole, userId, ownerShopId, }: { currentRole: UserRole userId?: string ownerShopId?: string }) { const [tab, setTab] = useState("all") const orders = useOrderStore((state) => state.orders) const sessions = useChatStore((state) => state.sessions) const tabs = currentRole === "consumer" ? consumerTabs : currentRole === "player" ? playerTabs : ownerTabs const roleFiltered = orders.filter((order) => { if (currentRole === "consumer") return userId ? order.consumerId === userId : false if (currentRole === "player") return userId ? order.playerId === userId : false return ownerShopId ? order.shopId === ownerShopId : false }) const filtered = roleFiltered.filter((order) => { if (tab === "pending") return isPendingDispatch(order.status) if (tab === "active") return isActiveOrder(order.status) if (tab === "completed") return isCompletedOrder(order.status, { includeCancelled: true }) if (tab === "disputed") return isDisputedOrder(order.status) return true }) return (

我的订单

{currentRole === "consumer" ? "客户视角" : currentRole === "player" ? "打手视角" : "店主视角"}
setTab(v as TabFilter | "pending")}> {tabs.map((item) => ( {item.label} ))} {filtered.length === 0 ? ( 暂无订单 ) : ( filtered.map((order) => (
{order.service.title} {statusLabels[order.status]}

{currentRole === "consumer" ? `打手: ${order.playerName}` : currentRole === "player" ? `客户: ${order.consumerName}` : `客户: ${order.consumerName} · 打手: ${order.playerName}`}

¥{order.totalPrice} {new Date(order.createdAt).toLocaleDateString("zh-CN")}
{(() => { if (order.status !== "in_progress" && order.status !== "pending_close") return null const session = sessions.find( (item) => item.type === "order" && item.orderId === order.id, ) if (!session) return null return ( ) })()} {order.status === "completed" && ( )}
)) )}
) }