"use client" import { Clock, MessageSquare, RefreshCw } from "lucide-react" import Link from "next/link" import { useEffect, 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 type { OrderStatus } from "@/lib/types" import { cn } from "@/lib/utils" import { useAuthStore } from "@/store/auth" import { useChatStore } from "@/store/chat" import { useOrderStore } from "@/store/orders" 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 [tab, setTab] = useState("all") const { currentRole, user } = useAuthStore() const orders = useOrderStore((state) => state.orders) const sessions = useChatStore((state) => state.sessions) const ensureOrderSession = useChatStore((state) => state.ensureOrderSession) const userId = user?.id ?? "u1" const ownerShopId = "shop1" useEffect(() => { if (!currentRole) return setTab("all") }, [currentRole]) const tabs = currentRole === "consumer" ? consumerTabs : currentRole === "player" ? playerTabs : ownerTabs useEffect(() => { orders.forEach((order) => { if (order.status === "pending_payment" || order.status === "cancelled") return ensureOrderSession(order) }) }, [orders, ensureOrderSession]) const roleFiltered = orders.filter((order) => { if (currentRole === "consumer") return order.consumerId === userId if (currentRole === "player") return order.playerId === userId return order.shopId === ownerShopId }) const filtered = roleFiltered.filter((order) => { if (tab === "pending") return order.status === "pending_accept" if (tab === "active") { return [ "pending_payment", "pending_accept", "in_progress", "pending_close", "pending_review", ].includes(order.status) } if (tab === "completed") return order.status === "completed" || order.status === "cancelled" if (tab === "disputed") return order.status === "disputed" 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" && ( )}
)) )}
) }