import { useState } from 'react' import { keepPreviousData, useQuery } from '@tanstack/react-query' import { Alert, Button, Card, Select, Space, Table, Tag, Typography, type TableColumnsType, } from 'antd' import { ReloadOutlined, RightOutlined } from '@ant-design/icons' import { Link, useNavigate } from 'react-router-dom' import { BrandLogo } from '@/components/BrandLogo' import { fetchMyOrders } from '@/features/orders/api' import { handoffStatusMeta, orderStatusMeta, roleLabel } from '@/features/orders/labels' import type { UserOrderListItem } from '@/features/orders/types' import { useSessionStore } from '@/stores/session' import { formatDateTime, formatMoney, formatText } from '@/shared/utils/format' const PAGE_SIZE = 20 const statusOptions = [ 'pending_payment', 'pending_handoff', 'renting', 'overdue', 'pending_checkout_confirm', 'pending_checkout_accept', 'checkout_disputing', 'disputing', 'completed', 'cancelled', 'closed', 'abnormal', ].map(value => ({ value, label: orderStatusMeta(value).label })) function buildColumns(navigate: (id: number) => void): TableColumnsType { return [ { title: '订单', dataIndex: 'order_no', width: 300, fixed: 'left', render: (_, row) => (
{row.title} {roleLabel(row.role)} {row.listing_no}
), }, { title: '商品', key: 'listing', width: 220, render: (_, row) => (
{formatText(row.server_region)} {formatText(row.login_platform)} {row.rental_days ? `${row.rental_days} 天` : '按账号规则'}
), }, { title: '金额', key: 'amount', width: 180, align: 'right', render: (_, row) => (
{formatMoney(row.display_amount_cent)} 押金 {formatMoney(row.deposit_amount_cent)} {row.deposit_waived_amount_cent > 0 ? ( 减免 {formatMoney(row.deposit_waived_amount_cent)} ) : null}
), }, { title: '状态', key: 'status', width: 190, render: (_, row) => ( {orderStatusMeta(row.status).label} {handoffStatusMeta(row.handoff_status).label} ), }, { title: '时间', key: 'time', width: 190, render: (_, row) => (
下单 {formatDateTime(row.created_at)} 支付截止 {formatDateTime(row.payment_deadline_at)}
), }, { title: '', key: 'actions', width: 90, fixed: 'right', render: (_, row) => ( ), }, ] } export function OrderListPage() { const navigate = useNavigate() const token = useSessionStore(state => state.token) const hydrated = useSessionStore(state => state.hydrated) const [status, setStatus] = useState('') const [page, setPage] = useState(1) const { data, isPending, isFetching, isError, error, refetch } = useQuery({ queryKey: ['pc-my-orders', status, page], queryFn: () => fetchMyOrders(page, PAGE_SIZE, status), placeholderData: keepPreviousData, enabled: Boolean(token), }) const columns = buildColumns(id => navigate(`/orders/${id}`)) const errorText = error instanceof Error ? error.message : '请稍后重试或重新登录。' if (!hydrated) { return (
) } if (!token) { return (
登录后查看我的订单 订单、押金、交接与结账记录只对交易双方可见。
) } return (
MY ORDERS 我的订单 查看租用进度、支付、交接、结账与申诉记录。