liu
2026-09-03 a956b0ea73c9891a6e0e1325d093f6b63e3e8501
Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0
已修改4个文件
66 ■■■■■ 文件已修改
src/api/erp/purchase/request/index.ts 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/request/data.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/request/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/md/item/type/index.vue 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/erp/purchase/request/index.ts
@@ -95,3 +95,37 @@
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 {
      // 查询失败时保持原有状态
    }
  }
}
src/views/erp/purchase/request/data.ts
@@ -271,8 +271,8 @@
        options: [
          { label: '未提交', value: 0 },
          { label: '审批中', value: 10 },
          { label: '审核通过', value: 20 },
          { label: '审核不通过', value: 30 },
          { label: '审批通过', value: 20 },
          { label: '审批不通过', value: 30 },
          { label: '已取消', value: 40 },
        ],
        placeholder: '请选择状态',
src/views/erp/purchase/request/index.vue
@@ -17,6 +17,7 @@
  getApproveProcessList,
  getPurchaseRequestPage,
  submitPurchaseRequest,
  syncPurchaseRequestStatus,
} from '#/api/erp/purchase/request';
import { $t } from '#/locales';
@@ -145,11 +146,18 @@
    proxyConfig: {
      ajax: {
        query: async ({ page }, formValues) => {
          return await getPurchaseRequestPage({
          const result = await getPurchaseRequestPage({
            pageNo: page.currentPage,
            pageSize: page.pageSize,
            ...formValues,
          });
          const processingItems = (result.list || []).filter(
            (item) => item.status === 10 && item.processInstanceId,
          );
          if (processingItems.length > 0) {
            await syncPurchaseRequestStatus(processingItems);
          }
          return result;
        },
      },
    },
@@ -210,8 +218,8 @@
      <template #status="{ row }">
        <Tag v-if="row.status === 0" color="default">未提交</Tag>
        <Tag v-else-if="row.status === 10" color="processing">审批中</Tag>
        <Tag v-else-if="row.status === 20" color="success">审核通过</Tag>
        <Tag v-else-if="row.status === 30" color="error">审核不通过</Tag>
        <Tag v-else-if="row.status === 20" color="success">审批通过</Tag>
        <Tag v-else-if="row.status === 30" color="error">审批不通过</Tag>
        <Tag v-else-if="row.status === 40" color="warning">已取消</Tag>
      </template>
      <template #inStatus="{ row }">
src/views/mes/md/item/type/index.vue
@@ -15,6 +15,8 @@
  exportItemType,
  getItemTypeList,
} from '#/api/mes/md/item/type';
import { getItemPage as getMesItemPage } from '#/api/mes/md/item';
import { getItemPage as getMdmItemPage } from '#/api/mdm/item';
import { $t } from '#/locales';
import { useGridColumns, useGridFormSchema } from './data';
@@ -72,6 +74,18 @@
/** 删除分类 */
async function handleDelete(row: MesMdItemTypeApi.ItemType) {
  try {
    const [mesResult, mdmResult] = await Promise.all([
      getMesItemPage({ pageNo: 1, pageSize: 1, itemTypeId: row.id }),
      getMdmItemPage({ pageNo: 1, pageSize: 1, categoryId: row.id } as any),
    ]);
    if (mesResult.total > 0 || mdmResult.total > 0) {
      message.error('该分类下存在物料,无法删除');
      return;
    }
  } catch {
    // 查询异常时继续执行删除,由后端兜底校验
  }
  const hideLoading = message.loading({
    content: $t('ui.actionMessage.deleting', [row.name]),
    duration: 0,