gaoluyang
5 天以前 d841a8ea6dc2f7fdedbf0ea2b1e539842f5f3e37
src/api/erp/purchase/request/index.ts
@@ -38,12 +38,26 @@
    productUnitId?: number; // 产品单位编号
    productUnitName?: string; // 产品单位名称
    productBarCode?: string; // 产品条码
    productPrice?: number; // 产品单价(参考价)
    productPrice?: number; // 含税单价(参考价)
    count: number; // 数量
    taxPercent?: number; // 税率
    totalPrice?: number; // 不含税金额
    taxPrice?: number; // 税额
    demandTime?: string; // 需求日期
    remark?: string; // 备注
    qcCheckFlag?: boolean; // 是否质检
    inCount?: number; // 入库数量
  }
}
/** 采购申请导入结果 */
export interface ImportResult {
  /** 创建成功的采购申请单号 */
  createList?: string[];
  /** 更新成功的采购申请单号 */
  updateList?: string[];
  /** 导入失败集合,key 为采购申请单号或行号,value 为失败原因 */
  failureList?: Record<string, string>;
}
/** 创建采购申请 */
@@ -59,6 +73,11 @@
/** 提交采购申请审批 */
export function submitPurchaseRequest(id: number, processDefinitionKey: string) {
  return requestClient.put('/erp/purchase-request/submit', null, { params: { id, processDefinitionKey } });
}
/** 重置被驳回的采购申请为草稿状态 */
export function resetPurchaseRequestStatus(id: number) {
  return requestClient.put('/erp/purchase-request/reset-status', null, { params: { id } });
}
/** 生成采购订单 */
@@ -95,3 +114,47 @@
export function getApproveProcessList(id: number) {
  return requestClient.get(`/erp/purchase-request/approve-process-list`, { params: { id } });
}
/** BPM 流程实例状态 → 业务状态映射 */
export const BPM_STATUS_TO_BIZ: Record<number, number> = {
  1: 10, // RUNNING → 审批中
  2: 20, // APPROVE → 审核通过
  3: 30, // REJECT → 审核不通过
  4: 40, // CANCEL → 已取消
};
/**
 * 同步采购申请的业务状态(根据 BPM 流程实例实际状态)
 * 用于修复后端监听器未正确回写导致的业务状态不一致问题
 */
export async function syncPurchaseRequestStatus(items: ErpPurchaseRequestApi.PurchaseRequest[]) {
  const processingItems = items.filter(
    (item) => item.status === 10 && item.processInstanceId,
  );
  if (processingItems.length === 0) return;
  const { getApprovalDetail } = await import('#/api/bpm/processInstance');
  for (const item of processingItems) {
    try {
      const detail = await getApprovalDetail({
        processInstanceId: item.processInstanceId,
      });
      const bizStatus = BPM_STATUS_TO_BIZ[detail.processInstance?.status];
      if (bizStatus && bizStatus !== 10) {
        item.status = bizStatus;
      }
    } catch {
      // 查询失败时保持原有状态
    }
  }
}
/** 下载采购申请导入模板 */
export function importPurchaseRequestTemplate() {
  return requestClient.download('/erp/purchase-request/get-import-template');
}
/** 导入采购申请 */
export function importPurchaseRequest(file: File) {
  return requestClient.upload<ImportResult>('/erp/purchase-request/import', { file });
}