import { useEffect, useState } from 'react'; import { useNavigate, useSearchParams } from 'react-router-dom'; import { INVOICE_KIND_LABELS, INVOICE_TITLE_TYPE_LABELS, type InvoiceKind, type InvoiceTitleType, } from '@dukang/shared-types'; import SubPageHeader from '../components/SubPageHeader'; import { request } from '../lib/api'; type OrderRow = { id: string; orderNo: string; payAmount: number | string; productName?: string }; export default function InvoiceApplyPage() { const navigate = useNavigate(); const [params] = useSearchParams(); const presetOrderId = params.get('orderId') || ''; const [orders, setOrders] = useState([]); const [orderId, setOrderId] = useState(presetOrderId); const [titleType, setTitleType] = useState('PERSONAL'); const [invoiceKind, setInvoiceKind] = useState('NORMAL'); const [titleName, setTitleName] = useState(''); const [taxNo, setTaxNo] = useState(''); const [addressPhone, setAddressPhone] = useState(''); const [bankAccount, setBankAccount] = useState(''); const [email, setEmail] = useState(''); const [phone, setPhone] = useState(''); const [submitting, setSubmitting] = useState(false); useEffect(() => { request<{ list?: OrderRow[] }>('USER_H5', '/trade/orders?tab=completed&pageSize=50') .then((res) => setOrders(res.list ?? [])) .catch(() => setOrders([])); }, []); useEffect(() => { if (invoiceKind === 'SPECIAL') setTitleType('ENTERPRISE'); }, [invoiceKind]); async function submit() { if (!orderId) { window.alert('请选择订单'); return; } if (!titleName.trim() || !email.trim() || !phone.trim()) { window.alert('请填写抬头名称、邮箱与手机号'); return; } setSubmitting(true); try { await request('USER_H5', `/trade/orders/${orderId}/invoices`, { method: 'POST', body: JSON.stringify({ titleType, invoiceKind, titleName: titleName.trim(), taxNo: taxNo.trim() || undefined, addressPhone: addressPhone.trim() || undefined, bankAccount: bankAccount.trim() || undefined, email: email.trim(), phone: phone.trim(), }), }); window.alert('发票申请已提交,总部将在 2 个工作日内开具'); navigate('/invoices'); } catch (e) { window.alert(e instanceof Error ? e.message : '申请失败'); } finally { setSubmitting(false); } } return (
navigate(-1)} />
{orders.length === 0 ? (

暂无已完成订单

) : ( orders.map((o) => ( )) )}
{(Object.keys(INVOICE_KIND_LABELS) as InvoiceKind[]).map((k) => ( ))}
{(Object.keys(INVOICE_TITLE_TYPE_LABELS) as InvoiceTitleType[]).map((t) => ( ))}
setTitleName(e.target.value)} placeholder="个人姓名或公司全称" /> {(titleType === 'ENTERPRISE' || invoiceKind === 'SPECIAL') && ( <> setTaxNo(e.target.value)} placeholder="纳税人识别号" /> )} {invoiceKind === 'SPECIAL' && ( <> setAddressPhone(e.target.value)} /> setBankAccount(e.target.value)} /> )} setEmail(e.target.value)} /> setPhone(e.target.value)} />
); }