按用户原始逻辑还原并扩展: - 单号格式: PUR-日期-时间-批次-批内序号 例: PUR-20260831-1021-0001-0001(今日第1次采购的第1条) - generate_request_no 支持 batch_seq 参数生成批次+批内序号 - 新增 GET /purchase/next-batch-seq 返回今日下一个批次号 - 前端提交时获取批次号,同批所有行共享,循环提交生成连续批内序号 - 批次识别: 单号去掉末尾 -批内序号 即为批次前缀 - 保留旧格式兼容(无 batch_seq 时回退 PUR-日期-时间-流水)
158 lines
3.3 KiB
TypeScript
158 lines
3.3 KiB
TypeScript
import request from '@/utils/request'
|
||
|
||
export interface PurchaseItem {
|
||
id?: number
|
||
request_no?: string
|
||
base_id?: number
|
||
name: string
|
||
spec_model?: string
|
||
quantity: number
|
||
purchase_date: string
|
||
supplier_link?: string
|
||
remark?: string
|
||
images?: string[]
|
||
unit_price?: number
|
||
total_price?: number
|
||
tax_rate?: number
|
||
status: number
|
||
status_text?: string
|
||
requester_id?: number
|
||
requester_name?: string
|
||
requester_email?: string
|
||
approver_id?: number
|
||
approver_name?: string
|
||
approved_at?: string
|
||
reject_reason?: string
|
||
created_at?: string
|
||
updated_at?: string
|
||
// [新增] 关联物料基础信息(已审批未入库列表返回)
|
||
material?: {
|
||
id: number
|
||
company_name: string
|
||
name: string
|
||
spec_model: string
|
||
category: string
|
||
unit: string
|
||
type: string
|
||
is_inspection_required: boolean
|
||
} | null
|
||
}
|
||
|
||
export interface Approver {
|
||
id: number
|
||
username: string
|
||
email: string
|
||
role: string
|
||
}
|
||
|
||
// 获取采购申请列表
|
||
export function getPurchaseList(params: {
|
||
page?: number
|
||
limit?: number
|
||
status?: number
|
||
}) {
|
||
return request({
|
||
url: '/purchase',
|
||
method: 'get',
|
||
params
|
||
})
|
||
}
|
||
|
||
// 创建采购申请
|
||
export function createPurchase(data: PurchaseItem) {
|
||
return request({
|
||
url: '/purchase',
|
||
method: 'post',
|
||
data
|
||
})
|
||
}
|
||
|
||
// 获取采购申请详情
|
||
export function getPurchaseDetail(id: number) {
|
||
return request({
|
||
url: `/purchase/${id}`,
|
||
method: 'get'
|
||
})
|
||
}
|
||
|
||
// 审批采购申请
|
||
export function approvePurchase(id: number, data: {
|
||
action: 'approve' | 'reject'
|
||
reject_reason?: string
|
||
}) {
|
||
return request({
|
||
url: `/purchase/${id}/approve`,
|
||
method: 'patch',
|
||
data
|
||
})
|
||
}
|
||
|
||
// 批量审批采购申请(循环提交产生的多条记录可一次审批)
|
||
export function batchApprovePurchase(data: {
|
||
ids?: number[]
|
||
batch_key?: string
|
||
action: 'approve' | 'reject'
|
||
reject_reason?: string
|
||
}) {
|
||
return request({
|
||
url: '/purchase/batch-approve',
|
||
method: 'post',
|
||
data
|
||
})
|
||
}
|
||
|
||
// 按批次前缀查询同批次的采购申请记录(批次=request_no去掉末尾流水号)
|
||
export function getPurchaseByBatch(batchKey: string) {
|
||
return request({
|
||
url: `/purchase/batch/${encodeURIComponent(batchKey)}`,
|
||
method: 'get'
|
||
})
|
||
}
|
||
|
||
// 获取今日下一个采购批次号(提交一批时调用,同批所有行共享)
|
||
export function getNextBatchSeq() {
|
||
return request({
|
||
url: '/purchase/next-batch-seq',
|
||
method: 'get'
|
||
})
|
||
}
|
||
|
||
// 获取可选审批人列表
|
||
export function getPurchaseApprovers() {
|
||
return request({
|
||
url: '/purchase/approvers',
|
||
method: 'get'
|
||
})
|
||
}
|
||
|
||
// 根据名称/规格自动补全
|
||
export function autoFillPurchase(keyword: string) {
|
||
return request({
|
||
url: '/purchase/auto-fill',
|
||
method: 'get',
|
||
params: { keyword }
|
||
})
|
||
}
|
||
|
||
// 物料基础信息搜索(分页),用于采购申请弹窗
|
||
export function searchMaterialPurchase(keyword: string, page: number = 1) {
|
||
return request({
|
||
url: '/purchase/search-material',
|
||
method: 'get',
|
||
params: { keyword, page }
|
||
})
|
||
}
|
||
|
||
// [新增] 获取已审批通过且未入库的采购单列表(供库管按单入库使用)
|
||
export function getApprovedUnstockedRequests(params: {
|
||
page?: number
|
||
limit?: number
|
||
keyword?: string
|
||
}) {
|
||
return request({
|
||
url: '/purchase/approved-unstocked',
|
||
method: 'get',
|
||
params
|
||
})
|
||
}
|