支持批量验收接单订单

This commit is contained in:
yml2213
2026-08-15 15:07:31 +08:00
parent 87d8360e64
commit 4eb9aa2cd8
4 changed files with 112 additions and 0 deletions
@@ -44,6 +44,7 @@ import ImagePreviewList from '@/components/files/ImagePreviewList'
import PageHeader from '@/components/admin/PageHeader'
import {
acceptAdminWorkOrder,
acceptAdminWorkOrders,
assignAdminWorkOrderToWorker,
createAdminMockWorkOrder,
unassignAdminWorkOrder,
@@ -124,6 +125,7 @@ export default function WorkOrdersPanel() {
const [keywordInput, setKeywordInput] = useState('')
const [page, setPage] = useState(1)
const [pageSize, setPageSize] = useState(ADMIN_DEFAULT_PAGE_SIZE)
const [selectedAcceptanceOrderIds, setSelectedAcceptanceOrderIds] = useState<number[]>([])
const [detailOrder, setDetailOrder] = useState<WorkOrder | null>(null)
const [problemOrder, setProblemOrder] = useState<WorkOrder | null>(null)
const [resolutionOrder, setResolutionOrder] = useState<WorkOrder | null>(null)
@@ -176,6 +178,10 @@ export default function WorkOrdersPanel() {
enabled: Boolean(assignOrder),
})
useEffect(() => {
setSelectedAcceptanceOrderIds([])
}, [status, keyword, page, pageSize])
function openAssignModal(row: WorkOrder) {
setAssignOrder(row)
setAssignWorkerId(undefined)
@@ -304,6 +310,27 @@ export default function WorkOrdersPanel() {
}
}
function confirmBatchAcceptance() {
const workOrderIds = selectedAcceptanceOrderIds
if (workOrderIds.length === 0) {
message.warning('请先选择待验收订单')
return
}
modal.confirm({
title: `确认验收 ${workOrderIds.length} 个订单?`,
content: '验收通过后将结算打手奖励,并按配置处理押金。',
okText: '一键验收',
cancelText: '取消',
onOk: async () => {
const succeeded = await runAction(
() => acceptAdminWorkOrders(workOrderIds),
`已验收 ${workOrderIds.length} 个订单`,
)
if (succeeded) setSelectedAcceptanceOrderIds([])
},
})
}
async function submitProblem(values: { note?: string }) {
if (!problemOrder) return
const succeeded = await runAction(
@@ -821,6 +848,16 @@ export default function WorkOrdersPanel() {
title="接单工单"
extra={
<Space>
{status === 'pending_acceptance' ? (
<Button
type="primary"
icon={<CheckOutlined />}
disabled={selectedAcceptanceOrderIds.length === 0}
onClick={confirmBatchAcceptance}
>
{selectedAcceptanceOrderIds.length}
</Button>
) : null}
<Button
icon={<ReloadOutlined />}
loading={ordersQuery.isFetching}
@@ -837,6 +874,15 @@ export default function WorkOrdersPanel() {
loading={ordersQuery.isLoading}
dataSource={ordersQuery.data?.data.items || []}
columns={columns}
rowSelection={
status === 'pending_acceptance'
? {
selectedRowKeys: selectedAcceptanceOrderIds,
onChange: (selectedRowKeys) =>
setSelectedAcceptanceOrderIds(selectedRowKeys.map((item) => Number(item))),
}
: undefined
}
pagination={buildAdminTablePagination({
current: ordersPagination?.page || page,
pageSize: ordersPagination?.pageSize || pageSize,
@@ -313,6 +313,13 @@ export function acceptAdminWorkOrder(workOrderId: number) {
)
}
export function acceptAdminWorkOrders(workOrderIds: number[]) {
return apiPost<{ orders: WorkOrder[] }>(
'/api/v1/admin/worker-platform/orders/accept-batch',
{ workOrderIds },
)
}
export function deductAdminWorkOrderPendingDeposit(
workOrderId: number,
payload: { amount: number; note: string },