编辑 | blame | 历史 | 原始文档

ERP 采购管理模块完善 - 前端变更文档

概述

完善 ERP 采购管理模块,实现从采购申请到采购入库的完整流程管理。

流程说明
- 采购申请:需要 BPM 审批,审批通过后可生成采购订单
- 采购订单:由采购申请生成,无需审批,直接可进行入库操作


一、前置条件

BPM 流程配置(采购申请)

采购申请审批需要 BPM 流程支持,必须先完成以下配置:

  1. 创建采购申请审批分类:在 BPM 流程分类中创建 purchase_request_approve 分类
  2. 创建采购申请审批流程:在 BPM 流程模型中创建采购申请审批流程

执行 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 统计分析报表

采购流程说明

完整的采购流程为:

采购申请 -> 审批 -> 采购订单 -> 入库 -> 付款

  1. 采购申请:需求部门发起采购需求,填写申请理由和产品明细
  2. 审批:通过 BPM 工作流进行审批
  3. 采购订单:审批通过后,选择供应商生成采购订单(无需再审批)
  4. 入库:供应商发货后,进行入库验收
  5. 付款:根据入库情况进行付款

详细文档:采购申请功能详见 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 联系电话
email 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 - 未完成订单跟踪

API 变更

方法 路径 说明
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": "操作成功"
}

六、注意事项

  1. 数据完整性:供应商主数据需填写完整信息,包括信用代码、联系方式、银行信息等
  2. 验收管理:采购入库需进行验收,验收合格后才正式入库
  3. 权限控制:每个功能模块都有独立的权限控制,需配置角色权限
  4. 数据追溯:所有操作记录都有完整的创建人、创建时间、审批人、审批时间等信息