修复接单平台并发、分页与补资料

This commit is contained in:
yml2213
2026-07-28 10:15:44 +08:00
parent a2587eda01
commit f0ba0fe17f
22 changed files with 1096 additions and 145 deletions
+67 -30
View File
@@ -3,51 +3,45 @@ import { App, Button, Card, Form, Input, Result, Space, Typography } from 'antd'
import { useState } from 'react'
import { lookupCollectOrder, submitCollectOrder } from '@/services/worker'
import type { CollectField } from '@/types/worker-platform'
type LookupOrder = {
workOrderNo: string
platformOrderId: string
productName: string
status: string
}
import type { CollectLookupOrder } from '@/types/worker-platform'
export default function CollectPage() {
const { message } = App.useApp()
const [orderNo, setOrderNo] = useState('')
const [order, setOrder] = useState<LookupOrder | null>(null)
const [fields, setFields] = useState<CollectField[]>([])
const [lookupOrders, setLookupOrders] = useState<CollectLookupOrder[]>([])
const [lookupLoading, setLookupLoading] = useState(false)
const [submitLoading, setSubmitLoading] = useState(false)
const [submittingWorkOrderId, setSubmittingWorkOrderId] = useState(0)
const [complete, setComplete] = useState(false)
async function submitLookup(values: { orderNo: string }) {
setLookupLoading(true)
setComplete(false)
try {
const response = await lookupCollectOrder(values.orderNo)
setOrderNo(values.orderNo)
setOrder(response.data.order)
setFields(response.data.fields)
const nextOrderNo = String(values.orderNo || '').trim()
setOrderNo(nextOrderNo)
await refreshLookupOrders(nextOrderNo)
} catch (error) {
setOrder(null)
setFields([])
setLookupOrders([])
message.error(error instanceof Error ? error.message : '查询失败')
} finally {
setLookupLoading(false)
}
}
async function submitMaterial(values: Record<string, string>) {
setSubmitLoading(true)
async function submitMaterial(order: CollectLookupOrder, values: Record<string, string>) {
setSubmittingWorkOrderId(order.workOrderId)
try {
const response = await submitCollectOrder({ orderNo, fields: values })
setComplete(response.data.complete)
message.success(response.data.complete ? '资料已完善' : '资料已提交')
const response = await submitCollectOrder({
orderNo,
workOrderId: order.workOrderId,
fields: values,
})
message.success(response.data.complete ? '当前商品资料已完善' : '当前商品资料已提交')
await refreshLookupOrders(orderNo, { allowCompleteWhenNotFound: true })
} catch (error) {
message.error(error instanceof Error ? error.message : '提交失败')
} finally {
setSubmitLoading(false)
setSubmittingWorkOrderId(0)
}
}
@@ -78,13 +72,30 @@ export default function CollectPage() {
<Result status="success" title="资料已提交完成" subTitle="订单已进入待分配状态,请等待处理。" />
) : null}
{order && !complete ? (
<Card className="platform-section-gap" title={order.productName} size="small">
{!complete && lookupOrders.length > 1 ? (
<Typography.Paragraph type="secondary" className="platform-section-gap">
{lookupOrders.length}
</Typography.Paragraph>
) : null}
{lookupOrders.map((currentOrder) => (
<Card
key={currentOrder.workOrderId}
className="platform-section-gap"
title={currentOrder.productName}
extra={<Typography.Text type="secondary">{currentOrder.workOrderNo}</Typography.Text>}
size="small"
>
<Typography.Paragraph type="secondary">
{order.platformOrderId}
{currentOrder.platformOrderId}
</Typography.Paragraph>
<Form layout="vertical" onFinish={submitMaterial}>
{fields.map((field) => (
<Form
key={currentOrder.workOrderId}
layout="vertical"
initialValues={currentOrder.values || {}}
onFinish={(values) => submitMaterial(currentOrder, values)}
>
{currentOrder.fields.map((field) => (
<Form.Item
key={field.key}
label={field.label}
@@ -94,13 +105,39 @@ export default function CollectPage() {
<Input />
</Form.Item>
))}
<Button type="primary" htmlType="submit" loading={submitLoading}>
<Button
type="primary"
htmlType="submit"
loading={submittingWorkOrderId === currentOrder.workOrderId}
>
</Button>
</Form>
</Card>
) : null}
))}
</Card>
</main>
)
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'
}