import { useEffect, useMemo, useState } from 'react'; import { Link, useNavigate } from 'react-router-dom'; import PageHeader from '@dukang/shared-ui/PageHeader'; import { isLoggedIn, request } from '../lib/api'; type DateFilter = 'today' | '7d' | '30d'; type StatusFilter = 'ALL' | 'PENDING_SHIP' | 'SHIPPING' | 'COMPLETED' | 'ABNORMAL'; function orderStatusLabel(status: string) { const s = String(status).toUpperCase(); if (s.includes('SHIP') || s === 'OUT_WAREHOUSE') return { label: '运输中', color: 'var(--color-status-blue)' }; if (s === 'COMPLETED') return { label: '已完成', color: 'var(--color-success-green)' }; if (s.includes('PENDING') || s === 'PAID') return { label: '待发货', color: 'var(--color-secondary)' }; if (s.includes('ERROR') || s.includes('ABNORMAL')) return { label: '异常', color: 'var(--color-error)' }; return { label: status, color: 'var(--color-subtle-gray)' }; } const DATE_FILTERS: { key: DateFilter; label: string }[] = [ { key: 'today', label: '今日' }, { key: '7d', label: '近7天' }, { key: '30d', label: '近30天' }, ]; const STATUS_FILTERS: { key: StatusFilter; label: string }[] = [ { key: 'ALL', label: '全部' }, { key: 'PENDING_SHIP', label: '待发货' }, { key: 'SHIPPING', label: '运输中' }, { key: 'COMPLETED', label: '已完成' }, { key: 'ABNORMAL', label: '异常' }, ]; type OrderListPageProps = { /** Tab 根页:无返回顶栏 */ tabRoot?: boolean; }; export default function OrderListPage({ tabRoot = false }: OrderListPageProps) { const navigate = useNavigate(); const [data, setData] = useState<{ list: Array> }>({ list: [] }); const [tab, setTab] = useState<'orders' | 'coupons'>('orders'); const [dateFilter, setDateFilter] = useState('today'); const [statusFilter, setStatusFilter] = useState('ALL'); const [shippingId, setShippingId] = useState(null); const [shipForm, setShipForm] = useState({ logisticsCompany: '', trackingNo: '', manualQueryUrl: '' }); const [shipModalId, setShipModalId] = useState(null); useEffect(() => { document.title = '订单管理'; }, []); useEffect(() => { if (!isLoggedIn()) { navigate('/login'); return; } request<{ list: Array> }>('PARTNER_H5', '/partner/orders').then(setData); }, [navigate]); const filtered = useMemo(() => data.list.filter((o) => { if (statusFilter === 'ALL') return true; const s = String(o.status).toUpperCase(); if (statusFilter === 'PENDING_SHIP') return s.includes('PENDING') || s === 'PAID'; if (statusFilter === 'SHIPPING') return s.includes('SHIP') || s === 'OUT_WAREHOUSE'; if (statusFilter === 'COMPLETED') return s === 'COMPLETED'; if (statusFilter === 'ABNORMAL') return s.includes('ERROR') || s.includes('ABNORMAL'); return true; }), [data.list, statusFilter]); async function handleShip(orderId: string, e: React.MouseEvent) { e.preventDefault(); e.stopPropagation(); setShipModalId(orderId); setShipForm({ logisticsCompany: '', trackingNo: '', manualQueryUrl: '' }); } async function submitManualShip() { if (!shipModalId) return; if (!shipForm.logisticsCompany.trim() || !shipForm.trackingNo.trim()) { window.alert('请填写快递公司和运单号'); return; } setShippingId(shipModalId); try { await request('PARTNER_H5', `/partner/orders/${shipModalId}/manual-ship`, { method: 'POST', body: JSON.stringify(shipForm), }); setShipModalId(null); const next = await request<{ list: Array> }>('PARTNER_H5', '/partner/orders'); setData(next); } catch (err) { window.alert(err instanceof Error ? err.message : '发货失败'); } finally { setShippingId(null); } } function canShip(status: string) { const s = status.toUpperCase(); return s.includes('PENDING') || s === 'PAID' || s === 'PENDING_SHIP'; } return (
{!tabRoot && navigate('/')} />}
{!tabRoot && ( )}
{tab === 'orders' && ( <>
{DATE_FILTERS.map((f) => ( ))}
{STATUS_FILTERS.map((f) => ( ))}
{filtered.length === 0 &&
暂无订单
} {filtered.map((o) => { const st = orderStatusLabel(String(o.status)); const payAmount = Number(o.payAmount || 0); const orderId = String(o.id); return (
NO. {String(o.orderNo)} {st.label}
liquor

{String(o.productName || '杜康好酒')}

¥{payAmount.toFixed(2)}

location_on

{String(o.receiverAddress || '收货地址')}

{canShip(String(o.status)) && !(o.delivery as { trackingNo?: string } | undefined)?.trackingNo && ( )}
); })} )} {tab === 'coupons' && !tabRoot && (

累计已发放权益金额

42,800.00

权益记录 preV1 占位

)} {shipModalId && (
setShipModalId(null)}>
e.stopPropagation()}>

填写运单

)}
); }