2026-02-04 17:22:20 +08:00
|
|
|
|
import request from '@/utils/request'
|
|
|
|
|
|
|
2026-02-05 16:54:11 +08:00
|
|
|
|
// 购物车商品项接口
|
|
|
|
|
|
export interface CartItem {
|
|
|
|
|
|
id: number
|
2026-02-04 17:22:20 +08:00
|
|
|
|
sku: string
|
2026-02-05 16:54:11 +08:00
|
|
|
|
name: string
|
|
|
|
|
|
spec_model: string
|
2026-02-04 17:22:20 +08:00
|
|
|
|
source_table: string
|
2026-02-05 16:54:11 +08:00
|
|
|
|
stock_quantity: number
|
|
|
|
|
|
available_quantity: number
|
2026-02-04 17:22:20 +08:00
|
|
|
|
barcode: string
|
2026-02-05 16:54:11 +08:00
|
|
|
|
price: number // 单价
|
|
|
|
|
|
out_quantity: number // 本次出库数量
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 提交出库单的数据结构
|
|
|
|
|
|
export interface OutboundSubmitData {
|
|
|
|
|
|
items: Array<{
|
|
|
|
|
|
sku: string
|
|
|
|
|
|
source_table: string
|
|
|
|
|
|
stock_id: number
|
|
|
|
|
|
barcode: string
|
|
|
|
|
|
quantity: number
|
|
|
|
|
|
price: number
|
|
|
|
|
|
}>
|
2026-02-04 17:22:20 +08:00
|
|
|
|
outbound_type: string
|
|
|
|
|
|
consumer_name: string
|
2026-02-05 16:54:11 +08:00
|
|
|
|
operator_name: string
|
2026-02-04 17:22:20 +08:00
|
|
|
|
signature_path: string // 上传后返回的图片路径
|
|
|
|
|
|
remark?: string
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
export interface ScanResult {
|
|
|
|
|
|
id: number
|
|
|
|
|
|
sku: string
|
|
|
|
|
|
name: string
|
|
|
|
|
|
spec_model: string
|
|
|
|
|
|
source_table: string // 'stock_buy' | 'stock_product' ...
|
|
|
|
|
|
stock_quantity: number
|
|
|
|
|
|
available_quantity: number
|
|
|
|
|
|
batch_number?: string
|
|
|
|
|
|
warehouse_location?: string
|
2026-02-05 10:20:52 +08:00
|
|
|
|
barcode?: string
|
2026-02-05 16:54:11 +08:00
|
|
|
|
price?: number // 扫描返回的价格
|
2026-02-04 17:22:20 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 根据条码获取库存物品详情
|
|
|
|
|
|
* @param barcode 扫描到的条码
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function getStockByBarcode(barcode: string) {
|
|
|
|
|
|
return request<any, ScanResult>({
|
2026-02-05 10:20:52 +08:00
|
|
|
|
url: '/v1/outbound/scan',
|
2026-02-04 17:22:20 +08:00
|
|
|
|
method: 'get',
|
|
|
|
|
|
params: { barcode }
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-02-05 16:54:11 +08:00
|
|
|
|
* 提交出库单 (批量)
|
2026-02-04 17:22:20 +08:00
|
|
|
|
*/
|
|
|
|
|
|
export function submitOutbound(data: OutboundSubmitData) {
|
|
|
|
|
|
return request({
|
2026-02-05 10:20:52 +08:00
|
|
|
|
url: '/v1/outbound',
|
2026-02-04 17:22:20 +08:00
|
|
|
|
method: 'post',
|
|
|
|
|
|
data
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 获取出库记录列表
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function getOutboundList(params: any) {
|
|
|
|
|
|
return request({
|
2026-02-05 10:20:52 +08:00
|
|
|
|
url: '/v1/outbound',
|
2026-02-04 17:22:20 +08:00
|
|
|
|
method: 'get',
|
|
|
|
|
|
params
|
|
|
|
|
|
})
|
2026-04-28 16:02:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 提交出库申请单(申请人 → 审批流)
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function submitOutboundRequest(data: {
|
|
|
|
|
|
items: Array<{
|
|
|
|
|
|
material_type?: string
|
|
|
|
|
|
name: string
|
|
|
|
|
|
spec_model: string
|
|
|
|
|
|
warehouse_location?: string
|
|
|
|
|
|
quantity: number
|
|
|
|
|
|
}>
|
|
|
|
|
|
remark: string
|
|
|
|
|
|
}) {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/v1/outbound/request',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-09-09 10:47:29 +08:00
|
|
|
|
// 出库申请预检:判断所选物料是否需审批
|
|
|
|
|
|
export function checkOutboundApproval(data: { items: Array<{ name?: string; spec_model?: string }> }) {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/v1/outbound/request/check-approval',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-28 16:02:34 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 获取出库审批申请单列表
|
|
|
|
|
|
* @param params 支持 status, page, limit
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function getApprovalRequestList(params: { status?: number | ''; page?: number; limit?: number }) {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/v1/outbound/request',
|
|
|
|
|
|
method: 'get',
|
|
|
|
|
|
params
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 审批(通过 / 驳回)出库申请单
|
|
|
|
|
|
* @param id 审批单ID
|
|
|
|
|
|
* @param data action: 'approve' | 'reject',reject 时需传 reject_reason
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function approveRequest(id: number, data: { action: 'approve' | 'reject'; reject_reason?: string }) {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: `/v1/outbound/request/${id}/approve`,
|
|
|
|
|
|
method: 'patch',
|
|
|
|
|
|
data
|
|
|
|
|
|
})
|
2026-07-15 17:52:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-08-31 10:15:33 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 手动完结/作废已通过的出库申请单(状态 1-已通过 → 4-已完结)
|
|
|
|
|
|
* @param id 审批单ID
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function closeRequest(id: number) {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: `/v1/outbound/request/${id}/close`,
|
|
|
|
|
|
method: 'post'
|
|
|
|
|
|
})
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-07-15 17:52:08 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* BOM 匹配库存(替代前端 while(true) 全量加载)
|
|
|
|
|
|
* 根据 BOM 子件的 base_id 列表,服务端精确查询有库存的记录
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function bomMatchStock(childIds: number[]) {
|
|
|
|
|
|
return request({
|
|
|
|
|
|
url: '/v1/outbound/bom-match-stock',
|
|
|
|
|
|
method: 'post',
|
|
|
|
|
|
data: { child_ids: childIds }
|
|
|
|
|
|
})
|
2026-02-04 17:22:20 +08:00
|
|
|
|
}
|