完善 ERP 采购管理模块,实现从采购申请到采购入库的完整流程管理。
流程说明:
- 采购申请:需要 BPM 审批,审批通过后可生成采购订单
- 采购订单:由采购申请生成,无需审批,直接可进行入库操作
采购申请审批需要 BPM 流程支持,必须先完成以下配置:
purchase_request_approve 分类执行 SQL:sql -- 创建 BPM 采购申请审批分类 INSERT INTO bpm_category (id, name, code, description, status, sort, creator, create_time, updater, update_time, deleted) VALUES (101, '采购申请审批', 'purchase_request_approve', '采购申请审批流程分类', 0, 11, '1', NOW(), '1', NOW(), 0);
| 序号 | 功能模块 | 页面路径 | 功能说明 |
|---|---|---|---|
| 1 | 采购申请 | /erp/purchase/request |
需求部门发起采购需求、BPM 审批、生成采购订单 |
| 2 | 供应商管理 | /erp/purchase/supplier |
供应商主数据档案管理 |
| 3 | 采购订单 | /erp/purchase/order |
采购订单管理(无需审批,由采购申请生成) |
| 4 | 采购入库 | /erp/purchase/in |
到货入库、验收管理 |
| 5 | 采购退货 | /erp/purchase/return |
采购退货管理 |
| 6 | 采购统计 | /erp/purchase/statistics |
统计分析报表 |
完整的采购流程为:
采购申请 -> 审批 -> 采购订单 -> 入库 -> 付款
详细文档:采购申请功能详见 docs/erp_purchase_request_frontend.md
/erp/purchase/supplier/index - 供应商列表/erp/purchase/supplier/form - 供应商表单| 字段 | 类型 | 说明 |
|---|---|---|
| creditCode | String | 统一社会信用代码 |
| bankName | String | 开户银行 |
| bankAccount | String | 银行账号 |
| address | String | 地址 |
| contact | String | 联系人 |
| phone | String | 联系电话 |
| String | 邮箱 | |
| taxNo | String | 税号 |
| qualification | String | 资质信息 |
| cooperationTime | Date | 合作开始时间 |
<el-form :model="form" :rules="rules">
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="供应商名称" prop="name">
<el-input v-model="form.name" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="统一社会信用代码" prop="creditCode">
<el-input v-model="form.creditCode" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="税号" prop="taxNo">
<el-input v-model="form.taxNo" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="联系人" prop="contact">
<el-input v-model="form.contact" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系电话" prop="phone">
<el-input v-model="form.phone" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="邮箱" prop="email">
<el-input v-model="form.email" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="8">
<el-form-item label="开户银行" prop="bankName">
<el-input v-model="form.bankName" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="银行账号" prop="bankAccount">
<el-input v-model="form.bankAccount" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="合作开始时间" prop="cooperationTime">
<el-date-picker v-model="form.cooperationTime" type="date" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="16">
<el-form-item label="地址" prop="address">
<el-input v-model="form.address" />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio :label="0">启用</el-radio>
<el-radio :label="1">禁用</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
</el-row>
<el-form-item label="资质信息" prop="qualification">
<el-input v-model="form.qualification" type="textarea" :rows="3" />
</el-form-item>
</el-form>
| 字段 | 类型 | 说明 |
|---|---|---|
| inspectionStatus | Integer | 验收状态(0:待验收 1:已验收 2:验收不合格) |
| inspectionTime | DateTime | 验收时间 |
| inspectorId | Long | 遇收人员编号 |
| inspectionResult | String | 验收结果 |
<!-- 验收按钮 -->
<el-button @click="handleInspection(row)" v-if="row.inspectionStatus === 0">
验收
</el-button>
<!-- 验收弹窗 -->
<el-dialog title="采购入库验收" v-model="inspectionDialogVisible">
<el-form :model="inspectionForm">
<el-form-item label="验收状态">
<el-radio-group v-model="inspectionForm.inspectionStatus">
<el-radio :label="1">验收合格</el-radio>
<el-radio :label="2">验收不合格</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="验收结果">
<el-input v-model="inspectionForm.inspectionResult" type="textarea" />
</el-form-item>
</el-form>
<template #footer>
<el-button @click="inspectionDialogVisible = false">取消</el-button>
<el-button type="primary" @click="submitInspection">确定</el-button>
</template>
</el-dialog>
/erp/purchase/statistics/index - 采购统计首页/erp/purchase/statistics/supplier - 供应商供货统计/erp/purchase/statistics/price - 采购价格分析/erp/purchase/statistics/uncompleted - 未完成订单跟踪| 方法 | 路径 | 说明 |
|---|---|---|
| GET | /erp/purchase-statistics/summary | 采购汇总统计 |
| GET | /erp/purchase-statistics/supplier | 供应商供货统计 |
| GET | /erp/purchase-statistics/price | 采购价格分析 |
| GET | /erp/purchase-statistics/uncompleted | 未完成订单跟踪 |
{
"code": 0,
"data": [
{
"supplierId": 1,
"supplierName": "供应商A",
"orderCount": 10,
"orderAmount": 100000.00,
"inCount": 8,
"inAmount": 80000.00,
"returnCount": 1,
"returnAmount": 5000.00
}
],
"msg": "操作成功"
}
{
"code": 0,
"data": [
{
"productId": 1,
"productName": "产品A",
"productBarCode": "12345678",
"avgPrice": 50.00,
"minPrice": 45.00,
"maxPrice": 55.00,
"latestPrice": 52.00,
"priceChangeRate": 4.0
}
],
"msg": "操作成功"
}
{
"code": 0,
"data": [
{
"orderId": 1,
"orderNo": "PO202401001",
"supplierName": "供应商A",
"orderTime": "2024-01-01",
"productNames": "产品A,产品B",
"orderAmount": 10000.00,
"inAmount": 5000.00,
"uncompletedAmount": 5000.00,
"daysOverdue": 5
}
],
"msg": "操作成功"
}