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

Batch 2: ERP 采购订单审批集成 - 前端修改文档

概述

本批次为 ERP 采购订单模块集成 BPM 流程审批功能,实现采购订单的审批流程化管理。

涉及页面

  • 修改页面:采购订单管理页面(新增提交审批、审批状态展示)
  • 新增配置:BPM 流程模型配置

API

方法 路径 说明
POST /erp/purchase-order/submit 提交采购订单审批

请求参数:

参数 类型 必填 说明
id Long 采购订单编号

响应:

{
  "code": 0,
  "data": true,
  "msg": "操作成功"
}

前端修改点

1. 采购订单列表页面修改

文件路径: src/views/erp/purchase/order/index.vue

1.1 新增提交审批按钮

在操作列新增"提交审批"按钮,仅草稿状态可见:

<el-table-column label="操作" align="center" fixed="right" width="200">
  <template #default="scope">
    <el-button
      link
      type="primary"
      @click="handleUpdate(scope.row.id)"
      v-hasPermi="['erp:purchase-order:update']"
      v-if="scope.row.status === 0"
    >
      编辑
    </el-button>
    <el-button
      link
      type="primary"
      @click="handleSubmit(scope.row.id)"
      v-hasPermi="['erp:purchase-order:update']"
      v-if="scope.row.status === 0"
    >
      提交审批
    </el-button>
    <el-button
      link
      type="primary"
      @click="handleApprove(scope.row.id)"
      v-hasPermi="['erp:purchase-order:update-status']"
      v-if="scope.row.status === 10"
    >
      审批通过
    </el-button>
    <el-button
      link
      type="danger"
      @click="handleDelete(scope.row.id)"
      v-hasPermi="['erp:purchase-order:delete']"
      v-if="scope.row.status === 0 || scope.row.status === 30"
    >
      删除
    </el-button>
  </template>
</el-table-column>

1.2 新增提交审批方法

/** 提交审批 */
const handleSubmit = async (id: number) => {
  try {
    await message.confirm('确认提交该采购订单进行审批?')
    await PurchaseOrderApi.submitPurchaseOrder(id)
    message.success('提交成功')
    await getList()
  } catch {}
}

1.3 修改状态列显示

<el-table-column label="状态" align="center" prop="status" width="100">
  <template #default="scope">
    <dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
  </template>
</el-table-column>

2. API 接口文件修改

文件路径: src/api/erp/purchase/order/index.ts

新增提交审批接口:

// 提交采购订单审批
export const submitPurchaseOrder = async (id: number) => {
  return await request.post({ url: '/erp/purchase-order/submit?id=' + id })
}

3. 字典类型确认

文件路径: src/utils/dict.ts

确保 DICT_TYPE 中已包含:

ERP_AUDIT_STATUS = 'erp_audit_status'

字典数据需要包含以下值:
- 0: 草稿(info 颜色)
- 10: 审批中(warning 颜色)
- 20: 审批通过(success 颜色)
- 30: 审批不通过(danger 颜色)


BPM 流程模型配置

流程模型信息

在 BPM 管理后台创建流程模型:

配置项
流程标识(Key) erp-purchase-order-audit
流程名称 ERP 采购订单审批流程
流程分类 业务流程

流程设计建议

开始节点 → 部门主管审批 → 采购经理审批 → 结束节点

审批结果:
- 通过:状态变为 20(审批通过)
- 不通过:状态变为 30(审批不通过)
- 取消:状态变为 0(草稿)


注意事项

  1. 创建采购订单时,默认状态从"未审核"改为"草稿"
  2. 只有草稿状态的订单才能提交审批
  3. 审批中的订单不能编辑和删除
  4. 审批不通过的订单可以重新编辑后再次提交
  5. 需要先执行数据库脚本,再部署后端代码
  6. 需要在 BPM 管理后台创建流程模型(Key: erp-purchase-order-audit)

后端新增/修改文件清单

yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/
├── enums/
│   ├── ErpAuditStatus.java (修改:新增 DRAFT、REJECT 状态)
│   └── ErrorCodeConstants.java (修改:新增错误码)
├── dal/dataobject/purchase/
│   └ ErpPurchaseOrderDO.java (修改:新增 processInstanceId 字段)
├── service/purchase/
│   ├── ErpPurchaseOrderService.java (修改:新增接口方法)
│   ├── ErpPurchaseOrderServiceImpl.java (修改:实现 BPM 集成)
│   └── listener/
│       └── ErpPurchaseOrderStatusListener.java (新增:审批状态监听器)
└── controller/admin/purchase/
    └ ErpPurchaseOrderController.java (修改:新增提交审批接口)

状态流转图

┌─────────────┐
│    草稿     │
│   (status=0)│
└──────┬──────┘
       │ 提交审批
       ↓
┌─────────────┐
│   审批中    │
│  (status=10)│
└──────┬──────┘
       │ 审批结果
       ├──────────────┬──────────────┐
       ↓              ↓              ↓
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 审批通过    │ │ 审批不通过  │ │   取消      │
│ (status=20) │ │ (status=30) │ │  (status=0) │
└─────────────┘ └──────┬──────┘ └─────────────┘
                  │ 重新编辑
                  └──────────────┘

文档版本: v1.0
创建日期: 2026-06-26