import { SearchOutlined } from '@ant-design/icons' import { App, Button, Card, Form, Input, Radio, Result, Space, Typography } from 'antd' import { useState } from 'react' import ImageUpload from '@/components/files/ImageUpload' import { lookupCollectOrder, submitCollectOrder } from '@/services/worker' import type { CollectLookupOrder, UploadedFile } from '@/types/worker-platform' export default function CollectPage() { const { message } = App.useApp() const [orderNo, setOrderNo] = useState('') const [lookupOrders, setLookupOrders] = useState([]) const [lookupLoading, setLookupLoading] = useState(false) const [submittingWorkOrderId, setSubmittingWorkOrderId] = useState(0) const [screenshotsByOrder, setScreenshotsByOrder] = useState>({}) const [complete, setComplete] = useState(false) async function submitLookup(values: { orderNo: string }) { setLookupLoading(true) setComplete(false) try { const nextOrderNo = String(values.orderNo || '').trim() setOrderNo(nextOrderNo) await refreshLookupOrders(nextOrderNo) } catch (error) { setLookupOrders([]) message.error(error instanceof Error ? error.message : '查询失败') } finally { setLookupLoading(false) } } async function submitMaterial(order: CollectLookupOrder, values: Record) { setSubmittingWorkOrderId(order.workOrderId) try { const response = await submitCollectOrder({ orderNo, workOrderId: order.workOrderId, fields: values, screenshots: screenshotsByOrder[order.workOrderId] || [], }) message.success(response.data.complete ? '当前商品资料已完善' : '当前商品资料已提交') await refreshLookupOrders(orderNo, { allowCompleteWhenNotFound: true }) } catch (error) { message.error(error instanceof Error ? error.message : '提交失败') } finally { setSubmittingWorkOrderId(0) } } return (
订单资料补充 请填写正确订单号,匹配成功后继续补充资料。
{complete ? ( ) : null} {!complete && lookupOrders.length > 1 ? ( 当前订单有 {lookupOrders.length} 个待完善商品,请逐个提交资料。 ) : null} {lookupOrders.map((currentOrder) => ( {currentOrder.workOrderNo}} size="small" > 订单号:{currentOrder.platformOrderId}
submitMaterial(currentOrder, values)} > {currentOrder.fields.map((field) => ( {field.type === 'select' && (field.options || []).length > 0 ? ( ({ label: option, value: option, }))} /> ) : ( )} ))} setScreenshotsByOrder((prev) => ({ ...prev, [currentOrder.workOrderId]: files, })) } />
))}
) async function refreshLookupOrders( currentOrderNo: string, options: { allowCompleteWhenNotFound?: boolean } = {}, ) { try { const response = await lookupCollectOrder(currentOrderNo) setLookupOrders(response.data.orders || []) setComplete(false) } catch (error) { if (options.allowCompleteWhenNotFound && isCollectOrderNotFoundError(error)) { setLookupOrders([]) setComplete(true) return } throw error } } } function isCollectOrderNotFoundError(error: unknown) { return ( String((error as { errorCode?: string })?.errorCode || '').trim() === 'collect_order_not_found' ) }