"use client" import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar" import { Button } from "@/components/ui/button" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Separator } from "@/components/ui/separator" import { Textarea } from "@/components/ui/textarea" import { getPlayerById, getServiceById } from "@/lib/api" import { createPaidOrder } from "@/lib/api/orders" import { notifySuccess } from "@/lib/toast" import type { Player, PlayerService } from "@/lib/types" import { useRequireAuth } from "@/lib/use-require-auth" import { useWalletStore } from "@/store/wallet" import { ArrowLeft, CheckCircle, CreditCard, ShieldCheck } from "lucide-react" import Link from "next/link" import { useRouter, useSearchParams } from "next/navigation" import { useEffect, useState } from "react" export default function NewOrderPage() { const router = useRouter() const searchParams = useSearchParams() const { requireAuth } = useRequireAuth() const balance = useWalletStore((state) => state.balance) const serviceId = searchParams.get("serviceId") const [service, setService] = useState(null) const [player, setPlayer] = useState(null) const [loading, setLoading] = useState(true) useEffect(() => { let cancelled = false const load = async () => { setLoading(true) if (!serviceId) { setService(null) setPlayer(null) setLoading(false) return } try { const s = await getServiceById(serviceId) if (cancelled) return if (!s) { setService(null) setPlayer(null) setLoading(false) return } setService(s) const p = await getPlayerById(s.playerId) if (cancelled) return setPlayer(p ?? null) setLoading(false) } catch { if (cancelled) return setService(null) setPlayer(null) setLoading(false) } } void load() return () => { cancelled = true } }, [serviceId]) const [quantity, setQuantity] = useState(1) const [note, setNote] = useState("") const [submitted, setSubmitted] = useState(false) if (loading) { return (
加载中...
) } if (!service || !player) { return (
服务不存在
) } const totalPrice = service.price * quantity if (submitted) { return (

下单成功

订单已创建,等待打手接单。你可以在订单列表中查看进度。

) } return (
返回打手主页

确认下单

服务信息
{player.user.nickname[0]}

{player.user.nickname}

{player.shopName ? `${player.shopName} · ` : ""} {service.gameName}

服务 {service.title}
单价 ¥{service.price}/{service.unit}
{service.rankRange && (
段位范围 {service.rankRange}
)}
订单信息
setQuantity(Math.max(1, Number.parseInt(e.target.value, 10) || 1))} />