feat(erp): 采购计划/采购审核/到货跟踪 + 供应商管理

- 采购计划:选合同自动带出明细、合同/供应商表格选择器、批量填充(可生成N行)、卷号/数量列、送审/重新送审流程
- 采购审核:通过/驳回 + 申请意见,每次审核留痕(erp_purchase_plan_audit_log),计划详情展示审核历史/驳回理由
- 到货跟踪:上传到货Excel按牌号+规格回填明细到货量与状态,列校验/kg→t纠正,满额自动归档
- 供应商管理页(复用既有 erp_supplier 后端)
- 综合搜索(计划号/供货商/合同号)、左右分栏工作台、全局表单按钮对齐修复
- 清理无用旧 erp 页面(看板/需求/订单/收货/退货/汇总)
- DDL 与菜单脚本:docs/purchase-plan-ddl.sql(按 path 解析父目录、可重复执行)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-25 16:53:21 +08:00
parent 47931b75ae
commit ce3998db74
38 changed files with 3559 additions and 2842 deletions

View File

@@ -0,0 +1,124 @@
import request from '@/utils/request'
// 采购计划列表
export function listPurchasePlan(query) {
return request({
url: '/erp/purchasePlan/list',
method: 'get',
params: query
})
}
// 总体到货进度统计(已完成 N / 共 M
export function purchasePlanStatistics(query) {
return request({
url: '/erp/purchasePlan/statistics',
method: 'get',
params: query
})
}
// 采购计划详情
export function getPurchasePlan(planId) {
return request({
url: '/erp/purchasePlan/' + planId,
method: 'get'
})
}
// 按销售合同取明细(选合同自动带出明细)
export function getItemsByOrders(orderIds) {
return request({
url: '/erp/purchasePlan/itemsByOrders',
method: 'get',
params: { orderIds: (orderIds || []).join(',') }
})
}
// 合同列表(左侧,含每个合同已有计划数)
export function listContracts(query) {
return request({
url: '/erp/purchasePlan/contracts',
method: 'get',
params: query
})
}
// 某合同下的所有采购计划
export function listPlansByContract(orderId) {
return request({
url: '/erp/purchasePlan/byContract/' + orderId,
method: 'get'
})
}
// 新增采购计划
export function addPurchasePlan(data) {
return request({
url: '/erp/purchasePlan',
method: 'post',
data
})
}
// 修改采购计划
export function updatePurchasePlan(data) {
return request({
url: '/erp/purchasePlan',
method: 'put',
data
})
}
// 审核(通过/驳回 + 申请意见)
export function auditPurchasePlan(data) {
return request({
url: '/erp/purchasePlan/audit',
method: 'put',
data
})
}
// 送审 / 重新送审
export function submitPurchasePlan(planId) {
return request({
url: '/erp/purchasePlan/submit/' + planId,
method: 'put'
})
}
// 删除采购计划
export function delPurchasePlan(planIds) {
return request({
url: '/erp/purchasePlan/' + planIds,
method: 'delete'
})
}
// 导入到货 Excel
export function importDelivery(planId, file) {
const formData = new FormData()
formData.append('file', file)
return request({
url: `/erp/purchasePlan/${planId}/importDelivery`,
method: 'post',
data: formData,
headers: { 'Content-Type': 'multipart/form-data' }
})
}
// 某计划的到货明细
export function listDelivery(planId) {
return request({
url: `/erp/purchasePlan/${planId}/delivery`,
method: 'get'
})
}
// 删除到货明细
export function delDelivery(deliveryId) {
return request({
url: `/erp/purchasePlan/delivery/${deliveryId}`,
method: 'delete'
})
}