From a956b0ea73c9891a6e0e1325d093f6b63e3e8501 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 03 九月 2026 13:52:56 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_pro2.0' into dev_pro2.0

---
 src/views/erp/purchase/request/index.vue |   14 +++++-
 src/views/mes/md/item/type/index.vue     |   14 +++++++
 src/views/erp/purchase/request/data.ts   |    4 +-
 src/api/erp/purchase/request/index.ts    |   34 +++++++++++++++++
 4 files changed, 61 insertions(+), 5 deletions(-)

diff --git a/src/api/erp/purchase/request/index.ts b/src/api/erp/purchase/request/index.ts
index c446da4..831cb1e 100644
--- a/src/api/erp/purchase/request/index.ts
+++ b/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 娴佺▼瀹炰緥瀹為檯鐘舵�侊級
+ * 鐢ㄤ簬淇鍚庣鐩戝惉鍣ㄦ湭姝g‘鍥炲啓瀵艰嚧鐨勪笟鍔$姸鎬佷笉涓�鑷撮棶棰�
+ */
+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 {
+      // 鏌ヨ澶辫触鏃朵繚鎸佸師鏈夌姸鎬�
+    }
+  }
+}
diff --git a/src/views/erp/purchase/request/data.ts b/src/views/erp/purchase/request/data.ts
index cc4745b..ac87d16 100644
--- a/src/views/erp/purchase/request/data.ts
+++ b/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: '璇烽�夋嫨鐘舵��',
diff --git a/src/views/erp/purchase/request/index.vue b/src/views/erp/purchase/request/index.vue
index cd97ba8..26539b3 100644
--- a/src/views/erp/purchase/request/index.vue
+++ b/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 }">
diff --git a/src/views/mes/md/item/type/index.vue b/src/views/mes/md/item/type/index.vue
index 0bf9953..859dcb2 100644
--- a/src/views/mes/md/item/type/index.vue
+++ b/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,

--
Gitblit v1.9.3