From ea7fb9cc590a198d438d44a2aec7b0393194a07d Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 21 九月 2026 20:52:43 +0800
Subject: [PATCH] 新疆-融邦环保 1.新增到货记录模块:销售台账页入口,车辆随出库单联动,到货上限=该台账分摊量,附件走永久链接

---
 src/views/salesManagement/salesLedger/components/ArrivalDialog.vue |   66 ++++++++++++++++++++++++---------
 1 files changed, 48 insertions(+), 18 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/components/ArrivalDialog.vue b/src/views/salesManagement/salesLedger/components/ArrivalDialog.vue
index 1ab76ed..70b0662 100644
--- a/src/views/salesManagement/salesLedger/components/ArrivalDialog.vue
+++ b/src/views/salesManagement/salesLedger/components/ArrivalDialog.vue
@@ -24,9 +24,13 @@
                        min-width="150"
                        show-overflow-tooltip />
       <el-table-column label="杞︾墝鍙�"
-                       prop="truckPlateNo"
                        min-width="110"
-                       show-overflow-tooltip />
+                       show-overflow-tooltip>
+        <!-- 鍑哄簱鍗曟病鐧昏杞﹁締鏃跺埌璐ц褰曡溅杈嗕负绌猴紝涓嶈兘娓叉煋鎴愮┖鐧芥牸 -->
+        <template #default="scope">
+          {{ scope.row.truckPlateNo || "--" }}
+        </template>
+      </el-table-column>
       <el-table-column label="鍒拌揣鏁伴噺(鍚�)"
                        prop="arrivalQuantity"
                        min-width="110"
@@ -112,20 +116,14 @@
             </el-form-item>
           </el-col>
           <el-col :span="12">
+            <!-- 杞﹁締涓嶅己鍒讹細鍑哄簱鍗曟病鐧昏杞﹁締锛堜唬鍌�/瀹㈠瓨鍑哄簱锛夋椂鐣欑┖鍗冲彲 -->
             <el-form-item label="杞﹁締"
-                          prop="vehicleId"
-                          :rules="[
-                {
-                required: true,
-                message: '璇烽�夋嫨杞﹁締',
-                trigger: 'change',
-              }
-              ]">
+                          prop="vehicleId">
               <el-select v-model="form.vehicleId"
-                         placeholder="璇峰厛閫夋嫨鍑哄簱鍗�"
+                         :placeholder="vehiclePlaceholder"
                          clearable
                          filterable
-                         :disabled="!form.stockOutRecordId"
+                         :disabled="!form.stockOutRecordId || !vehicleOptions.length"
                          style="width: 100%"
                          @change="handleVehicleChange">
                 <el-option v-for="item in vehicleOptions"
@@ -142,8 +140,7 @@
                           prop="arrivalQuantity"
                           :rules="[
                 {
-                required: true,
-                message: '璇疯緭鍏ュ埌璐ф暟閲�',
+                validator: validateArrivalQuantity,
                 trigger: 'blur',
               }
               ]">
@@ -286,11 +283,22 @@
     return [...map.values()];
   });
 
+  // 娌$櫥璁拌溅杈嗙殑鍑哄簱鍗曪紙浠e偍/瀹㈠瓨涓嶅己鍒堕�夎溅锛夋嬁涓嶅嚭杞﹁締鍊欓�夛紝涓嶈褰撴垚涓�涓┖閫夐」
   const vehicleOptions = computed(() =>
     bindableRows.value.filter(
-      item => item.stockOutRecordId === form.value.stockOutRecordId
+      item =>
+        item.stockOutRecordId === form.value.stockOutRecordId &&
+        item.vehicleId !== null &&
+        item.vehicleId !== undefined
     )
   );
+
+  const vehiclePlaceholder = computed(() => {
+    if (!form.value.stockOutRecordId) return "璇峰厛閫夋嫨鍑哄簱鍗�";
+    return vehicleOptions.value.length
+      ? "璇烽�夋嫨杞﹁締"
+      : "璇ュ嚭搴撳崟鏈櫥璁拌溅杈嗭紝鍙暀绌�";
+  });
 
   const selectedOutbound = computed(() =>
     outboundOptions.value.find(
@@ -305,6 +313,19 @@
 
   // 缂栬緫鏃舵湰鏉″凡鍗犵殑閲忚浠庛�屽凡鍒拌揣銆嶉噷鍔犲洖鏉ワ紝鍚﹀垯鏁伴噺鏀逛笉澶т簬鍘熷��
   const originalArrivalQuantity = ref(0);
+
+  // 0 鍦� required 鐪奸噷绠椼�屽凡濉�嶏紝鎷︿笉浣忥紝杩欓噷鎸夊悗绔彛寰勮姹� > 0
+  const validateArrivalQuantity = (rule, value, callback) => {
+    if (value === null || value === undefined || value === "") {
+      callback(new Error("璇疯緭鍏ュ埌璐ф暟閲�"));
+      return;
+    }
+    if (!(Number(value) > 0)) {
+      callback(new Error("鍒拌揣鏁伴噺蹇呴』澶т簬0"));
+      return;
+    }
+    callback();
+  };
 
   // 鍒拌揣涓婇檺 = 璇ュ彴璐﹀湪杩欏紶鍑哄簱鍗曚笂鍒嗘憡鍒扮殑鏁伴噺
   const arrivalMax = computed(() => {
@@ -395,7 +416,7 @@
         form.value.id = row.id ?? null;
         form.value.stockOutRecordId = row.stockOutRecordId;
         // 杞﹁締/杞︾墝浠ュ嚭搴撳崟鐧昏涓哄噯锛屼絾鍒楄〃琛岄噷甯﹀洖鐨勬槸褰撴椂鐨勫�硷紝鐩存帴鍥炴樉
-        form.value.vehicleId = row.vehicleId;
+        form.value.vehicleId = row.vehicleId ?? undefined;
         form.value.truckPlateNo = row.truckPlateNo || "";
         form.value.arrivalQuantity = row.arrivalQuantity ?? null;
         form.value.arrivalDate = row.arrivalDate || "";
@@ -413,6 +434,12 @@
     // 杞﹁締闅忓嚭搴撳崟鑱斿姩锛氭崲浜嗗嚭搴撳崟锛屽師鏉ラ�夌殑杞﹁締鍙兘涓嶅湪鍊欓�夐噷
     form.value.vehicleId = undefined;
     form.value.truckPlateNo = "";
+    // 涓�寮犲嚭搴撳崟鍙櫥璁颁竴涓溅杈嗭紝鑳藉畾灏辩洿鎺ュ甫鍑烘潵锛堜唬鍌�/瀹㈠瓨娌$櫥璁拌溅杈嗗垯鐣欑┖锛�
+    const only = vehicleOptions.value[0];
+    if (vehicleOptions.value.length === 1) {
+      form.value.vehicleId = only.vehicleId;
+      form.value.truckPlateNo = only.truckPlateNo || "";
+    }
   };
 
   const handleVehicleChange = id => {
@@ -433,14 +460,17 @@
       const payload = {
         stockOutRecordId: form.value.stockOutRecordId,
         salesLedgerId: props.ledgerId,
-        vehicleId: form.value.vehicleId,
-        truckPlateNo: form.value.truckPlateNo,
         arrivalQuantity: form.value.arrivalQuantity,
         arrivalDate: form.value.arrivalDate,
         // 鍙瓨姘镐箙閾炬帴锛�2 灏忔椂澶辨晥鐨勭鍚� URL 杩囨湡鍚庨檮浠朵細鎵撲笉寮�
         attachments: form.value.attachmentList.map(getPhotoUrl).filter(Boolean),
         remark: form.value.remark,
       };
+      // 杞﹁締/杞︾墝浠ュ嚭搴撳崟涓哄噯锛屽彧鏈夐�変簡杞︽墠浼狅紝绌哄�间笉鍙備笌鍚庣鐨勬瘮瀵�
+      if (form.value.vehicleId !== undefined && form.value.vehicleId !== null) {
+        payload.vehicleId = form.value.vehicleId;
+        payload.truckPlateNo = form.value.truckPlateNo;
+      }
       const submit = form.value.id
         ? updateSalesLedgerArrival({ ...payload, id: form.value.id })
         : addSalesLedgerArrival(payload);

--
Gitblit v1.9.3