From afa7a7638e5268ca54f15d501fcdcdfff7acb6d8 Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期二, 21 四月 2026 09:02:06 +0800
Subject: [PATCH] 设备台账添加工序选择功能,支持动态加载工序选项

---
 src/views/salesManagement/salesLedger/index.vue |  112 +++++++++++++++++++++++++++++++++++++++++++++++---------
 1 files changed, 94 insertions(+), 18 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 1d54201..0de79fd 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -225,9 +225,9 @@
                   <el-tag v-else-if="scope.row.productStockStatus == 2"
                           type="success">宸插叆搴�</el-tag>
                   <el-tag v-else-if="scope.row.productStockStatus == 0"
-                          type="info">鏈嚭搴�</el-tag>
+                          type="info">鏈叆搴�</el-tag>
                   <el-tag v-else
-                          type="danger">涓嶈冻</el-tag>
+                          type="danger">鏈叆搴�</el-tag>
                 </template>
               </el-table-column>
               <!-- <el-table-column label="鍙戣揣鐘舵��" width="140" align="center">
@@ -666,12 +666,12 @@
                                v-model="scope.row.settlePieceArea"
                                :min="0"
                                :step="1"
-                               :precision="10"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="璇疯緭鍏�"
                                clearable
                                @change="() => handleInlineSettleAreaChange(scope.row)" />
-              <span v-else>{{ scope.row.settlePieceArea ?? "" }}</span>
+              <span v-else>{{ scope.row.settlePieceArea ? Number(scope.row.settlePieceArea).toFixed(4) : "" }}</span>
             </template>
           </el-table-column>
           <el-table-column label="鏁伴噺"
@@ -701,10 +701,10 @@
                                v-model="scope.row.actualTotalArea"
                                :min="0"
                                :step="1"
-                               :precision="10"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="鑷姩璁$畻" />
-              <span v-else>{{ scope.row.actualTotalArea ?? "" }}</span>
+              <span v-else>{{ scope.row.actualTotalArea ? Number(scope.row.actualTotalArea).toFixed(4) : "" }}</span>
             </template>
           </el-table-column>
           <el-table-column label="鍚◣鍗曚环(鍏�)"
@@ -1341,8 +1341,8 @@
                           prop="actualPieceArea">
               <el-input-number v-model="productForm.actualPieceArea"
                                :min="0"
-                               :step="0.00001"
-                               :precision="5"
+                               :step="0.0001"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="璇疯緭鍏�"
                                clearable
@@ -1354,8 +1354,8 @@
                           prop="actualTotalArea">
               <el-input-number v-model="productForm.actualTotalArea"
                                :min="0"
-                               :step="0.00001"
-                               :precision="5"
+                               :step="0.0001"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="璇疯緭鍏�"
                                clearable />
@@ -1366,8 +1366,8 @@
                           prop="settlePieceArea">
               <el-input-number v-model="productForm.settlePieceArea"
                                :min="0"
-                               :step="0.00001"
-                               :precision="5"
+                               :step="0.0001"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="璇疯緭鍏�"
                                clearable
@@ -1379,8 +1379,8 @@
                           prop="settleTotalArea">
               <el-input-number v-model="productForm.settleTotalArea"
                                :min="0"
-                               :step="0.00001"
-                               :precision="5"
+                               :step="0.0001"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="璇疯緭鍏�"
                                clearable />
@@ -1391,8 +1391,8 @@
                           prop="settleTotalArea">
               <el-input-number v-model="productForm.settleTotalArea"
                                :min="0"
-                               :step="0.00001"
-                               :precision="5"
+                               :step="0.0001"
+                               :precision="4"
                                style="width: 100%"
                                placeholder="璇疯緭鍏�"
                                clearable />
@@ -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