From 2f8b8b76d41d81f4f40c4d10863d93e609374036 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 29 十月 2026 12:20:39 +0800
Subject: [PATCH] fix(mes): 解决产品收货批次信息传递和销售订单校验问题

---
 src/views/wls/productsales/modules/line-form.vue |    6 +++++-
 src/views/wls/returnsales/modules/line-form.vue  |    2 +-
 src/views/wls/productsales/data.ts               |   23 +++++++++++++++++++++--
 src/views/wls/returnsales/data.ts                |    2 +-
 4 files changed, 28 insertions(+), 5 deletions(-)

diff --git a/src/views/wls/productsales/data.ts b/src/views/wls/productsales/data.ts
index e0fc891..7fc47d7 100644
--- a/src/views/wls/productsales/data.ts
+++ b/src/views/wls/productsales/data.ts
@@ -473,8 +473,27 @@
 export function useLineFormSchema(
   hasNotice: boolean,
   formApi?: VbenFormApi,
+  orderItems: import('#/api/erp/sale/order').ErpSaleOrderApi.SaleOrderItem[] = [],
 ): VbenFormSchema[] {
   return [
+    {
+      fieldName: 'saleOrderItemId',
+      label: '閿�鍞鍗曟槑缁�',
+      component: 'Select',
+      componentProps: {
+        placeholder: '璇烽�夋嫨閿�鍞鍗曟槑缁嗗強鐩樺彿',
+        options: orderItems.map((item) => ({
+          label: `${item.productName || ''}锛堢洏鍙凤細${item.reelNo || '鏈~鍐�'}锛塦,
+          value: item.id,
+        })),
+        onChange: async (id?: number) => {
+          const item = orderItems.find((entry) => entry.id === id);
+          await formApi?.setFieldValue('itemId', item?.productId);
+        },
+      },
+      dependencies: { triggerFields: ['noticeId'], if: () => !hasNotice },
+      rules: 'selectRequired',
+    },
     {
       fieldName: 'noticeId',
       component: 'Input',
@@ -515,9 +534,9 @@
       },
       rules: 'selectRequired',
       dependencies: {
-        triggerFields: ['noticeLineId'],
+        triggerFields: ['noticeLineId', 'saleOrderItemId'],
         componentProps: (values) => ({
-          disabled: !!values.noticeLineId,
+          disabled: !!values.noticeLineId || !!values.saleOrderItemId,
           placeholder: '璇烽�夋嫨浜у搧',
         }),
       },
diff --git a/src/views/wls/productsales/modules/line-form.vue b/src/views/wls/productsales/modules/line-form.vue
index d8470da..a608070 100644
--- a/src/views/wls/productsales/modules/line-form.vue
+++ b/src/views/wls/productsales/modules/line-form.vue
@@ -8,6 +8,8 @@
 import { message } from 'ant-design-vue';
 
 import { useVbenForm } from '#/adapter/form';
+import { getProductSales } from '#/api/mes/wm/productsales';
+import { getSaleOrder } from '#/api/erp/sale/order';
 import {
   createProductSalesLine,
   getProductSalesLine,
@@ -78,7 +80,9 @@
     }>();
     salesId.value = data.salesId;
     noticeId.value = data.noticeId;
-    formApi.setState({ schema: useLineFormSchema(!!data.noticeId, formApi) });
+    const sales = await getProductSales(data.salesId);
+    const order = sales.saleOrderId ? await getSaleOrder(sales.saleOrderId) : undefined;
+    formApi.setState({ schema: useLineFormSchema(!!data.noticeId, formApi, order?.items || []) });
     if (data.noticeId) {
       await formApi.setFieldValue('noticeId', data.noticeId);
     }
diff --git a/src/views/wls/returnsales/data.ts b/src/views/wls/returnsales/data.ts
index de9180c..f39ec57 100644
--- a/src/views/wls/returnsales/data.ts
+++ b/src/views/wls/returnsales/data.ts
@@ -404,7 +404,7 @@
             return z
               .number({ message: '璇疯緭鍏ラ��璐ф暟閲�' })
               .min(0)
-              .max(max, `鍙��璐ф暟閲忎笉鑳借秴杩� ${max}`);
+              .max(max, `閫�璐ф暟閲忎笉鑳借秴杩囪鍗曟暟閲� ${max}`);
           }
           return z.number({ message: '璇疯緭鍏ラ��璐ф暟閲�' }).min(0);
         },
diff --git a/src/views/wls/returnsales/modules/line-form.vue b/src/views/wls/returnsales/modules/line-form.vue
index 98ec33d..c18038e 100644
--- a/src/views/wls/returnsales/modules/line-form.vue
+++ b/src/views/wls/returnsales/modules/line-form.vue
@@ -115,7 +115,7 @@
       v-if="maxQuantity !== undefined"
       class="mx-4 mt-2 text-sm text-blue-600"
     >
-      褰撳墠鐗╂枡鍙��璐ф暟閲忥細<span class="font-bold">{{ maxQuantity }}</span>
+      褰撳墠鐗╂枡璁㈠崟鏁伴噺锛�<span class="font-bold">{{ maxQuantity }}</span>
     </div>
   </Modal>
 </template>

--
Gitblit v1.9.3