This commit is contained in:
2026-09-08 20:28:05 +08:00
parent 658b2e84cf
commit a7f073c783
13 changed files with 725 additions and 97 deletions
@@ -0,0 +1,59 @@
import { overseasApiRequest } from '@/api/overseasHttp'
import type { PageResult } from './warehouseServices'
export interface ReturnInventoryItem {
overseasWarehouseId: string; cartonMark: string; sourceBatchNo?: string; status: string; skuCode: string
productNameZh?: string; quantity: number; cartonSkuTypes: number; cartonTotalQuantity: number; receivedAt: string
}
export interface ReturnInventorySummaryItem {
overseasWarehouseId: string; skuCode: string; productNameZh?: string
availableQuantity: number; cartonQuantity: number; updatedAt: string
}
export interface ReturnInventoryCartonItem { skuCode: string; productNameZh?: string; quantity: number }
export interface ReturnInventoryCartonDetail {
cartonMark: string; overseasWarehouseId: string; sourceBatchNo?: string; sourceReturnNo?: string; status: string
skuTypes: number; totalQuantity: number; length?: number; width?: number; height?: number; weight?: number; receivedAt: string; items: ReturnInventoryCartonItem[]
}
export interface ReturnInventoryLabel {
cartonMark: string; overseasWarehouseId: string; customerId: string; sourceBatchNo?: string; sourceReturnNo?: string
totalQuantity: number; length?: number; width?: number; height?: number; weight?: number; items: ReturnInventoryCartonItem[]; generatedAt: string; printableHtml: string
}
export function listReturnInventory(params: Record<string, unknown>) {
return overseasApiRequest<PageResult<ReturnInventoryItem>>({ method: 'GET', url: '/merchant/v1/last-leg/return-inventory', params })
}
export function listReturnInventorySummary(params: Record<string, unknown>) {
return overseasApiRequest<PageResult<ReturnInventorySummaryItem>>({ method: 'GET', url: '/merchant/v1/last-leg/return-inventory/summary', params })
}
export function getReturnInventoryCarton(cartonMark: string) {
return overseasApiRequest<ReturnInventoryCartonDetail>({ method: 'GET', url: `/merchant/v1/last-leg/return-inventory/cartons/${encodeURIComponent(cartonMark)}` })
}
export function getReturnInventoryLabel(cartonMark: string) {
return overseasApiRequest<ReturnInventoryLabel>({ method: 'GET', url: `/merchant/v1/last-leg/return-inventory/cartons/${encodeURIComponent(cartonMark)}/label` })
}
export interface ReturnPackingPreview {
orders: Array<{ returnNo: string; customerId: string; customerReferenceNo?: string; status: string }>
customerId?: string
skus: Array<{ skuCode: string; productNameZh?: string; availableQuantity: number }>
}
export function getReturnPackingPreview(returnNo?: string) {
return overseasApiRequest<ReturnPackingPreview>({ method: 'GET', url: '/pda/v1/last-leg/return-inventory/packing/orders', params: { returnNo: returnNo || undefined } })
}
export function mergeReturnInventory(payload: {
returnNos: string[]; items: Array<{ skuCode: string; quantity: number }>
length: number; width: number; height: number; weight: number; idempotencyKey: string
}) {
return overseasApiRequest<{ cartonMark: string; skuCode: string; totalQuantity: number; label: ReturnInventoryLabel }>({
method: 'POST', url: '/pda/v1/last-leg/return-inventory/cartons/merge', data: payload,
})
}
@@ -0,0 +1,29 @@
import { overseasApiRequest } from '@/api/overseasHttp'
import type { PageResult } from './warehouseServices'
export interface ReturnOrderSummary {
returnNo: string; overseasWarehouseId: string; customerReferenceNo?: string; status: string
skuTypes: number; expectedQuantity: number; receivedQuantity: number; createdAt: string
}
export interface ReturnOrderItem {
skuCode: string; productNameZh?: string; expectedQuantity: number; receivedQuantity: number
}
export interface ReturnReceipt {
receiptNo: string; receiptBatchNo: string; cartonMark?: string; trackingNo?: string; startedBy: 'RETURN_NO' | 'SKU'
receivedQuantity: number; operatorName?: string; signedAt: string
}
export interface ReturnOrderDetail { order: ReturnOrderSummary; remark?: string; items: ReturnOrderItem[]; receipts: ReturnReceipt[] }
export interface ReturnOrderCreate {
overseasWarehouseId: string; customerReferenceNo?: string; remark?: string; idempotencyKey: string
items: Array<{ skuCode: string; productNameZh?: string; expectedQuantity: number }>
}
export function listReturnOrders(params: Record<string, unknown>) {
return overseasApiRequest<PageResult<ReturnOrderSummary>>({ method: 'GET', url: '/merchant/v1/last-leg/return-orders', params })
}
export function getReturnOrder(returnNo: string) {
return overseasApiRequest<ReturnOrderDetail>({ method: 'GET', url: `/merchant/v1/last-leg/return-orders/${encodeURIComponent(returnNo)}` })
}
export function createReturnOrder(payload: ReturnOrderCreate) {
return overseasApiRequest<ReturnOrderDetail>({ method: 'POST', url: '/merchant/v1/last-leg/return-orders', data: payload })
}
@@ -6,9 +6,13 @@ export interface TransferSummary { id: string; transferNo: string; inboundCode:
export interface RelabelSummary { id: string; relabelNo: string; lastlegOrderId: string; lastlegOrderNo: string; customerOrderNo: string; overseasWarehouseId: string; status: string; itemCount: number; totalPackageCount: number; notifiedPackageCount: number; skuCodes: string; createdAt: string }
export interface RelabelItemDetail {
id: string; skuCode?: string; productNameZh: string; totalPackageCount: number; notifiedPackageCount: number
shipmentNo: string; trackingCode?: string; newSkuCode: string; labelRequirement?: string; remark?: string
shipmentNo: string; trackingCode?: string; newSkuCode?: string; labelRequirement?: string; remark?: string
relabelFileId?: string; relabelFileName?: string; relabelFileUrl?: string
cartonMark: string; fbaCartonMark: string; destinationWarehouseId: string
cartonMark: string; fbaCartonMark?: string; destinationFbaWarehouseCode?: string
operationType: 'CARTON_LABEL' | 'SKU_LABEL' | 'CARTON_AND_SKU'
skuItems: Array<{ skuCode: string; newSkuCode: string; quantity: number; remark?: string }>
sourceInventoryBalanceId: string; sourceInventoryPositionId: string; sourceInboundOrderId: string
sourceInboundOrderNo?: string; sourceInboundCode?: string; sourceWarehouseId: string; sourceWarehouseCode?: string; sourceWarehouseName?: string
}
export interface RelabelDetail {
application: RelabelSummary & { labelDeadline?: string; contactName?: string; contactPhone?: string; chargeAmount?: number; chargeCurrency?: string; walletStatus?: string; walletErrorMessage?: string }
@@ -18,6 +22,13 @@ export interface RelabelDetail {
}
export interface DiscardSummary { id: string; discardNo: string; inboundCodes: string; overseasWarehouseId: string; overseasWarehouseName: string; totalPackages: number; totalFee: number; currency: string; status: string; createdAt: string }
export interface DiscardCandidate { orderId: string; inboundCode: string; inboundOrderNo: string; overseasWarehouseId: string; overseasWarehouseName: string; availablePackages: number; skus: Array<{ skuCode: string; productName: string; availablePackages: number }> }
export interface RelabelInventoryCandidate {
inventoryBalanceId: string; inboundOrderId: string; inboundOrderNo?: string; inboundCode?: string
overseasWarehouseId: string; overseasWarehouseCode?: string; overseasWarehouseName?: string
destinationFbaWarehouseCode?: string; destinationFbaWarehouseName?: string; skuCode?: string; productNameZh?: string
availablePackages: number; version: number
positions: Array<{ positionId: string; palletNo?: string; batchNo?: string; warehouseLocationCode?: string; availablePackages: number }>
}
export interface TransferCreate {
inboundCode: string; sourceLastlegOrderIds: string[]; operatingWarehouseId: string; fbaWarehouseCode: string
@@ -26,10 +37,10 @@ export interface TransferCreate {
items: Array<{ skuCode: string; productNameZh: string; packageCount: number; shippingMark?: string }>
}
export interface RelabelCreate {
customerOrderNo: string; overseasWarehouseId?: string; labelDeadline: string; contactName: string; contactPhone: string; chargeAmount: number
customerOrderNo: string; operationWarehouseId: string; labelDeadline: string; contactName: string; contactPhone: string; chargeAmount: number
remark?: string; idempotencyKey: string
items: Array<{ skuCode?: string; productNameZh: string; totalPackageCount: number; notifiedPackageCount: number; shipmentNo: string; trackingCode?: string; newSkuCode: string; labelRequirement?: string
cartonMark: string; fbaCartonMark: string; destinationWarehouseId?: string; remark?: string }>
items: Array<{ sourceInventoryBalanceId: string; sourceInventoryPositionId: string; sourceInboundOrderId: string; skuCode?: string; productNameZh: string; totalPackageCount: number; notifiedPackageCount: number; shipmentNo: string; trackingCode?: string; newSkuCode?: string; labelRequirement?: string
cartonMark: string; fbaCartonMark?: string; destinationFbaWarehouseCode?: string; operationType: 'CARTON_LABEL' | 'SKU_LABEL' | 'CARTON_AND_SKU'; skuItems?: Array<{ skuCode: string; newSkuCode: string; quantity: number; remark?: string }>; remark?: string }>
}
export function listLastlegOrders(inboundCode: string) {
@@ -50,6 +61,13 @@ export function listRelabels(params: Record<string, unknown>) {
export function getRelabel(relabelNo: string) {
return overseasApiRequest<RelabelDetail>({ method: 'GET', url: `/merchant/v1/last-leg/relabel-applications/${encodeURIComponent(relabelNo)}` })
}
export function listRelabelInventoryCandidates(operationWarehouseId: string, inboundCode?: string) {
return overseasApiRequest<RelabelInventoryCandidate[]>({
method: 'GET', url: '/merchant/v1/last-leg/relabel-applications/inventory-candidates',
params: { operationWarehouseId, inboundCode: inboundCode || undefined },
})
}
export function createRelabel(payload: RelabelCreate) {
return overseasApiRequest<Record<string, unknown>>({ method: 'POST', url: '/merchant/v1/last-leg/relabel-applications', data: payload })
}