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)
|
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 })
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 : '加载失败')
|
||||||
|
|||||||
Reference in New Issue
Block a user