From 41c7dd199f1919a01dfc5e04f62359ca8bc3cb2c Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期六, 12 九月 2026 12:43:32 +0800
Subject: [PATCH] feat: 库存管理三表单与详情页签分组、采购台账分栏、油品联动与电话校验、冻结解冻修复

---
 src/views/procurementManagement/procurementLedger/index.vue |  297 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 284 insertions(+), 13 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 7e1576b..087f716 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -161,6 +161,42 @@
                          prop="projectName"
                          width="320"
                          show-overflow-tooltip />
+        <el-table-column label="閲囪喘绫诲埆"
+                         prop="purchaseCategory"
+                         width="100"
+                         show-overflow-tooltip />
+        <el-table-column label="鎻愯揣鏂瑰紡"
+                         prop="pickupMethod"
+                         width="100"
+                         show-overflow-tooltip />
+        <el-table-column label="閲囪喘娌瑰搧"
+                         prop="purchaseOilProduct"
+                         width="100"
+                         show-overflow-tooltip />
+        <el-table-column label="鐗╂祦鏂瑰紡"
+                         prop="logisticsMethod"
+                         width="100"
+                         show-overflow-tooltip />
+        <el-table-column label="閲囪喘娌瑰簱"
+                         prop="oilDepotName"
+                         width="150"
+                         show-overflow-tooltip />
+        <el-table-column label="瀹㈡埛鍚嶇О"
+                         prop="customerName"
+                         width="150"
+                         show-overflow-tooltip />
+        <el-table-column label="鏈�浣冲埌绔欐棩鏈�"
+                         prop="bestArrivalDate"
+                         width="120"
+                         show-overflow-tooltip />
+        <el-table-column label="閲囪喘鏁伴噺锛堝惃锛�"
+                         prop="purchaseQuantity"
+                         width="120"
+                         align="center" />
+        <el-table-column label="閲囪喘鐢宠璁㈠崟鐘舵��"
+                         prop="purchaseOrderStatus"
+                         width="140"
+                         show-overflow-tooltip />
         <el-table-column label="瀹℃壒鐘舵��"
                          prop="approvalStatus"
                          width="100"
@@ -300,17 +336,10 @@
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
-            <el-form-item label="浠樻鏂瑰紡">
-              <el-input v-model="form.paymentMethod"
-                        placeholder="璇疯緭鍏�"
-                        clearable />
-            </el-form-item>
-          </el-col>
-          <el-col :span="12">
-            <el-form-item label="绛捐鏃ユ湡锛�"
-                          prop="executionDate">
+            <el-form-item label="鏈�浣冲埌绔欐棩鏈燂細"
+                          prop="bestArrivalDate">
               <el-date-picker style="width: 100%"
-                              v-model="form.executionDate"
+                              v-model="form.bestArrivalDate"
                               value-format="YYYY-MM-DD"
                               format="YYYY-MM-DD"
                               type="date"
@@ -318,9 +347,16 @@
                               clearable />
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="浠樻鏂瑰紡">
+              <el-input v-model="form.paymentMethod"
+                        placeholder="璇疯緭鍏�"
+                        clearable />
+            </el-form-item>
+          </el-col>
         </el-row>
         <el-row :gutter="30">
-          <el-col :span="12">
+          <el-col :span="8">
             <el-form-item label="褰曞叆浜猴細"
                           prop="recorderId">
               <el-select v-model="form.recorderId"
@@ -334,7 +370,19 @@
               </el-select>
             </el-form-item>
           </el-col>
-          <el-col :span="12">
+          <el-col :span="8">
+            <el-form-item label="绛捐鏃ユ湡锛�"
+                          prop="executionDate">
+              <el-date-picker style="width: 100%"
+                              v-model="form.executionDate"
+                              value-format="YYYY-MM-DD"
+                              format="YYYY-MM-DD"
+                              type="date"
+                              placeholder="璇烽�夋嫨"
+                              clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
             <el-form-item label="褰曞叆鏃ユ湡锛�"
                           prop="entryDate">
               <el-date-picker style="width: 100%"
@@ -344,6 +392,144 @@
                               type="date"
                               placeholder="璇烽�夋嫨"
                               clearable />
+            </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="applicationSubmitTime">
+              <el-date-picker style="width: 100%"
+                              v-model="form.applicationSubmitTime"
+                              value-format="YYYY-MM-DD HH:mm:ss"
+                              format="YYYY-MM-DD HH:mm:ss"
+                              type="datetime"
+                              placeholder="璇烽�夋嫨"
+                              clearable />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閲囪喘绫诲埆锛�"
+                          prop="purchaseCategory">
+              <el-radio-group v-model="form.purchaseCategory"
+                              @change="purchaseCategoryChange">
+                <el-radio value="瀹㈠瓨">瀹㈠瓨</el-radio>
+                <el-radio value="浠e偍">浠e偍</el-radio>
+                <el-radio value="閲囪喘鍏ュ簱">閲囪喘鍏ュ簱</el-radio>
+                <el-radio value="閲囪喘鐩撮攢">閲囪喘鐩撮攢</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="閲囪喘娌瑰搧锛�"
+                          prop="purchaseOilProduct">
+              <el-select v-model="form.purchaseOilProduct"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         style="width: 100%">
+                <el-option label="姹�#92"
+                           value="姹�#92" />
+                <el-option label="姹�#95"
+                           value="姹�#95" />
+                <el-option label="鏌�#0"
+                           value="鏌�#0" />
+                <el-option label="鏌�#-35"
+                           value="鏌�#-35" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="鐗╂祦鏂瑰紡锛�"
+                          prop="logisticsMethod">
+              <el-select v-model="form.logisticsMethod"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         style="width: 100%">
+                <el-option label="鍘傚閰嶉��"
+                           value="鍘傚閰嶉��" />
+                <el-option label="濮斿鐗╂祦"
+                           value="濮斿鐗╂祦" />
+                <el-option label="瀹㈡埛鑷彁"
+                           value="瀹㈡埛鑷彁" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
+          <el-col :span="12">
+            <el-form-item label="鎻愯揣鏂瑰紡锛�"
+                          prop="pickupMethod">
+              <el-radio-group v-model="form.pickupMethod">
+                <el-radio value="鏆備笉鎻愯揣">鏆備笉鎻愯揣</el-radio>
+                <el-radio value="鎻愯揣">鎻愯揣</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閲囪喘娌瑰簱锛�"
+                          prop="oilDepotId">
+              <el-select v-model="form.oilDepotId"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         popper-class="oil-depot-select-popper"
+                         style="width: 100%">
+                <el-option v-for="item in oilDepotList"
+                           :key="item.id"
+                           :label="item.depotName"
+                           :value="item.id">
+                  <div class="oil-depot-option">
+                    <div class="oil-depot-option-title">{{ item.depotName }}</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.company }}</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="customerName">
+              <el-input v-model="form.customerName"
+                        placeholder="浠呴噰璐被鍒负浠e偍/閲囪喘鐩撮攢鏃跺彲濉啓"
+                        clearable
+                        :disabled="!['浠e偍', '閲囪喘鐩撮攢'].includes(form.purchaseCategory)" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="閲囪喘鏁伴噺锛堝惃锛夛細"
+                          prop="purchaseQuantity">
+              <el-input-number v-model="form.purchaseQuantity"
+                               :precision="0"
+                               :step="1"
+                               :min="0"
+                               placeholder="璇疯緭鍏�"
+                               style="width: 100%" />
+            </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="purchaseOrderStatus">
+              <el-select v-model="form.purchaseOrderStatus"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         style="width: 100%">
+                <el-option label="宸茬敵璇凤紝鏈杞�"
+                           value="宸茬敵璇凤紝鏈杞�" />
+                <el-option label="浠ュ嚭鍘傦紝鏈叆搴�"
+                           value="浠ュ嚭鍘傦紝鏈叆搴�" />
+                <el-option label="宸插叆搴�"
+                           value="宸插叆搴�" />
+              </el-select>
             </el-form-item>
           </el-col>
         </el-row>
@@ -733,6 +919,7 @@
     delPurchaseTemplate,
     batchGeneratePurchaseInboundSteps,
   } from "@/api/procurementManagement/procurementLedger.js";
+  import { allOilDepot } from "@/api/basicData/oilDepot.js";
   import useFormData from "@/hooks/useFormData.js";
   const FileList = defineAsyncComponent(() =>
     import("@/components/Dialog/FileList.vue")
@@ -749,6 +936,7 @@
   const productOptions = ref([]);
   const salesContractList = ref([]);
   const supplierList = ref([]);
+  const oilDepotList = ref([]);
   const tableLoading = ref(false);
   const recordId = ref();
   const fileListDialogVisible = ref(false);
@@ -931,6 +1119,16 @@
       paymentMethod: "",
       executionDate: "",
       isChecked: false,
+      purchaseCategory: "",
+      purchaseOilProduct: "",
+      logisticsMethod: "",
+      pickupMethod: "",
+      oilDepotId: "",
+      customerName: "",
+      bestArrivalDate: "",
+      purchaseQuantity: "",
+      purchaseOrderStatus: "",
+      applicationSubmitTime: "",
     },
     rules: {
       purchaseContractNumber: [
@@ -942,6 +1140,18 @@
       supplierId: [{ required: true, message: "璇疯緭鍏�", trigger: "blur" }],
       entryDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
       executionDate: [{ required: true, message: "璇烽�夋嫨", trigger: "change" }],
+      purchaseCategory: [
+        { required: true, message: "璇烽�夋嫨閲囪喘绫诲埆", trigger: "change" },
+      ],
+      purchaseOilProduct: [
+        { required: true, message: "璇烽�夋嫨閲囪喘娌瑰搧", trigger: "change" },
+      ],
+      oilDepotId: [
+        { required: true, message: "璇烽�夋嫨閲囪喘娌瑰簱", trigger: "change" },
+      ],
+      purchaseQuantity: [
+        { required: true, message: "璇疯緭鍏ラ噰璐暟閲�", trigger: "change" },
+      ],
     },
   });
   const { form, rules } = toRefs(data);
@@ -1311,9 +1521,10 @@
     isTemplateNameDuplicate.value = false;
     try {
       // 骞惰鍔犺浇鍩虹鏁版嵁
-      const [salesRes, supplierRes] = await Promise.all([
+      const [salesRes, supplierRes, oilDepotRes] = await Promise.all([
         getSalesNo(),
         getOptions(),
+        allOilDepot(),
       ]);
 
       salesContractList.value = salesRes || [];
@@ -1321,6 +1532,7 @@
       supplierList.value = (supplierRes.data || []).filter(
         item => item.isWhite === 0
       );
+      oilDepotList.value = oilDepotRes?.data || [];
 
       form.value.entryDate = getCurrentDate();
 
@@ -1896,6 +2108,13 @@
       }
     }
   };
+  // 閲囪喘绫诲埆鏀瑰彉锛氫粎浠e偍/閲囪喘鐩撮攢鏃跺鎴峰悕绉板彲鐢紝鍒囨崲鍚庢竻绌�
+  const purchaseCategoryChange = val => {
+    if (!["浠e偍", "閲囪喘鐩撮攢"].includes(val)) {
+      form.value.customerName = "";
+    }
+  };
+
   // 閿�鍞悎鍚岄�夋嫨鏀瑰彉鏂规硶
   const salesLedgerChange = async row => {
     console.log("row", row);
@@ -1984,6 +2203,18 @@
 </script>
 
 <style scoped lang="scss">
+  // 琛ㄥ崟鍒嗘爮鏍囬锛氳摑鑹茬珫鏉� + 娴呰摑搴曡壊锛岀獊鍑哄垎鍖�
+  .form-section-title {
+    margin: 18px 0 14px;
+    padding: 8px 14px;
+    font-size: 15px;
+    font-weight: 600;
+    color: #1d6fd8;
+    background: linear-gradient(90deg, rgba(64, 158, 255, 0.14), rgba(64, 158, 255, 0.02));
+    border-left: 4px solid #409eff;
+    border-radius: 3px;
+  }
+
   .invalid-row {
     opacity: 0.6;
     background-color: #f5f7fa;
@@ -2001,6 +2232,24 @@
   .select-button-group {
     display: flex;
     align-items: center;
+  }
+
+  // 閲囪喘娌瑰簱涓嬫媺閫夐」锛氬皬鍗$墖鏍峰紡
+  .oil-depot-option {
+    padding: 8px 10px;
+
+    .oil-depot-option-title {
+      font-size: 14px;
+      font-weight: 600;
+      color: #303133;
+      margin-bottom: 4px;
+    }
+
+    .oil-depot-option-line {
+      font-size: 12px;
+      color: #909399;
+      line-height: 1.8;
+    }
   }
 
   // 瀹℃壒浜鸿妭鐐瑰鍣ㄦ牱寮�
@@ -2064,3 +2313,25 @@
     }
   }
 </style>
+
+<style lang="scss">
+  // 涓嬫媺闈㈡澘娓叉煋鍦� body 涓嬶紝闇�鍏ㄥ眬鏍峰紡
+  .oil-depot-select-popper {
+    .el-select-dropdown__item {
+      height: auto;
+      line-height: normal;
+      padding: 4px 0;
+    }
+
+    .oil-depot-option {
+      border: 1px solid #e4e7ed;
+      border-radius: 6px;
+      background-color: #fafbfc;
+
+      &:hover {
+        border-color: #409eff;
+        background-color: #f0f7ff;
+      }
+    }
+  }
+</style>

--
Gitblit v1.9.3