From 6797c356a987656940505759d1d9846692e85544 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 16 七月 2026 16:16:03 +0800
Subject: [PATCH] 银川 1.到货通知与采购入库流程联调

---
 src/views/erp/purchase/order/data.ts       |    2 
 src/views/mes/qc/template/data.ts          |    5 +
 src/views/wls/itemreceipt/modules/form.vue |   54 ++---------------
 src/views/wls/arrivalnotice/index.vue      |   25 ++++++-
 src/views/wls/arrivalnotice/data.ts        |   16 ++++-
 src/views/wls/itemreceipt/data.ts          |   19 ++++++
 6 files changed, 63 insertions(+), 58 deletions(-)

diff --git a/src/views/erp/purchase/order/data.ts b/src/views/erp/purchase/order/data.ts
index 761cbad..98b77db 100644
--- a/src/views/erp/purchase/order/data.ts
+++ b/src/views/erp/purchase/order/data.ts
@@ -448,7 +448,7 @@
     },
     {
       title: '鎿嶄綔',
-      width: 260,
+      width: 340,
       fixed: 'right',
       slots: { default: 'actions' },
     },
diff --git a/src/views/mes/qc/template/data.ts b/src/views/mes/qc/template/data.ts
index 6301c05..1f5add0 100644
--- a/src/views/mes/qc/template/data.ts
+++ b/src/views/mes/qc/template/data.ts
@@ -17,7 +17,7 @@
 
 import { z } from '#/adapter/form';
 import { generateAutoCode } from '#/api/mes/md/autocode/record';
-import { getItemList } from '#/api/mdm/item';
+import { getItemPage } from '#/api/mdm/item';
 import { MdUnitMeasureSelect } from '#/views/mes/md/unitmeasure/components';
 import { QcIndicatorSelect } from '#/views/mes/qc/indicator/components';
 
@@ -426,7 +426,8 @@
         placeholder: '璇烽�夋嫨浜у搧鐗╂枡',
         allowClear: true,
         showSearch: true,
-        api: getItemList,
+        api: getItemPage,
+        resultField: 'list',
         labelField: 'name',
         valueField: 'id',
         optionRender: (option: any) => {
diff --git a/src/views/wls/arrivalnotice/data.ts b/src/views/wls/arrivalnotice/data.ts
index e275e2f..812b6dd 100644
--- a/src/views/wls/arrivalnotice/data.ts
+++ b/src/views/wls/arrivalnotice/data.ts
@@ -11,8 +11,8 @@
 
 import { z } from '#/adapter/form';
 import { generateAutoCode } from '#/api/mes/md/autocode/record';
+import { getItemPage } from '#/api/mdm/item';
 import { getRangePickerDefaultProps } from '#/utils';
-import { MdItemSelect } from '#/views/mes/md/item/components';
 import { MdVendorSelect } from '#/views/mes/md/vendor/components';
 import { ErpPurchaseOrderSelect } from '#/views/erp/purchase/order/components';
 
@@ -347,11 +347,21 @@
     {
       fieldName: 'itemId',
       label: '鐗╂枡',
-      component: markRaw(MdItemSelect),
+      component: 'ApiSelect',
       componentProps: {
         placeholder: '璇烽�夋嫨鐗╂枡',
+        allowClear: true,
+        showSearch: true,
+        api: getItemPage,
+        resultField: 'list',
+        labelField: 'name',
+        valueField: 'id',
+        optionRender: (option: any) => {
+          const item = option.data;
+          return `${item.code} - ${item.name}`;
+        },
       },
-      rules: 'selectRequired',
+      rules: 'required',
     },
     {
       fieldName: 'arrivalQuantity',
diff --git a/src/views/wls/arrivalnotice/index.vue b/src/views/wls/arrivalnotice/index.vue
index 15f292e..5cfe5b4 100644
--- a/src/views/wls/arrivalnotice/index.vue
+++ b/src/views/wls/arrivalnotice/index.vue
@@ -15,6 +15,7 @@
   generateArrivalNoticeFromPurchaseOrder,
   getArrivalNoticePage,
 } from '#/api/mes/wm/arrivalnotice';
+import { generateItemReceiptFromArrivalNotice } from '#/api/mes/wm/itemreceipt';
 import { $t } from '#/locales';
 
 import { useGridColumns, useGridFormSchema } from './data';
@@ -68,12 +69,22 @@
 
 /** 鎻愮ず鍓嶅線璐ㄦ妯″潡 */
 function handleQc() {
-  message.info('璇峰墠寰�銆愯川閲忕鐞� - 寰呮浠诲姟銆戜腑杩涜鏉ユ枡妫�楠屾搷浣�');
+  message.info('璇峰墠寰�銆愯川閲忕鐞� - IQC妫�楠屻�戜腑杩涜鏉ユ枡妫�楠屾搷浣�');
 }
 
-/** 鎻愮ず鍓嶅線閲囪喘鍏ュ簱妯″潡 */
-function handleReceipt() {
-  message.info('璇峰墠寰�銆愪粨搴撶鐞� - 閲囪喘鍏ュ簱銆戜腑杩涜鍏ュ簱鎿嶄綔');
+/** 鎵ц鍏ュ簱锛氭牴鎹埌璐ч�氱煡鍗曠敓鎴愰噰璐叆搴撳崟 */
+async function handleReceipt(row: MesWmArrivalNoticeApi.ArrivalNotice) {
+  const hideLoading = message.loading({
+    content: '姝e湪鐢熸垚閲囪喘鍏ュ簱鍗�...',
+    duration: 0,
+  });
+  try {
+    await generateItemReceiptFromArrivalNotice(row.id!);
+    message.success('鍏ュ簱鎴愬姛');
+    handleRefresh();
+  } finally {
+    hideLoading();
+  }
 }
 
 /** 浠庨噰璐鍗曠敓鎴愬埌璐ч�氱煡鍗� */
@@ -205,9 +216,13 @@
             {
               label: '鎵ц鍏ュ簱',
               type: 'link',
+              auth: ['mes:wm-item-receipt:create'],
               ifShow:
                 row.status === MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT,
-              onClick: handleReceipt,
+              popConfirm: {
+                title: `纭鏍规嵁鍒拌揣閫氱煡鍗� ${row.code} 鐢熸垚閲囪喘鍏ュ簱鍗曪紵`,
+                confirm: handleReceipt.bind(null, row),
+              },
             },
           ]"
         />
diff --git a/src/views/wls/itemreceipt/data.ts b/src/views/wls/itemreceipt/data.ts
index 135042d..4f72501 100644
--- a/src/views/wls/itemreceipt/data.ts
+++ b/src/views/wls/itemreceipt/data.ts
@@ -115,9 +115,18 @@
           await formApi?.setValues({
             purchaseOrderCode: notice?.purchaseOrderCode,
             vendorId: notice?.vendorId,
+            vendorName: notice?.vendorName,
           });
         },
         status: MesWmArrivalNoticeStatusEnum.PENDING_RECEIPT,
+      },
+    },
+    {
+      fieldName: 'vendorName',
+      component: 'Input',
+      dependencies: {
+        triggerFields: [''],
+        show: () => false,
       },
     },
     {
@@ -126,8 +135,18 @@
       component: markRaw(ErpSupplierSelect),
       componentProps: {
         placeholder: '璇烽�夋嫨渚涘簲鍟�',
+        onChange: async (supplier?: any) => {
+          await formApi?.setFieldValue('vendorName', supplier?.name);
+        },
       },
       rules: 'selectRequired',
+      dependencies: {
+        triggerFields: ['vendorName'],
+        componentProps: (values) => ({
+          placeholder: '璇烽�夋嫨渚涘簲鍟�',
+          supplierName: values.vendorName as string,
+        }),
+      },
     },
     {
       fieldName: 'purchaseOrderCode',
diff --git a/src/views/wls/itemreceipt/modules/form.vue b/src/views/wls/itemreceipt/modules/form.vue
index 6794cc1..0a0fe1a 100644
--- a/src/views/wls/itemreceipt/modules/form.vue
+++ b/src/views/wls/itemreceipt/modules/form.vue
@@ -17,7 +17,6 @@
   getItemReceipt,
   stockItemReceipt,
   submitItemReceipt,
-  submitItemReceiptApproval,
   updateItemReceipt,
 } from '#/api/mes/wm/itemreceipt';
 import { $t } from '#/locales';
@@ -28,22 +27,14 @@
 const emit = defineEmits(['success']);
 const formType = ref<FormType>('create');
 const formData = ref<MesWmItemReceiptApi.ItemReceipt>();
-const originalSnapshot = ref(''); // 琛ㄥ崟鍘熷鏁版嵁蹇収锛岀敤浜庢彁浜ゆ椂璺宠繃鏈彉鏇寸殑淇濆瓨璇锋眰
+const originalSnapshot = ref('');
 const isEditable = computed(() =>
-  // 鏄惁涓虹紪杈戞ā寮忥紙鍙繚瀛橈級
   ['create', 'update'].includes(formType.value),
 );
-const isStock = computed(() => formType.value === 'stock'); // 鏄惁涓轰笂鏋舵ā寮�
-const isFinish = computed(() => formType.value === 'finish'); // 鏄惁涓烘墽琛屽叆搴撴ā寮�
+const isStock = computed(() => formType.value === 'stock');
+const isFinish = computed(() => formType.value === 'finish');
 const canSubmit = computed(
   () =>
-    // 鏄惁鍙彁浜�
-    formType.value === 'update' &&
-    formData.value?.status === MesWmItemReceiptStatusEnum.PREPARE,
-);
-const canSubmitApproval = computed(
-  () =>
-    // 鏄惁鍙彁浜ゅ鎵�
     formType.value === 'update' &&
     formData.value?.status === MesWmItemReceiptStatusEnum.PREPARE,
 );
@@ -76,7 +67,7 @@
   wrapperClass: 'grid-cols-3',
 });
 
-/** 鎻愪氦鍏ュ簱鍗曪細琛ㄥ崟鏈変慨鏀规椂鍏堜繚瀛橈紝鍐嶈皟鐢ㄦ彁浜ゆ帴鍙� */
+/** 鎻愪氦鍏ュ簱鍗� */
 async function handleSubmit() {
   const { valid } = await formApi.validate();
   if (!valid || !formData.value?.id) {
@@ -102,9 +93,7 @@
 
 /** 鎵ц涓婃灦 */
 async function handleStock() {
-  if (!formData.value?.id) {
-    return;
-  }
+  if (!formData.value?.id) return;
   modalApi.lock();
   try {
     await stockItemReceipt(formData.value.id);
@@ -118,31 +107,11 @@
 
 /** 鎵ц鍏ュ簱 */
 async function handleFinish() {
-  if (!formData.value?.id) {
-    return;
-  }
+  if (!formData.value?.id) return;
   modalApi.lock();
   try {
     await finishItemReceipt(formData.value.id);
     message.success('鍏ュ簱鎴愬姛');
-    await modalApi.close();
-    emit('success');
-  } finally {
-    modalApi.unlock();
-  }
-}
-
-/** 鎻愪氦瀹℃壒 */
-async function handleSubmitApproval() {
-  if (!formData.value?.id) {
-    return;
-  }
-  modalApi.lock();
-  try {
-    // 浣跨敤榛樿娴佺▼key锛屽疄闄呴」鐩腑鍙兘闇�瑕佸脊绐楅�夋嫨
-    const processDefinitionKey = 'item_receipt_approval';
-    await submitItemReceiptApproval(formData.value.id, processDefinitionKey);
-    message.success('鎻愪氦瀹℃壒鎴愬姛');
     await modalApi.close();
     emit('success');
   } finally {
@@ -157,11 +126,8 @@
       return;
     }
     const { valid } = await formApi.validate();
-    if (!valid) {
-      return;
-    }
+    if (!valid) return;
     modalApi.lock();
-    // 鎻愪氦琛ㄥ崟
     const data = (await formApi.getValues()) as MesWmItemReceiptApi.ItemReceipt;
     try {
       if (formData.value?.id) {
@@ -191,7 +157,6 @@
       originalSnapshot.value = '';
       return;
     }
-    // 鍔犺浇鏁版嵁
     const data = modalApi.getData<{ formType: FormType; id?: number }>();
     formType.value = data.formType;
     formApi.setState({ schema: useFormSchema(formType.value, formApi) });
@@ -201,7 +166,6 @@
       modalApi.lock();
       try {
         formData.value = await getItemReceipt(data.id);
-        // 璁剧疆鍒� values
         await formApi.setValues(formData.value);
       } finally {
         modalApi.unlock();
@@ -235,7 +199,6 @@
 <template>
   <Modal :title="getTitle" class="w-3/5">
     <Form class="mx-4" />
-    <!-- 闈炴柊寤烘ā寮忓睍绀虹墿鏂欎俊鎭� -->
     <template v-if="formData?.id">
       <Divider>鐗╂枡淇℃伅</Divider>
       <div class="mx-4">
@@ -255,9 +218,6 @@
         >
           <Button type="primary">鎻愪氦</Button>
         </Popconfirm>
-        <Button v-if="canSubmitApproval" type="primary" @click="handleSubmitApproval">
-          鎻愪氦瀹℃壒
-        </Button>
         <Button v-if="isStock" type="primary" @click="confirmStock">
           鎵ц涓婃灦
         </Button>

--
Gitblit v1.9.3