fix: hide assigned orders from dispatch lists

This commit is contained in:
王鹏
2026-07-07 17:54:48 +08:00
parent 060051cb44
commit 48dc5a0c13
3 changed files with 43 additions and 3 deletions

View File

@@ -0,0 +1,30 @@
import { describe, expect, it } from 'vitest'
import { filterUnassignedDispatchTargets } from './deliveryApi'
import type { DeliveryOrder } from '../types'
describe('filterUnassignedDispatchTargets', () => {
it('removes orders already linked to delivery tasks', () => {
const tasks = [
deliveryTask({ bizType: 'GOODS_ORDER', bizOrderId: 1 }),
deliveryTask({ bizType: 'GROUP_BUY_ORDER', bizOrderId: 3 })
]
const orders = [{ id: 1 }, { id: 2 }, { id: 3 }]
expect(filterUnassignedDispatchTargets(orders, tasks, 'GOODS_ORDER')).toEqual([{ id: 2 }, { id: 3 }])
expect(filterUnassignedDispatchTargets(orders, tasks, 'GROUP_BUY_ORDER')).toEqual([{ id: 1 }, { id: 2 }])
})
})
function deliveryTask(overrides: Partial<DeliveryOrder>): DeliveryOrder {
return {
id: 1,
bizType: 'GOODS_ORDER',
bizOrderId: 1,
bizOrderNo: 'GO00000001',
riderId: 1,
riderName: 'rider',
amountCent: 0,
status: 'ASSIGNED',
...overrides
}
}

View File

@@ -21,6 +21,15 @@ export function listDeliveryOrders(status?: string) {
return apiGet<DeliveryOrder[]>('/api/admin/delivery-orders', status ? { status } : undefined) return apiGet<DeliveryOrder[]>('/api/admin/delivery-orders', status ? { status } : undefined)
} }
export function filterUnassignedDispatchTargets<T extends { id: number }>(
orders: T[],
tasks: Pick<DeliveryOrder, 'bizType' | 'bizOrderId'>[],
bizType: string
) {
const assignedIds = new Set(tasks.filter((task) => task.bizType === bizType).map((task) => task.bizOrderId))
return orders.filter((order) => !assignedIds.has(order.id))
}
export function assignGoodsOrder(orderId: number, riderId: number) { export function assignGoodsOrder(orderId: number, riderId: number) {
return apiPost<DeliveryOrder>('/api/admin/delivery-orders/assign-goods-order', { orderId, riderId }) return apiPost<DeliveryOrder>('/api/admin/delivery-orders/assign-goods-order', { orderId, riderId })
} }

View File

@@ -14,6 +14,7 @@ import {
assignGoodsOrder, assignGoodsOrder,
assignGroupBuyOrder, assignGroupBuyOrder,
createDeliveryUser, createDeliveryUser,
filterUnassignedDispatchTargets,
listDeliveryOrders, listDeliveryOrders,
listDeliveryUsers listDeliveryUsers
} from '../api/deliveryApi' } from '../api/deliveryApi'
@@ -44,9 +45,9 @@ async function load() {
: [] : []
riders.value = riderRows riders.value = riderRows
tasks.value = taskRows tasks.value = taskRows
goodsOrders.value = goodsRows goodsOrders.value = filterUnassignedDispatchTargets(goodsRows, taskRows, 'GOODS_ORDER')
expressOrders.value = expressRows expressOrders.value = filterUnassignedDispatchTargets(expressRows, taskRows, 'EXPRESS_ORDER')
groupBuyOrders.value = filterPendingDeliveryGroupBuyOrders(groupOrderRows) groupBuyOrders.value = filterUnassignedDispatchTargets(filterPendingDeliveryGroupBuyOrders(groupOrderRows), taskRows, 'GROUP_BUY_ORDER')
if (!dispatchForm.riderId && riderRows[0]) dispatchForm.riderId = riderRows[0].id if (!dispatchForm.riderId && riderRows[0]) dispatchForm.riderId = riderRows[0].id
} catch (error) { } catch (error) {
ElMessage.error(error instanceof Error ? error.message : '加载失败') ElMessage.error(error instanceof Error ? error.message : '加载失败')