From 4853f7c8e01ccbeae80e0243b632efc360067df8 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 20 四月 2026 14:49:20 +0800
Subject: [PATCH] Merge branch 'dev_河南_鹤壁天沐玻璃厂' of http://114.132.189.42:9002/r/product-inventory-management into dev_河南_鹤壁天沐玻璃厂

---
 src/views/salesManagement/salesLedger/index.vue |   80 +++++++++++++++++++++++++++++++++++++++-
 1 files changed, 78 insertions(+), 2 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 624cbb2..0de79fd 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -4224,6 +4224,40 @@
     return statusStr === "寰呭彂璐�" || statusStr === "瀹℃牳鎷掔粷";
   };
 
+  const getLedgerDisplayName = ledger =>
+    String(ledger?.salesContractNo || "").trim() ||
+    String(ledger?.projectName || "").trim() ||
+    `ID:${ledger?.id ?? "-"}`;
+
+  const validateLedgersStockedBeforeDelivery = async ledgers => {
+    const invalidLedgers = [];
+    for (const ledger of ledgers || []) {
+      const ledgerId = ledger?.id;
+      const ledgerName = getLedgerDisplayName(ledger);
+      if (!ledgerId) {
+        invalidLedgers.push(`${ledgerName}(缂哄皯鍙拌处ID)`);
+        continue;
+      }
+      let products = [];
+      try {
+        const res = await productList({ salesLedgerId: ledgerId, type: 1 });
+        products = Array.isArray(res?.data) ? res.data : [];
+      } catch (e) {
+        invalidLedgers.push(`${ledgerName}(鏄庣粏鍔犺浇澶辫触)`);
+        continue;
+      }
+      const unstockedProducts = products.filter(
+        item => Number(item?.productStockStatus) !== 2
+      );
+      if (unstockedProducts.length > 0) {
+        invalidLedgers.push(
+          `${ledgerName}(鏈叏閮ㄥ叆搴�${unstockedProducts.length}鏉�)`
+        );
+      }
+    }
+    return invalidLedgers;
+  };
+
   const handleBulkDelivery = async () => {
     if (selectedRows.value.length === 0) {
       proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
@@ -4232,7 +4266,7 @@
 
     // 鍙厑璁搞�愭湭鍙戣揣/瀹℃壒澶辫触銆戣繘鍏ュ彂璐ф祦绋�
     const statusItem = selectedRows.value[0].deliveryStatus;
-    const isTrue = true;
+    let isTrue = true;
     selectedRows.value.forEach(row => {
       if (row.deliveryStatus != 1 && row.deliveryStatus != 3) {
         proxy.$modal.msgWarning("浠呮湭鍙戣揣鎴栧鎵瑰け璐ョ殑鍙拌处鍙互鍙戣揣");
@@ -4246,6 +4280,29 @@
       }
     });
     if (!isTrue) {
+      return;
+    }
+
+    proxy.$modal.loading("姝e湪鏍¢獙鏄庣粏鍏ュ簱鐘舵�侊紝璇风◢鍊�...");
+    const invalidLedgers = await validateLedgersStockedBeforeDelivery(
+      selectedRows.value
+    );
+    proxy.$modal.closeLoading();
+    if (invalidLedgers.length > 0) {
+      try {
+        await ElMessageBox.alert(
+          `浠ヤ笅閿�鍞彴璐﹀瓨鍦ㄦ湭鍏ㄩ儴鍏ュ簱鐨勬槑缁嗭紝鏆備笉鍙彂璐э細\n${invalidLedgers.join(
+            "\n"
+          )}`,
+          "鎻愮ず",
+          {
+            type: "warning",
+            confirmButtonText: "鐭ラ亾浜�",
+          }
+        );
+      } catch {
+        /* 鍏抽棴寮圭獥 */
+      }
       return;
     }
 
@@ -4365,7 +4422,7 @@
   };
 
   // 鎵撳紑鍙戣揣寮规锛堝崟鏉★級
-  const openDeliveryForm = row => {
+  const openDeliveryForm = async row => {
     // 鍙厑璁搞�愭湭鍙戣揣/瀹℃壒澶辫触銆戝彂璐э紱宸插彂璐�/瀹℃壒涓笉鍏佽
     const status = Number(row.deliveryStatus);
     if (status !== 1 && status !== 3) {
@@ -4373,6 +4430,25 @@
       return;
     }
 
+    proxy.$modal.loading("姝e湪鏍¢獙鏄庣粏鍏ュ簱鐘舵�侊紝璇风◢鍊�...");
+    const invalidLedgers = await validateLedgersStockedBeforeDelivery([row]);
+    proxy.$modal.closeLoading();
+    if (invalidLedgers.length > 0) {
+      try {
+        await ElMessageBox.alert(
+          `褰撳墠閿�鍞彴璐﹀瓨鍦ㄦ湭鍏ㄩ儴鍏ュ簱鐨勬槑缁嗭紝鏆備笉鍙彂璐э細\n${invalidLedgers[0]}`,
+          "鎻愮ず",
+          {
+            type: "warning",
+            confirmButtonText: "鐭ラ亾浜�",
+          }
+        );
+      } catch {
+        /* 鍏抽棴寮圭獥 */
+      }
+      return;
+    }
+
     currentDeliveryRows.value = [row];
     deliveryForm.value = {
       type: "璐ц溅",

--
Gitblit v1.9.3