import { apiRequest } from '@/api/http.js' const ROOT = '/first-leg/pda-dropship' function requireValue(value, message) { if (value === null || value === undefined || value === '') throw new Error(message) } function operationHeader(operationId) { return operationId ? { 'Idempotency-Key': String(operationId) } : {} } export function listDropshipPalletizingTasks(keyword = '') { const query = keyword ? `?keyword=${encodeURIComponent(String(keyword).trim())}` : '' return apiRequest({ url: `${ROOT}/tasks/pending${query}`, method: 'GET' }) } export function getDropshipPalletizingTask(taskId, warehouseId) { requireValue(taskId, '缺少清点组托任务标识') requireValue(warehouseId, '缺少作业仓库标识') return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}?warehouseId=${encodeURIComponent(warehouseId)}`, method: 'GET' }) } export function resolveDropshipCarton(taskId, warehouseId, boxCode) { requireValue(taskId, '缺少清点组托任务标识') requireValue(warehouseId, '缺少作业仓库标识') requireValue(boxCode, '缺少箱码') return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/cartons/resolve?warehouseId=${encodeURIComponent(warehouseId)}&boxCode=${encodeURIComponent(String(boxCode).trim())}`, method: 'GET' }) } export function claimDropshipPalletizingTask(taskId, warehouseId) { requireValue(taskId, '缺少清点组托任务标识') requireValue(warehouseId, '缺少作业仓库标识') return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/claim`, method: 'POST', data: { warehouseId } }) } export function countDropshipCarton(taskId, payload = {}) { requireValue(taskId, '缺少清点组托任务标识') for (const [field, message] of [['warehouseId', '缺少作业仓库标识'], ['boxCode', '缺少箱码'], ['actualSkuQuantity', '缺少 SKU 实收数量'], ['discrepancyAction', '缺少差异处理动作'], ['operationId', '缺少操作幂等标识']]) requireValue(payload[field], message) return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/cartons/count`, method: 'POST', header: operationHeader(payload.operationId), data: { warehouseId: payload.warehouseId, boxCode: payload.boxCode, actualSkuQuantity: payload.actualSkuQuantity, discrepancyAction: payload.discrepancyAction, discrepancyRemark: payload.discrepancyRemark || null, palletNo: payload.palletNo || null, operationId: payload.operationId } }) } export function bindPendingDropshipCartons(taskId, payload = {}) { for (const [field, message] of [['warehouseId', '缺少作业仓库标识'], ['palletNo', '缺少托盘码'], ['operationId', '缺少操作幂等标识']]) requireValue(payload[field], message) return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/pallets/bind-pending`, method: 'POST', header: operationHeader(payload.operationId), data: payload }) } export function createAndBindDropshipPallet(taskId, payload = {}) { requireValue(taskId, '缺少清点组托任务标识') for (const [field, message] of [['warehouseId', '缺少作业仓库标识'], ['operationId', '缺少操作幂等标识']]) requireValue(payload[field], message) return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/pallets/create-and-bind`, method: 'POST', header: operationHeader(payload.operationId), data: { warehouseId: payload.warehouseId, operationId: payload.operationId } }) } export function moveDropshipCarton(taskId, cartonId, payload = {}) { requireValue(cartonId, '缺少箱明细标识') for (const [field, message] of [['warehouseId', '缺少作业仓库标识'], ['operationId', '缺少操作幂等标识']]) requireValue(payload[field], message) return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/cartons/${encodeURIComponent(cartonId)}/move`, method: 'POST', header: operationHeader(payload.operationId), data: { warehouseId: payload.warehouseId, targetPalletNo: payload.targetPalletNo || null, operationId: payload.operationId } }) } export function sealDropshipPallet(taskId, palletId, payload = {}) { requireValue(palletId, '缺少托盘标识') for (const [field, message] of [['warehouseId', '缺少作业仓库标识'], ['operationId', '缺少操作幂等标识'], ['expectedVersion', '缺少托盘版本']]) requireValue(payload[field], message) return apiRequest({ url: `${ROOT}/tasks/${encodeURIComponent(taskId)}/pallets/${encodeURIComponent(palletId)}/seal`, method: 'POST', header: operationHeader(payload.operationId), data: payload }) }