This commit is contained in:
2026-10-14 11:43:32 +08:00
parent 6a905419fc
commit 0830d7a3a3
10 changed files with 177 additions and 12 deletions
@@ -138,7 +138,19 @@ async function changeOutboundType() { selectedReturnNo.value = ''; selectedRetur
async function loadTransferCandidates() {
inventoryLoading.value = true
try {
transferCandidates.value = await listWarehouseTransferOutboundCandidates({ customerId: selectedCustomerId.value || undefined, warehouseId: selectedWarehouseId.value || undefined })
const pallets = await listWarehouseTransferOutboundCandidates({ customerId: selectedCustomerId.value || undefined, warehouseId: selectedWarehouseId.value || undefined })
// The API returns pallet rows, but destination binding applies to the whole transfer.
const transfers = new Map<string, WarehouseTransferOutboundCandidate>()
for (const pallet of pallets) {
const key = transferSelectionKey(pallet)
const transfer = transfers.get(key)
if (transfer) {
transfer.packageCount += pallet.packageCount
transfer.grossWeightKg = sumTransferMeasurement(transfer.grossWeightKg, pallet.grossWeightKg)
transfer.volumeCbm = sumTransferMeasurement(transfer.volumeCbm, pallet.volumeCbm)
} else transfers.set(key, { ...pallet })
}
transferCandidates.value = [...transfers.values()]
const candidateKeys = new Set(transferCandidates.value.map(transferSelectionKey))
selectedTransferPalletIds.value = selectedTransferPalletIds.value.filter(key => candidateKeys.has(key))
if (transferCandidates.value.length === 1) selectedTransferPalletIds.value = [transferSelectionKey(transferCandidates.value[0])]
@@ -149,6 +161,9 @@ async function loadTransferCandidates() {
} finally { inventoryLoading.value = false }
}
function transferSelectionKey(row: WarehouseTransferOutboundCandidate) { return `${row.customerId}:${row.transferNo}` }
function sumTransferMeasurement(left?: number | null, right?: number | null) {
return left == null && right == null ? null : Number(((left ?? 0) + (right ?? 0)).toFixed(6))
}
function toggleTransferPallet(row: WarehouseTransferOutboundCandidate, checked: boolean | string | number) { const key = transferSelectionKey(row); selectedTransferPalletIds.value = checked ? [...new Set([...selectedTransferPalletIds.value, key])] : selectedTransferPalletIds.value.filter(id => id !== key) }
function transferDestinationLabel(row: WarehouseTransferOutboundCandidate) {
if (row.destinationType === 'PRIVATE' || row.privateDestinationAddress?.trim()) {