fix: hide assigned orders from dispatch lists
This commit is contained in:
30
admin-web/src/api/deliveryApi.test.ts
Normal file
30
admin-web/src/api/deliveryApi.test.ts
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -21,6 +21,15 @@ export function listDeliveryOrders(status?: string) {
|
||||
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) {
|
||||
return apiPost<DeliveryOrder>('/api/admin/delivery-orders/assign-goods-order', { orderId, riderId })
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ import {
|
||||
assignGoodsOrder,
|
||||
assignGroupBuyOrder,
|
||||
createDeliveryUser,
|
||||
filterUnassignedDispatchTargets,
|
||||
listDeliveryOrders,
|
||||
listDeliveryUsers
|
||||
} from '../api/deliveryApi'
|
||||
@@ -44,9 +45,9 @@ async function load() {
|
||||
: []
|
||||
riders.value = riderRows
|
||||
tasks.value = taskRows
|
||||
goodsOrders.value = goodsRows
|
||||
expressOrders.value = expressRows
|
||||
groupBuyOrders.value = filterPendingDeliveryGroupBuyOrders(groupOrderRows)
|
||||
goodsOrders.value = filterUnassignedDispatchTargets(goodsRows, taskRows, 'GOODS_ORDER')
|
||||
expressOrders.value = filterUnassignedDispatchTargets(expressRows, taskRows, 'EXPRESS_ORDER')
|
||||
groupBuyOrders.value = filterUnassignedDispatchTargets(filterPendingDeliveryGroupBuyOrders(groupOrderRows), taskRows, 'GROUP_BUY_ORDER')
|
||||
if (!dispatchForm.riderId && riderRows[0]) dispatchForm.riderId = riderRows[0].id
|
||||
} catch (error) {
|
||||
ElMessage.error(error instanceof Error ? error.message : '加载失败')
|
||||
|
||||
Reference in New Issue
Block a user