From fb2e9ce981161f823a3f9b5101ba15d296aace35 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期三, 26 八月 2026 16:45:21 +0800
Subject: [PATCH] 新疆-新聚 1.主生产计划不再限制本次下发数量不能超过需求数量剩余量。已下发数量达到需求数量后,仍可以继续下发。 2.每一次发货需要可以填写每一次的送货地址

---
 src/views/salesManagement/deliveryLedger/index.vue |   22 +++++++
 src/views/productionPlan/productionPlan/index.vue  |   40 +++++--------
 src/views/salesManagement/salesLedger/index.vue    |   93 ++++++------------------------
 3 files changed, 56 insertions(+), 99 deletions(-)

diff --git a/src/views/productionPlan/productionPlan/index.vue b/src/views/productionPlan/productionPlan/index.vue
index 1acb28f..2c7cd47 100644
--- a/src/views/productionPlan/productionPlan/index.vue
+++ b/src/views/productionPlan/productionPlan/index.vue
@@ -135,7 +135,6 @@
         <el-form-item label="鐢熶骇鏁伴噺">
           <el-input-number v-model="mergeForm.totalAssignedQuantity"
                            :min="0"
-                           :max="sumAssignedQuantity"
                            @change="onBlur"
                            style="width: 100%" />
         </el-form-item>
@@ -435,19 +434,23 @@
           name: "涓嬪彂",
           type: "text",
           showHide: row => {
-            return row.status != 2;
+            return true;
           },
           clickFun: row => {
             mergeForm.productName = row.productName || "";
             mergeForm.model = row.model || "";
-            mergeForm.totalAssignedQuantity =
-              Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0);
+            mergeForm.totalAssignedQuantity = Math.max(
+              0,
+              Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0)
+            );
             mergeForm.planCompleteTime = row.requiredDate || "";
             mergeForm.productId = row.productId || "";
             mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
             mergeForm.ids = [row.id];
-            sumAssignedQuantity.value =
-              Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0);
+            sumAssignedQuantity.value = Math.max(
+              0,
+              Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0)
+            );
             isShowNewModal.value = true;
           },
         },
@@ -735,16 +738,6 @@
 
   // 鍒ゆ柇琛屾槸鍚﹀彲閫夋嫨
   const isSelectable = row => {
-    // 濡傛灉鏄凡涓嬪彂鐘舵�侊紝绂佹鍕鹃��
-    if (row.status == 2) {
-      return false;
-    }
-    // 璁$畻鍓╀綑鏁伴噺
-    const remainingQty = (row.qtyRequired || 0) - (row.quantityIssued || 0);
-    // 濡傛灉鍓╀綑鏁伴噺灏忎簬绛変簬0锛岀姝㈤�夋嫨
-    if (remainingQty <= 0) {
-      return false;
-    }
     // 濡傛灉娌℃湁閫変腑鐨勮锛屾墍鏈夎閮藉彲閫夋嫨
     if (!selectedProductModelId.value) {
       return true;
@@ -766,9 +759,12 @@
     const firstRow = selectedRows.value[0];
     const productName = firstRow.productName || "";
 
-    // 璁$畻鎬诲埗閫犳暟閲� (榛樿qtyRequired鐨勫拰)
+    // 璁$畻鎬诲埗閫犳暟閲� (榛樿qtyRequired鍓╀綑鏁伴噺鐨勫拰)
     const totalAssignedQuantity = selectedRows.value.reduce((sum, row) => {
-      return sum + Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0);
+      return (
+        sum +
+        Math.max(0, Number(row.qtyRequired || 0) - Number(row.quantityIssued || 0))
+      );
     }, 0);
     sumAssignedQuantity.value = totalAssignedQuantity;
     console.log(totalAssignedQuantity);
@@ -779,7 +775,7 @@
     mergeForm.planCompleteTime = firstRow.requiredDate || "";
     mergeForm.productId = firstRow.productId || "";
     mergeForm.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss");
-    mergeForm.ids = selectedRows.value.map(row => row.id);
+    mergeForm.ids = [...new Set(selectedRows.value.map(row => row.id))];
 
     // 鎵撳紑寮圭獥
     isShowNewModal.value = true;
@@ -800,12 +796,6 @@
       return;
     }
     console.log(sumAssignedQuantity.value, "sumAssignedQuantity");
-
-    // 楠岃瘉totalAssignedQuantity涓嶈兘澶т簬鎬绘柟鏁�
-    if (mergeForm.totalAssignedQuantity > sumAssignedQuantity.value) {
-      ElMessage.error("鐢熶骇鏁伴噺涓嶈兘澶т簬褰撳墠璁$畻鐨勬�诲��");
-      return;
-    }
 
     console.log(mergeForm, "mergeForm");
     const payload = {
diff --git a/src/views/salesManagement/deliveryLedger/index.vue b/src/views/salesManagement/deliveryLedger/index.vue
index 33fa45f..b6e18fc 100644
--- a/src/views/salesManagement/deliveryLedger/index.vue
+++ b/src/views/salesManagement/deliveryLedger/index.vue
@@ -107,6 +107,11 @@
           show-overflow-tooltip
         />
         <el-table-column
+          label="鍙戣揣鍦板潃"
+          prop="shippingAddress"
+          show-overflow-tooltip
+        />
+        <el-table-column
           label="瀹℃牳鐘舵��"
           prop="status"
           align="center"
@@ -202,6 +207,17 @@
           </el-col>
         </el-row>
         <el-row :gutter="30">
+          <el-col :span="24">
+            <el-form-item label="鍙戣揣鍦板潃锛�" prop="shippingAddress">
+              <el-input
+                v-model="form.shippingAddress"
+                placeholder="璇疯緭鍏ュ彂璐у湴鍧�"
+                clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
           <el-col :span="24" v-if="form.type === '璐ц溅'">
             <el-form-item label="鍙戣揣杞︾墝鍙凤細" prop="shippingCarNumber">
               <el-input
@@ -289,6 +305,9 @@
           }}</el-descriptions-item>
           <el-descriptions-item label="蹇�掑崟鍙�" :span="2">{{
             detailRow.expressNumber || "--"
+          }}</el-descriptions-item>
+          <el-descriptions-item label="鍙戣揣鍦板潃" :span="2">{{
+            detailRow.shippingAddress || "--"
           }}</el-descriptions-item>
           <el-descriptions-item label="鍑哄簱鍗曞彿" :span="2">{{
             detailRow.outboundBatches || "--"
@@ -388,6 +407,7 @@
     shippingCarNumber: "",
     expressCompany: "",
     expressNumber: "", // 蹇�掑崟鍙�
+    shippingAddress: "",
   },
   rules: {
     salesContractNo: [
@@ -479,6 +499,7 @@
       shippingCarNumber: row.shippingCarNumber ?? "",
       expressCompany: row.expressCompany ?? "",
       expressNumber: row.expressNumber ?? "",
+      shippingAddress: row.shippingAddress ?? "",
     };
     deliveryFileList.value = row.storageBlobVOs || [];
   }
@@ -590,6 +611,7 @@
           form.value.type === "蹇��" ? form.value.expressCompany : "",
         expressNumber:
           form.value.type === "蹇��" ? form.value.expressNumber : "",
+        shippingAddress: form.value.shippingAddress,
         storageBlobDTOs: deliveryFileList.value || [],
       };
       deductStock(payload).then((res) => {
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index d2e82b5..610c17c 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -1066,6 +1066,17 @@
           </el-col>
         </el-row>
         <el-row :gutter="30">
+          <el-col :span="24">
+            <el-form-item label="鍙戣揣鍦板潃锛�" prop="shippingAddress">
+              <el-input
+                v-model="deliveryForm.shippingAddress"
+                placeholder="璇疯緭鍏ュ彂璐у湴鍧�"
+                clearable
+              />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
           <el-col :span="24" v-if="deliveryForm.type === '璐ц溅'">
             <el-form-item label="鍙戣揣杞︾墝鍙凤細" prop="shippingCarNumber">
               <el-input
@@ -1337,47 +1348,17 @@
     item?.stockQuantity;
   return quantity ?? 0;
 };
-const getCurrentDeliveryRowQuantity = () => {
-  return Number(currentDeliveryRow.value?.noQuantity || 0);
-};
 const getDeliveryBatchDeliveryMax = (row) => {
-  const productQuantity = getCurrentDeliveryRowQuantity();
   const batchQuantity = Number(getDeliveryBatchQuantity(row) || 0);
-  const otherBatchTotal = (deliveryForm.value.batchNoList || []).reduce(
-    (sum, item) => {
-      if (item?.id === row?.id) return sum;
-      return sum + Number(item?.deliveryQuantity || 0);
-    },
-    0
-  );
-  const remainingProductQuantity = Math.max(
-    0,
-    productQuantity - otherBatchTotal
-  );
-  return Math.max(0, Math.min(batchQuantity, remainingProductQuantity));
+  return Math.max(0, batchQuantity);
 };
 const handleDeliveryBatchQuantityChange = (row) => {
-  const productQuantity = getCurrentDeliveryRowQuantity();
   const batchQuantity = Number(getDeliveryBatchQuantity(row) || 0);
-  const otherBatchTotal = (deliveryForm.value.batchNoList || []).reduce(
-    (sum, item) => {
-      if (item?.id === row?.id) return sum;
-      return sum + Number(item?.deliveryQuantity || 0);
-    },
-    0
-  );
-  const remainingProductQuantity = Math.max(
-    0,
-    productQuantity - otherBatchTotal
-  );
   const currentValue = Number(row?.deliveryQuantity || 0);
 
   if (currentValue > batchQuantity) {
     row.deliveryQuantity = batchQuantity;
     proxy.$modal.msgWarning("鍙戣揣鏁伴噺涓嶈兘澶т簬搴撳瓨鏁伴噺");
-  } else if (currentValue > remainingProductQuantity) {
-    row.deliveryQuantity = remainingProductQuantity;
-    proxy.$modal.msgWarning("鎵�鏈夋壒娆″彂璐ф暟閲忎箣鍜屼笉鑳藉ぇ浜庡緟鍙戣揣鏁伴噺");
   }
 };
 const getSelectedDeliveryBatchRows = () => {
@@ -1422,6 +1403,7 @@
     shippingCarNumber: "",
     expressCompany: "",
     expressNumber: "",
+    shippingAddress: "",
     type: "璐ц溅", // 璐ц溅, 蹇��
   },
   deliveryRules: {
@@ -2822,27 +2804,8 @@
  * @param row 琛屾暟鎹�
  */
 const canShip = (row) => {
-  // 浜у搧鐘舵�佸繀椤绘槸鍏呰冻锛坅pproveStatus === 1锛�
-  if (row.approveStatus !== 1) {
-    return false;
-  }
-
-  // 鑾峰彇鍙戣揣鐘舵��
-  const shippingStatus = row.shippingStatus;
-
-  // 濡傛灉宸插彂璐э紝涓嶈兘鍐嶆鍙戣揣
-  if (shippingStatus === "宸插彂璐�") {
-    return false;
-  }
-
-  // 鍙戣揣鐘舵�佸繀椤绘槸"寰呭彂璐�"銆�"瀹℃壒涓�"銆�"瀹℃牳鎷掔粷"鎴�"閮ㄥ垎鍙戣揣"
-  const statusStr = shippingStatus ? String(shippingStatus).trim() : "";
-  return (
-    statusStr === "寰呭彂璐�" ||
-    statusStr === "瀹℃壒涓�" ||
-    statusStr === "瀹℃牳鎷掔粷" ||
-    statusStr === "閮ㄥ垎鍙戣揣"
-  );
+  // 涓嶅啀鏍规嵁閿�鍞骇鍝佺姸鎬佹垨宸插彂璐х姸鎬侀檺鍒跺彂璐э紝鍙戣揣鍚堟硶鎬х敱搴撳瓨鎵规鍜屽悗绔牎楠屾帶鍒�
+  return true;
 };
 
 // 鎵撳紑闄勪欢寮圭獥
@@ -2857,14 +2820,6 @@
 
 // 鎵撳紑鍙戣揣寮规
 const openDeliveryForm = async (row) => {
-  // 妫�鏌ユ槸鍚﹀彲浠ュ彂璐�
-  if (!canShip(row)) {
-    proxy.$modal.msgWarning(
-      "鍙湁鍦ㄤ骇鍝佺姸鎬佹槸鍏呰冻锛屽彂璐х姸鎬佹槸寰呭彂璐с�佸鎵逛腑銆佸鏍告嫆缁濇垨閮ㄥ垎鍙戣揣鐨勬椂鍊欐墠鍙互鍙戣揣"
-    );
-    return;
-  }
-
   // 瀹℃壒涓椂鎻愮ず鐢ㄦ埛宸叉湁寰呭鎵圭殑鍙戣揣璁板綍
   const statusStr = row.shippingStatus ? String(row.shippingStatus).trim() : "";
   if (statusStr === "瀹℃壒涓�") {
@@ -2879,6 +2834,7 @@
     shippingCarNumber: "",
     expressCompany: "",
     expressNumber: "",
+    shippingAddress: "",
     type: "璐ц溅",
     batchNo: [],
     batchNoList,
@@ -2894,20 +2850,6 @@
       const selectedBatchRows = getSelectedDeliveryBatchRows();
       if (selectedBatchRows.length === 0) {
         proxy.$modal.msgWarning("璇疯嚦灏戝~鍐欎竴涓壒鍙风殑鍙戣揣鏁伴噺");
-        return;
-      }
-      const totalDeliveryQuantity = selectedBatchRows.reduce(
-        (sum, item) => sum + Number(item.deliveryQuantity || 0),
-        0
-      );
-      const currentRowNoQuantity = Number(
-        currentDeliveryRow.value?.noQuantity || 0
-      );
-      if (
-        currentRowNoQuantity > 0 &&
-        totalDeliveryQuantity > currentRowNoQuantity
-      ) {
-        proxy.$modal.msgWarning("鎵瑰彿鍙戣揣鎬绘暟涓嶈兘瓒呰繃寰呭彂璐ф暟閲�");
         return;
       }
       // 淇濆瓨褰撳墠灞曞紑鐨勮ID锛屼互渚垮彂璐у悗閲嶆柊鍔犺浇瀛愯〃鏍兼暟鎹�
@@ -2933,6 +2875,7 @@
           deliveryForm.value.type === "蹇��"
             ? deliveryForm.value.expressNumber
             : "",
+        shippingAddress: deliveryForm.value.shippingAddress,
         storageBlobDTOs: deliveryFileList.value || [],
         batchNo: deliveryForm.value.batchNo,
         batchNoDetailList: selectedBatchRows.map((item) => ({
@@ -2967,6 +2910,8 @@
             });
           }
         });
+      }).catch(() => {
+        // 鍚庣搴撳瓨涓嶈冻绛夐敊璇凡鐢� request 鎷︽埅鍣ㄧ粺涓�鎻愮ず
       });
     }
   });

--
Gitblit v1.9.3