This commit is contained in:
2026-10-08 15:34:47 +08:00
parent 23572c125f
commit c20d5c53e1
13 changed files with 515 additions and 39 deletions
+26
View File
@@ -0,0 +1,26 @@
export function defaultPackingBoxes(items) {
return items.filter(item => Number(item.quantity) > 0).map(item => ({
quantities: { [item.skuCode]: Number(item.quantity) }, length: '', width: '', height: '', weight: ''
}))
}
export function packingBoxPayload(box) {
return { items: Object.entries(box.quantities || {}).filter(([, quantity]) => Number(quantity) > 0)
.map(([skuCode, quantity]) => ({ skuCode, quantity: Number(quantity) })),
length: Number(box.length), width: Number(box.width), height: Number(box.height), weight: Number(box.weight) }
}
export function validPackingAllocation(boxes, expected) {
if (!boxes.length) return false
const totals = {}
for (const box of boxes) {
const payload = packingBoxPayload(box)
if (!payload.items.length || !['length', 'width', 'height', 'weight'].every(key => Number.isFinite(payload[key]) && payload[key] > 0)) return false
for (const item of payload.items) {
if (!Number.isSafeInteger(item.quantity) || item.quantity <= 0 || !Object.hasOwn(expected, item.skuCode)) return false
totals[item.skuCode] = (totals[item.skuCode] || 0) + item.quantity
}
}
return Object.entries(expected).filter(([, quantity]) => Number(quantity) > 0).every(([sku, quantity]) => totals[sku] === Number(quantity))
&& Object.keys(totals).length === Object.values(expected).filter(quantity => Number(quantity) > 0).length
}