From 1f7e58b5ec4f633773bbcfe65d1f686f934905d1 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期二, 22 九月 2026 09:13:08 +0800
Subject: [PATCH] 新疆-融邦环保 1.采购申请页面字段修改 2.油品出入库反显逻辑修改

---
 src/views/procurementManagement/purchaseApplication/index.vue       |   11 -
 src/views/inventoryManagement/stockManagement/OilStockInDialog.vue  |   60 +++++--
 src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue |  351 +++++++++++++++++++++++--------------------
 3 files changed, 226 insertions(+), 196 deletions(-)

diff --git a/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue b/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
index 36468ce..ab1199c 100644
--- a/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
+++ b/src/views/inventoryManagement/stockManagement/OilStockInDialog.vue
@@ -10,15 +10,16 @@
                ref="formRef">
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="浜у搧澶х被"
+            <el-form-item label="浜у搧"
                           prop="productId"
                           :rules="[
                 {
                 required: true,
-                message: '璇烽�夋嫨浜у搧澶х被',
+                message: '璇烽�夋嫨浜у搧',
                 trigger: 'change',
               }
             ]">
+              <!-- 娌瑰搧鐢便�屼骇鍝� + 瑙勬牸鍨嬪彿銆嶄袱绾ч�夊嚭锛屼笉鍗曠嫭缁存姢 -->
               <el-tree-select v-model="formState.productId"
                               placeholder="璇烽�夋嫨"
                               clearable
@@ -206,10 +207,11 @@
           <el-col :span="12">
             <el-form-item label="娌瑰搧"
                           prop="oilProduct"
-                          :rules="[{ required: true, message: '璇烽�夋嫨娌瑰搧', trigger: 'change' }]">
-              <el-input :model-value="formState.oilProduct"
-                        readonly
-                        placeholder="--" />
+                          :rules="[{ required: true, message: '璇疯緭鍏ユ补鍝�', trigger: 'change' }]">
+              <!-- 閫夊畬銆屼骇鍝� + 瑙勬牸鍨嬪彿銆嶈嚜鍔ㄥ啓鍏ワ紝涔熻兘鑷繁鏀� -->
+              <el-input v-model="formState.oilProduct"
+                        placeholder="閫夊畬浜у搧涓庤鏍煎瀷鍙峰悗鑷姩鐢熸垚"
+                        @input="handleOilProductInput" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -315,7 +317,6 @@
                           prop="trailerPlateNo"
                           :rules="[{ required: true, message: '璇疯緭鍏ヨ溅鎸傜墝鍙�', trigger: 'blur' }]">
               <el-input v-model="formState.trailerPlateNo"
-                        :readonly="!!formState.vehicleId"
                         placeholder="璇疯緭鍏�"
                         clearable />
             </el-form-item>
@@ -679,6 +680,26 @@
   const productOptions = ref([]);
   const modelOptions = ref([]);
 
+  // 娌瑰搧榛樿鐢便�屼骇鍝� + 瑙勬牸鍨嬪彿銆嶄袱绾ф嫾鍑烘潵锛堜袱绾ч兘閫夊畬鎵嶆湁鍊硷級銆�
+  // autoOilProduct 璁颁綇鑷姩鍐欒繘鍘荤殑鍊硷紝鐢ㄦ潵鍒ゆ柇鐢ㄦ埛鏈夋病鏈夋墜鏀硅繃鈥斺�旀墜鏀硅繃灏变笉鍐嶈鐩�
+  const autoOilProduct = ref("");
+
+  const oilProductLabel = (productName, model) =>
+    [productName, model].filter(Boolean).join(" / ");
+
+  const syncOilProduct = next => {
+    const current = formState.value.oilProduct;
+    if (!current || current === autoOilProduct.value) {
+      formState.value.oilProduct = next || undefined;
+    }
+    autoOilProduct.value = next || "";
+  };
+
+  // 鎵嬫敼杩囦箣鍚� autoOilProduct 灏卞涓嶄笂浜嗭紝鍚庨潰鐨勪骇鍝�/瑙勬牸鑱斿姩涓嶅啀瑕嗙洊瀹�
+  const handleOilProductInput = () => {
+    autoOilProduct.value = "";
+  };
+
   let { proxy } = getCurrentInstance();
 
   const closeModal = () => {
@@ -708,19 +729,17 @@
     }
   };
 
-  // 杞﹁締閫夋嫨鏀瑰彉锛氳溅鐗屽彿銆佽溅鎸傜墝鍙蜂笌鍙告満淇℃伅鐢辫溅杈嗕富鏁版嵁甯﹀嚭锛屽徃鏈哄彲鎵嬪姩瑕嗙洊
+  // 杞﹁締閫夋嫨鏀瑰彉锛氳溅鐗屽彿涓庡徃鏈轰俊鎭敱杞﹁締涓绘暟鎹甫鍑猴紝鍙告満鍙墜鍔ㄨ鐩栥��
+  // 杞︽寕鐗屽彿鏄寕杞﹁嚜宸辩殑鐗屻�佷笉鍦ㄨ溅杈嗕富鏁版嵁閲岋紝濮嬬粓鎵嬪~锛屼笉鍙備笌鑱斿姩銆�
   const vehicleChange = id => {
     const vehicle = vehicleList.value.find(item => item.id === id);
-    if (vehicle) {
-      formState.value.truckPlateNo = vehicle.plateNumber || "";
-      // 杞︽寕鐗屽彿涓庤溅鐗屽彿鏄悓涓�涓墝锛岄�変簡杞﹁締灏卞甫鍑哄苟缃负鍙锛岄伩鍏嶆墜濉嚭涓や釜涓嶄竴鑷寸殑鍊�
-      formState.value.trailerPlateNo = vehicle.plateNumber || "";
-      formState.value.driverName = vehicle.driverName || "";
-      formState.value.driverPhone = vehicle.driverPhone || "";
-    } else {
+    if (!vehicle) {
       formState.value.truckPlateNo = "";
-      formState.value.trailerPlateNo = "";
+      return;
     }
+    formState.value.truckPlateNo = vehicle.plateNumber || "";
+    formState.value.driverName = vehicle.driverName || "";
+    formState.value.driverPhone = vehicle.driverPhone || "";
   };
 
   const getProductOptions = () =>
@@ -746,7 +765,8 @@
     formState.value.productName = "";
     formState.value.productModelName = "";
     formState.value.unit = "";
-    formState.value.oilProduct = undefined;
+    // 娌瑰搧鏄骇鍝� + 瑙勬牸鎷煎嚭鏉ョ殑锛屾崲浜嗕骇鍝佸氨涓�璧蜂綔搴燂紝鎵嬫敼杩囩殑涓嶅姩
+    syncOilProduct("");
     modelOptions.value = [];
     if (!value) {
       return;
@@ -756,14 +776,14 @@
     });
   };
 
-  // 瑙勬牸鍨嬪彿鏀瑰彉锛氫骇鍝佸悕绉�/瑙勬牸/鍗曚綅鐢辫鏍间富鏁版嵁甯﹀嚭锛屾补鍝佸彇浜у搧鍚嶇О
+  // 瑙勬牸鍨嬪彿鏀瑰彉锛氫骇鍝佸悕绉�/瑙勬牸/鍗曚綅鐢辫鏍间富鏁版嵁甯﹀嚭
   const handleProductModelChange = value => {
     const item = modelOptions.value.find(row => row.id === value);
     formState.value.productName = item?.productName || "";
     formState.value.productModelName = item?.model || "";
     formState.value.unit = item?.unit || "";
-    // 鏈鎴枫�屾补鍝併�嶅氨鏄骇鍝佸悕绉帮紙搴撳瓨鏄庣粏/鍑哄簱鍙拌处鐨勬补鍝佸垪缁戠殑閮芥槸 productName锛�
-    formState.value.oilProduct = item?.productName || undefined;
+    // 鏈鎴枫�屾补鍝併�嶆寜銆屼骇鍝佸悕绉� / 瑙勬牸鍨嬪彿銆嶅睍绀猴紝搴撳瓨鏄庣粏銆佸嚭搴撳彴璐︾殑娌瑰搧鍒楀彇鐨勫氨鏄畠
+    syncOilProduct(oilProductLabel(item?.productName, item?.model));
     proxy.$refs["formRef"]?.validateField("productModelId");
   };
 
diff --git a/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue b/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue
index 83739c5..7c7f80e 100644
--- a/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue
+++ b/src/views/inventoryManagement/stockManagement/OilStockOutDialog.vue
@@ -8,155 +8,6 @@
                :model="formState"
                label-position="top"
                ref="formRef">
-        <div class="form-section-title">鍑哄簱淇℃伅</div>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍑哄簱绫诲埆"
-                          prop="outCategory"
-                          :rules="[{ required: true, message: '璇烽�夋嫨鍑哄簱绫诲埆', trigger: 'change' }]">
-              <el-select v-model="formState.outCategory"
-                         placeholder="璇烽�夋嫨"
-                         clearable
-                         :disabled="hasBoundLedger"
-                         style="width: 100%">
-                <el-option label="瀹㈠瓨"
-                           value="瀹㈠瓨" />
-                <el-option label="浠e偍"
-                           value="浠e偍" />
-                <el-option label="閿�鍞�"
-                           value="閿�鍞�" />
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍌ㄥ簱鍚嶇О"
-                          prop="oilDepotId"
-                          :rules="[{ required: true, message: '璇烽�夋嫨鍌ㄥ簱鍚嶇О', trigger: 'change' }]">
-              <el-select v-model="formState.oilDepotId"
-                         placeholder="璇烽�夋嫨"
-                         clearable
-                         :disabled="isStorageBound"
-                         popper-class="oil-depot-select-popper"
-                         style="width: 100%"
-                         @change="depotChange">
-                <el-option v-for="item in oilDepotList"
-                           :key="item.id"
-                           :label="`${item.depotName}-${item.company || ''}`"
-                           :value="item.id">
-                  <div class="oil-depot-option">
-                    <div class="oil-depot-option-title">{{ item.depotName }}-{{ item.company }}</div>
-                    <div class="oil-depot-option-line">璐熻矗浜猴細{{ item.chargePerson }}</div>
-                    <div class="oil-depot-option-line">鑱旂郴鐢佃瘽锛歿{ item.phone }}</div>
-                    <div class="oil-depot-option-line">鍚敤鏃ユ湡锛歿{ item.enableDate }}</div>
-                  </div>
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鍌ㄧ綈鍙�"
-                          prop="tankId"
-                          :rules="[{ required: true, message: '璇烽�夋嫨鍌ㄧ綈鍙�', trigger: 'change' }]">
-              <el-select v-model="formState.tankId"
-                         placeholder="璇烽�夋嫨"
-                         clearable
-                         :disabled="isStorageBound"
-                         popper-class="tank-select-popper"
-                         style="width: 100%"
-                         @change="tankChange">
-                <el-option v-for="item in tankList"
-                           :key="item.id"
-                           :label="item.tankNo"
-                           :value="item.id">
-                  <div class="tank-option">
-                    <div class="tank-option-title">{{ item.tankNo }}</div>
-                    <div class="tank-option-line">澶х被锛歿{ item.category }}</div>
-                    <div class="tank-option-line">娌瑰搧锛歿{ item.oilProduct }}</div>
-                    <div class="tank-option-line">缃愬锛歿{ item.capacity }}</div>
-                    <div class="tank-option-line">搴撳瓨浣欓噺(m鲁)锛歿{ item.remaining }}</div>
-                    <div class="tank-option-line">绉熷淇℃伅锛歿{ item.tenantInfo || '--' }}</div>
-                  </div>
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="鍑哄簱鏃ユ湡"
-                          prop="outDate"
-                          :rules="[{ required: true, message: '璇烽�夋嫨鍑哄簱鏃ユ湡', trigger: 'change' }]">
-              <el-date-picker v-model="formState.outDate"
-                              type="date"
-                              value-format="YYYY-MM-DD"
-                              format="YYYY-MM-DD"
-                              placeholder="璇烽�夋嫨"
-                              style="width: 100%" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="娌瑰搧"
-                          prop="oilProduct"
-                          :rules="isStorageBound ? [] : [{ required: true, message: '璇烽�夋嫨娌瑰搧', trigger: 'change' }]">
-              <el-input :model-value="formState.oilProduct"
-                        readonly
-                        placeholder="--" />
-            </el-form-item>
-          </el-col>
-        </el-row>
-        <el-row :gutter="30">
-          <el-col :span="8">
-            <el-form-item label="瀹㈡埛鍚嶇О"
-                          prop="customerId"
-                          :rules="[{ required: true, message: '璇烽�夋嫨瀹㈡埛鍚嶇О', trigger: 'change' }]">
-              <el-select v-model="formState.customerId"
-                         placeholder="璇烽�夋嫨"
-                         clearable
-                         filterable
-                         :disabled="hasBoundLedger"
-                         popper-class="customer-select-popper"
-                         style="width: 100%"
-                         @change="customerChange">
-                <el-option v-for="item in customerList"
-                           :key="item.id"
-                           :label="item.customerName"
-                           :value="item.id">
-                  <div class="customer-option">
-                    <div class="customer-option-title">{{ item.customerName }}</div>
-                    <div class="customer-option-line">閾惰鍩烘湰鎴凤細{{ item.basicBankAccount }}</div>
-                    <div class="customer-option-line">閾惰璐﹀彿锛歿{ item.bankAccount }}</div>
-                    <div class="customer-option-line">鍦板潃鍙婅仈绯绘柟寮忥細{{ item.addressPhone }}</div>
-                  </div>
-                </el-option>
-              </el-select>
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="瀹㈡埛瀵规帴浜�"
-                          prop="contactPerson"
-                          :rules="[{ required: true, message: '璇疯緭鍏ュ鎴峰鎺ヤ汉', trigger: 'blur' }]">
-              <el-input v-model="formState.contactPerson"
-                        placeholder="璇疯緭鍏�"
-                        clearable />
-            </el-form-item>
-          </el-col>
-          <el-col :span="8">
-            <el-form-item label="瀵规帴浜虹數璇�"
-                          prop="contactPhone"
-                          :rules="[
-                { required: true, message: '璇疯緭鍏ュ鎺ヤ汉鐢佃瘽', trigger: 'blur' },
-                { pattern: /^1[3-9]\d{9}$/, message: '璇疯緭鍏ユ湁鏁堢殑11浣嶆墜鏈哄彿鐮�', trigger: 'blur' }
-              ]">
-              <el-input v-model="formState.contactPhone"
-                        placeholder="璇疯緭鍏�11浣嶆暟瀛�"
-                        maxlength="11"
-                        @input="phoneInput('contactPhone')"
-                        clearable />
-            </el-form-item>
-          </el-col>
-        </el-row>
         <!-- 涓�娆″嚭搴撳彲鍒嗘憡缁欏涓鎴凤細鍚勫彴璐︽槑缁嗛兘瑕佸惈鏈鍑哄簱瑙勬牸锛屽垎鎽婃暟閲忎箣鍜� = 鍑哄簱鍚ㄤ綅 -->
         <div class="form-section-title">閿�鍞彴璐︾粦瀹�</div>
         <el-row v-for="(ledger, index) in ledgerRows"
@@ -299,7 +150,6 @@
             </el-form-item>
           </el-col>
         </el-row>
-        <!-- 鎵规鍊欓�夋槸鎸変骇鍝佽鏍煎幓搴撳瓨閲屾崬鐨勶紝鎵�浠ユ斁鍦ㄨ鏍煎悗闈紝閫夊畬瑙勬牸鍐嶉�夋壒娆� -->
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="鍗曚綅"
@@ -308,10 +158,110 @@
                         disabled />
             </el-form-item>
           </el-col>
+        </el-row>
+        <div class="form-section-title">鍑哄簱淇℃伅</div>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鍑哄簱绫诲埆"
+                          prop="outCategory"
+                          :rules="[{ required: true, message: '璇烽�夋嫨鍑哄簱绫诲埆', trigger: 'change' }]">
+              <el-select v-model="formState.outCategory"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         :disabled="hasBoundLedger"
+                         style="width: 100%">
+                <el-option label="瀹㈠瓨"
+                           value="瀹㈠瓨" />
+                <el-option label="浠e偍"
+                           value="浠e偍" />
+                <el-option label="閿�鍞�"
+                           value="閿�鍞�" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍌ㄥ簱鍚嶇О"
+                          prop="oilDepotId"
+                          :rules="[{ required: true, message: '璇烽�夋嫨鍌ㄥ簱鍚嶇О', trigger: 'change' }]">
+              <el-select v-model="formState.oilDepotId"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         :disabled="isStorageBound"
+                         popper-class="oil-depot-select-popper"
+                         style="width: 100%"
+                         @change="depotChange">
+                <el-option v-for="item in oilDepotList"
+                           :key="item.id"
+                           :label="`${item.depotName}-${item.company || ''}`"
+                           :value="item.id">
+                  <div class="oil-depot-option">
+                    <div class="oil-depot-option-title">{{ item.depotName }}-{{ item.company }}</div>
+                    <div class="oil-depot-option-line">璐熻矗浜猴細{{ item.chargePerson }}</div>
+                    <div class="oil-depot-option-line">鑱旂郴鐢佃瘽锛歿{ item.phone }}</div>
+                    <div class="oil-depot-option-line">鍚敤鏃ユ湡锛歿{ item.enableDate }}</div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鍌ㄧ綈鍙�"
+                          prop="tankId"
+                          :rules="[{ required: true, message: '璇烽�夋嫨鍌ㄧ綈鍙�', trigger: 'change' }]">
+              <el-select v-model="formState.tankId"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         :disabled="isStorageBound"
+                         popper-class="tank-select-popper"
+                         style="width: 100%"
+                         @change="tankChange">
+                <el-option v-for="item in tankList"
+                           :key="item.id"
+                           :label="item.tankNo"
+                           :value="item.id">
+                  <div class="tank-option">
+                    <div class="tank-option-title">{{ item.tankNo }}</div>
+                    <div class="tank-option-line">澶х被锛歿{ item.category }}</div>
+                    <div class="tank-option-line">娌瑰搧锛歿{ item.oilProduct }}</div>
+                    <div class="tank-option-line">缃愬锛歿{ item.capacity }}</div>
+                    <div class="tank-option-line">搴撳瓨浣欓噺(m鲁)锛歿{ item.remaining }}</div>
+                    <div class="tank-option-line">绉熷淇℃伅锛歿{ item.tenantInfo || '--' }}</div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鍑哄簱鏃ユ湡"
+                          prop="outDate"
+                          :rules="[{ required: true, message: '璇烽�夋嫨鍑哄簱鏃ユ湡', trigger: 'change' }]">
+              <el-date-picker v-model="formState.outDate"
+                              type="date"
+                              value-format="YYYY-MM-DD"
+                              format="YYYY-MM-DD"
+                              placeholder="璇烽�夋嫨"
+                              style="width: 100%" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="娌瑰搧"
+                          prop="oilProduct"
+                          :rules="isStorageBound ? [] : [{ required: true, message: '璇疯緭鍏ユ补鍝�', trigger: 'change' }]">
+              <!-- 閫夊畬銆屼骇鍝� + 瑙勬牸鍨嬪彿銆嶈嚜鍔ㄥ啓鍏ワ紝涔熻兘鑷繁鏀� -->
+              <el-input v-model="formState.oilProduct"
+                        placeholder="閫夊畬浜у搧涓庤鏍煎瀷鍙峰悗鑷姩鐢熸垚"
+                        @input="handleOilProductInput" />
+            </el-form-item>
+          </el-col>
           <el-col :span="12">
             <el-form-item label="鍑哄簱鎵规"
                           prop="batchNo"
                           :rules="[{ required: true, message: '娌瑰搧鍑哄簱蹇呴』閫夋嫨鍑哄簱鎵规', trigger: 'change' }]">
+              <!-- 鎵规鍊欓�夋槸鎸変骇鍝佽鏍煎幓搴撳瓨閲屾崬鐨勶紝閫夊畬涓婇潰鐨勮鏍艰繖閲屾墠鏈夊緱閫� -->
               <el-select v-model="formState.batchNo"
                          placeholder="璇烽�夋嫨"
                          clearable
@@ -322,6 +272,57 @@
                            :label="item"
                            :value="item" />
               </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="8">
+            <el-form-item label="瀹㈡埛鍚嶇О"
+                          prop="customerId"
+                          :rules="[{ required: true, message: '璇烽�夋嫨瀹㈡埛鍚嶇О', trigger: 'change' }]">
+              <el-select v-model="formState.customerId"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         filterable
+                         :disabled="hasBoundLedger"
+                         popper-class="customer-select-popper"
+                         style="width: 100%"
+                         @change="customerChange">
+                <el-option v-for="item in customerList"
+                           :key="item.id"
+                           :label="item.customerName"
+                           :value="item.id">
+                  <div class="customer-option">
+                    <div class="customer-option-title">{{ item.customerName }}</div>
+                    <div class="customer-option-line">閾惰鍩烘湰鎴凤細{{ item.basicBankAccount }}</div>
+                    <div class="customer-option-line">閾惰璐﹀彿锛歿{ item.bankAccount }}</div>
+                    <div class="customer-option-line">鍦板潃鍙婅仈绯绘柟寮忥細{{ item.addressPhone }}</div>
+                  </div>
+                </el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="瀹㈡埛瀵规帴浜�"
+                          prop="contactPerson"
+                          :rules="[{ required: true, message: '璇疯緭鍏ュ鎴峰鎺ヤ汉', trigger: 'blur' }]">
+              <el-input v-model="formState.contactPerson"
+                        placeholder="璇疯緭鍏�"
+                        clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="瀵规帴浜虹數璇�"
+                          prop="contactPhone"
+                          :rules="[
+                { required: true, message: '璇疯緭鍏ュ鎺ヤ汉鐢佃瘽', trigger: 'blur' },
+                { pattern: /^1[3-9]\d{9}$/, message: '璇疯緭鍏ユ湁鏁堢殑11浣嶆墜鏈哄彿鐮�', trigger: 'blur' }
+              ]">
+              <el-input v-model="formState.contactPhone"
+                        placeholder="璇疯緭鍏�11浣嶆暟瀛�"
+                        maxlength="11"
+                        @input="phoneInput('contactPhone')"
+                        clearable />
             </el-form-item>
           </el-col>
         </el-row>
@@ -484,7 +485,6 @@
                 ? [{ required: true, message: '璇疯緭鍏ヨ溅鎸傜墝鍙�', trigger: 'blur' }]
                 : []">
               <el-input v-model="formState.trailerPlateNo"
-                        :readonly="!!formState.vehicleId"
                         placeholder="璇疯緭鍏�"
                         clearable />
             </el-form-item>
@@ -645,6 +645,27 @@
   // 鏈粦瀹氬崠娌瑰彴璐︽椂璧般�屼骇鍝佸ぇ绫绘爲 + 瑙勬牸鍨嬪彿銆嶏紝涓庨攢鍞彴璐﹂�変骇鍝佺殑鏂瑰紡涓�鑷�
   const productOptions = ref([]);
   const modelOptions = ref([]);
+
+  // 娌瑰搧榛樿鐢便�屼骇鍝� + 瑙勬牸鍨嬪彿銆嶄袱绾ф嫾鍑烘潵锛堜袱绾ч兘閫夊畬鎵嶆湁鍊硷級銆�
+  // autoOilProduct 璁颁綇鑷姩鍐欒繘鍘荤殑鍊硷紝鐢ㄦ潵鍒ゆ柇鐢ㄦ埛鏈夋病鏈夋墜鏀硅繃鈥斺�旀墜鏀硅繃灏变笉鍐嶈鐩�
+  const autoOilProduct = ref("");
+
+  const oilProductLabel = (productName, model) =>
+    [productName, model].filter(Boolean).join(" / ");
+
+  const syncOilProduct = next => {
+    const current = formState.value.oilProduct;
+    if (!current || current === autoOilProduct.value) {
+      formState.value.oilProduct = next || undefined;
+    }
+    autoOilProduct.value = next || "";
+  };
+
+  // 鎵嬫敼杩囦箣鍚� autoOilProduct 灏卞涓嶄笂浜嗭紝鍚庨潰鐨勪骇鍝�/瑙勬牸鑱斿姩涓嶅啀瑕嗙洊瀹�
+  const handleOilProductInput = () => {
+    autoOilProduct.value = "";
+  };
+
   // 鍑哄簱鎵规鍊欓�夊彇璇ヨ鏍肩殑鍏ュ簱鎵规
   const batchNoOptions = ref([]);
   // 閿�鍞被鍑哄簱鐨勫彲鐢ㄩ噺鎻愮ず锛堜笂娆″墿浣� + 褰撳墠搴撳瓨锛�
@@ -888,19 +909,17 @@
       .catch(() => {});
   };
 
-  // 杞﹁締閫夋嫨鏀瑰彉锛氳溅鐗屽彿銆佽溅鎸傜墝鍙蜂笌鍙告満淇℃伅鐢辫溅杈嗕富鏁版嵁甯﹀嚭锛屽嚭搴撴椂鍙告満鍙墜鍔ㄨ鐩�
+  // 杞﹁締閫夋嫨鏀瑰彉锛氳溅鐗屽彿涓庡徃鏈轰俊鎭敱杞﹁締涓绘暟鎹甫鍑猴紝鍑哄簱鏃跺徃鏈哄彲鎵嬪姩瑕嗙洊銆�
+  // 杞︽寕鐗屽彿鏄寕杞﹁嚜宸辩殑鐗屻�佷笉鍦ㄨ溅杈嗕富鏁版嵁閲岋紝濮嬬粓鎵嬪~锛屼笉鍙備笌鑱斿姩銆�
   const vehicleChange = id => {
     const vehicle = vehicleList.value.find(item => item.id === id);
-    if (vehicle) {
-      formState.value.truckPlateNo = vehicle.plateNumber || "";
-      // 杞︽寕鐗屽彿涓庤溅鐗屽彿鏄悓涓�涓墝锛岄�変簡杞﹁締灏卞甫鍑哄苟缃负鍙锛岄伩鍏嶆墜濉嚭涓や釜涓嶄竴鑷寸殑鍊�
-      formState.value.trailerPlateNo = vehicle.plateNumber || "";
-      formState.value.driverName = vehicle.driverName || "";
-      formState.value.driverPhone = vehicle.driverPhone || "";
-    } else {
+    if (!vehicle) {
       formState.value.truckPlateNo = "";
-      formState.value.trailerPlateNo = "";
+      return;
     }
+    formState.value.truckPlateNo = vehicle.plateNumber || "";
+    formState.value.driverName = vehicle.driverName || "";
+    formState.value.driverPhone = vehicle.driverPhone || "";
   };
 
   const salesLedgerLabel = item =>
@@ -1104,7 +1123,7 @@
   };
 
   const ledgerProductLabel = item =>
-    [item.productName, item.model].filter(Boolean).join(" / ");
+    oilProductLabel(item.productName, item.model);
 
   const clearProduct = () => {
     formState.value.productId = undefined;
@@ -1112,7 +1131,8 @@
     formState.value.productName = "";
     formState.value.model = "";
     formState.value.unit = "";
-    formState.value.oilProduct = undefined;
+    // 娌瑰搧鏄骇鍝� + 瑙勬牸鎷煎嚭鏉ョ殑锛屼骇鍝佷竴娓呯┖瀹冧篃璺熺潃娓呯┖锛屾墜鏀硅繃鐨勪笉鍔�
+    syncOilProduct("");
     formState.value.batchNo = undefined;
     batchNoOptions.value = [];
   };
@@ -1129,7 +1149,7 @@
     formState.value.productName = item.productName;
     formState.value.model = item.model;
     formState.value.unit = item.unit;
-    formState.value.oilProduct = item.productName || item.model || undefined;
+    syncOilProduct(oilProductLabel(item.productName, item.model));
     formState.value.batchNo = undefined;
     fetchBatchNoOptions();
     proxy.$refs["formRef"]?.validateField("productModelId");
@@ -1148,13 +1168,14 @@
     });
   };
 
-  // 瑙勬牸鍨嬪彿鏀瑰彉锛氫骇鍝佸悕绉�/瑙勬牸/鍗曚綅鐢辫鏍间富鏁版嵁甯﹀嚭锛屾补鍝佸彇浜у搧鍚嶇О
+  // 瑙勬牸鍨嬪彿鏀瑰彉锛氫骇鍝佸悕绉�/瑙勬牸/鍗曚綅鐢辫鏍间富鏁版嵁甯﹀嚭
   const handleProductModelChange = value => {
     const item = modelOptions.value.find(row => row.id === value);
     formState.value.productName = item?.productName || "";
     formState.value.model = item?.model || "";
     formState.value.unit = item?.unit || "";
-    formState.value.oilProduct = item?.productName || undefined;
+    // 鏈鎴枫�屾补鍝併�嶆寜銆屼骇鍝佸悕绉� / 瑙勬牸鍨嬪彿銆嶅睍绀猴紝搴撳瓨鏄庣粏銆佸嚭搴撳彴璐︾殑娌瑰搧鍒楀彇鐨勫氨鏄畠
+    syncOilProduct(oilProductLabel(item?.productName, item?.model));
     formState.value.batchNo = undefined;
     fetchBatchNoOptions();
     proxy.$refs["formRef"]?.validateField("productModelId");
diff --git a/src/views/procurementManagement/purchaseApplication/index.vue b/src/views/procurementManagement/purchaseApplication/index.vue
index f654894..ce5191b 100644
--- a/src/views/procurementManagement/purchaseApplication/index.vue
+++ b/src/views/procurementManagement/purchaseApplication/index.vue
@@ -413,17 +413,6 @@
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="鍚堝悓閲戦(鍏�)锛�"
-                          prop="contractAmount">
-              <el-input-number v-model="form.contractAmount"
-                               :precision="2"
-                               :step="0.1"
-                               :min="0"
-                               placeholder="璇疯緭鍏�"
-                               style="width: 100%" />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
             <el-form-item label="閲囪喘鏁伴噺锛堝惃锛夛細"
                           prop="purchaseQuantity">
               <el-input-number v-model="form.purchaseQuantity"

--
Gitblit v1.9.3