import { useEffect, useState } from 'react'; import { View, Text, ScrollView } from '@tarojs/components'; import Taro, { useDidShow } from '@tarojs/taro'; import HqHeader from '../../components/HqHeader'; import { request, type Paginated } from '../../lib/api'; import { useHqSession } from '../../lib/session'; import { ORDER_STATUS_LABELS, badgeClass, fmtMoney, fmtTime } from '../../lib/constants'; type OrderRow = { id: string; orderNo: string; status: string; deliveryType?: string; payAmount: number | string; receiverName?: string; receiverPhone?: string; createdAt: string; }; const TABS = [ { key: '', label: '全部' }, { key: 'PENDING_PAY', label: '待付款' }, { key: 'PENDING_SHIP', label: '待发货' }, { key: 'SHIPPING', label: '配送中' }, { key: 'COMPLETED', label: '已完成' }, { key: 'REFUNDING', label: '退款中' }, ]; export default function OrdersPage() { useHqSession(); const [status, setStatus] = useState(''); const [rows, setRows] = useState([]); const [total, setTotal] = useState(0); const [loading, setLoading] = useState(true); function load() { setLoading(true); const qs = new URLSearchParams({ pageSize: '50' }); if (status) qs.set('status', status); request>(`/admin/orders?${qs.toString()}`) .then((d) => { setRows(d.items); setTotal(d.total); }) .catch(() => setRows([])) .finally(() => setLoading(false)); } useEffect(load, [status]); useDidShow(load); return ( {TABS.map((t) => ( setStatus(t.key)} > {t.label} ))} 订单列表 共 {total} 单 {loading && 加载中…} {!loading && rows.length === 0 && 暂无订单} {rows.map((o) => ( Taro.navigateTo({ url: `/pages/orders/detail?id=${o.id}` })} > {o.orderNo} {ORDER_STATUS_LABELS[o.status] || o.status} {o.receiverName || '—'} · {o.receiverPhone || ''} ¥{fmtMoney(o.payAmount)} {fmtTime(o.createdAt)} ))} ); }