import { apiGet, apiPatch, apiPost, apiPut } from '@/lib/http' import type { ConsignmentInventory, ConsignmentStatsSummary, ConsignmentSubmission, InventoryMatchableOrders, WorkOrderInventoryMatchCheck, WorkOrderInventoryMatchOptions, } from '@/types/consignment' // --- 库存管理 --- export function fetchAdminConsignmentInventories(params?: Record) { return apiGet<{ items: ConsignmentInventory[]; total: number }>( '/api/v1/admin/worker-platform/consignment/inventories', params, ) } export function fetchAdminConsignmentStats() { return apiGet('/api/v1/admin/worker-platform/consignment/stats') } export function getAdminConsignmentInventory(id: number | string) { return apiGet(`/api/v1/admin/worker-platform/consignment/inventories/${id}`) } export function updateAdminConsignmentInventory( id: number | string, payload: Record, ) { return apiPut( `/api/v1/admin/worker-platform/consignment/inventories/${id}`, payload, ) } export function toggleAdminConsignmentMatching(id: number | string, allowMatching: boolean) { return apiPatch( `/api/v1/admin/worker-platform/consignment/inventories/${id}/matching`, { allowMatching }, ) } export function archiveAdminConsignmentInventory(id: number | string) { return apiPost( `/api/v1/admin/worker-platform/consignment/inventories/${id}/archive`, {}, ) } export function returnAdminConsignmentInventory(id: number | string, payload: { reason?: string }) { return apiPost( `/api/v1/admin/worker-platform/consignment/inventories/${id}/return`, payload, ) } // --- 提报审核 --- export function fetchAdminConsignmentSubmissions(params?: Record) { return apiGet<{ items: ConsignmentSubmission[]; total: number }>( '/api/v1/admin/worker-platform/consignment/submissions', params, ) } export function getAdminConsignmentSubmission(id: number | string) { return apiGet( `/api/v1/admin/worker-platform/consignment/submissions/${id}`, ) } export function approveAdminConsignmentSubmission( id: number | string, payload: Record, ) { return apiPost<{ submission: ConsignmentSubmission; inventory: ConsignmentInventory }>( `/api/v1/admin/worker-platform/consignment/submissions/${id}/approve`, payload, ) } export function rejectAdminConsignmentSubmission( id: number | string, payload: { reviewNote?: string }, ) { return apiPost( `/api/v1/admin/worker-platform/consignment/submissions/${id}/reject`, payload, ) } // --- 匹配与履约 --- export function checkWorkOrderConsignmentMatches(workOrderId: number | string) { return apiGet( `/api/v1/admin/worker-platform/consignment/matches/${workOrderId}`, ) } /** * 手动指定现货:该订单的**全部**在库现货(含不符合规格的),逐件带匹配判定与差异说明。 * 与 checkWorkOrderConsignmentMatches 的区别:后者只给系统候选,这里给"人工拍板"的全量视图。 */ export function fetchWorkOrderConsignmentMatchOptions(workOrderId: number | string) { return apiGet( `/api/v1/admin/worker-platform/consignment/matches/${workOrderId}/options`, ) } /** 手动匹配:从现货出发,列出可以匹配的待指派/待补资料订单(逐单带规格判定) */ export function fetchInventoryMatchableOrders( inventoryId: number | string, params?: { keyword?: string; pageSize?: number }, ) { return apiGet( `/api/v1/admin/worker-platform/consignment/inventories/${inventoryId}/match-orders`, params, ) } /** 履约/指派返回的电子凭证核销结果:ok=false 时必须提示运营人工核销,不能报成功 */ export type WorkOrderVoucherConsumeResult = { ok: boolean voucherCount: number consumedCount: number alreadyConsumedCount: number failedCount: number voucherCodes: string[] errorMessage: string } export function fulfillWorkOrderWithConsignment(payload: { workOrderId: number | string inventoryId: number | string /** 订单规格信息不全或高配充低配时,必须显式确认才放行(后端会二次校验) */ allowPartial?: boolean /** 规格真冲突(系统/区服/系列/钻级不符)也放行,必须同时给 matchNote */ allowSpecMismatch?: boolean /** 手动指定现货的原因(强制匹配必填,后端会留痕) */ matchNote?: string }) { return apiPost<{ workOrder: unknown inventory: ConsignmentInventory voucherConsume?: WorkOrderVoucherConsumeResult }>('/api/v1/admin/worker-platform/consignment/fulfill', payload) } export function assignWorkOrderWithConsignmentWorker(payload: { workOrderId: number | string inventoryId: number | string workerId?: number | null /** 订单规格信息不全或高配充低配时,必须显式确认才放行(后端会二次校验) */ allowPartial?: boolean /** 规格真冲突(系统/区服/系列/钻级不符)也放行,必须同时给 matchNote */ allowSpecMismatch?: boolean /** 手动指定现货的原因(强制匹配必填,后端会留痕) */ matchNote?: string }) { return apiPost<{ workOrder: unknown inventory: ConsignmentInventory voucherConsume?: WorkOrderVoucherConsumeResult }>('/api/v1/admin/worker-platform/consignment/assign-worker', payload) } export function revokeWorkOrderConsignmentFulfillment(payload: { workOrderId: number | string action?: 'reopen' | 'cancel_order' | 'archive_inventory' reason?: string /** 打手履约押金处置:auto 按规则自动 / refund 全额退还 / forfeit 全额扣除 */ workerDeposit?: 'auto' | 'refund' | 'forfeit' /** 卖家发布押金处置:auto 按规则自动 / keep_frozen 保留冻结 / forfeit 扣除没收 */ consignmentDeposit?: 'auto' | 'keep_frozen' | 'forfeit' }) { return apiPost<{ workOrder: unknown; inventory?: ConsignmentInventory | null }>( '/api/v1/admin/worker-platform/consignment/revoke', payload, ) }