From 4b96a3812c141f06c767467a7f9e41940b4e8d03 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 24 六月 2026 18:42:13 +0800
Subject: [PATCH] 1.客户,销售,供应商,采购增加总合同号 2.采购的产品增加库存状态回显 3.出厂改成创建时间倒序 4.开发总合同号管理页面

---
 src/views/procurementManagement/procurementLedger/index.vue |  115 ++++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 104 insertions(+), 11 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index a65df53..83089cf 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -278,7 +278,7 @@
                          show-overflow-tooltip />
         <el-table-column fixed="right"
                          label="鎿嶄綔"
-                         width="120"
+                         width="200"
                          align="center">
           <template #default="scope">
             <el-button link
@@ -288,6 +288,11 @@
             <el-button link
                        type="primary"
                        @click="openFileDialog(scope.row)">闄勪欢</el-button>
+            <el-button link
+                       type="primary"
+                       v-if="scope.row.masterContractNo"
+                       @click="openContractFileDialog(scope.row)">鎬诲悎鍚岄檮浠�
+            </el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -310,15 +315,6 @@
                label-position="top"
                :rules="rules"
                ref="formRef">
-        <el-row :gutter="30">
-          <el-col :span="12">
-            <el-form-item label="鎬诲悎鍚屽彿锛�">
-              <el-input v-model="form.masterContractNo"
-                        placeholder="璇疯緭鍏�"
-                        clearable />
-            </el-form-item>
-          </el-col>
-        </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="閲囪喘鍚堝悓鍙凤細"
@@ -351,7 +347,8 @@
               <el-select v-model="form.supplierId"
                          placeholder="璇烽�夋嫨"
                          filterable
-                         clearable>
+                         clearable
+                         @change="handleSupplierChange">
                 <el-option v-for="item in supplierList"
                            :key="item.id"
                            :label="item.supplierName"
@@ -360,6 +357,22 @@
               </el-select>
             </el-form-item>
           </el-col>
+          <el-col :span="12">
+            <el-form-item label="鎬诲悎鍚屽彿锛�">
+              <el-select v-model="form.masterContractNo"
+                         placeholder="璇峰厛閫夋嫨渚涘簲鍟�"
+                         filterable
+                         clearable
+                         :disabled="!form.supplierId">
+                <el-option v-for="item in contractList"
+                           :key="item.id"
+                           :label="item.masterContractNo"
+                           :value="item.masterContractNo" />
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="椤圭洰鍚嶇О"
                           prop="projectName">
@@ -857,6 +870,28 @@
               v-model:visible="fileListDialogVisible"
               record-type="purchase_ledger"
               :record-id="recordId" />
+    <!-- 鎬诲悎鍚岄檮浠跺脊绐� -->
+    <el-dialog
+      v-model="contractFileDialogVisible"
+      title="鎬诲悎鍚岄檮浠�"
+      width="700px"
+      :close-on-click-modal="false">
+      <el-table :data="contractFileList" border v-if="contractFileList.length">
+        <el-table-column prop="name" label="鏂囦欢鍚嶇О" show-overflow-tooltip />
+        <el-table-column prop="byteSize" label="鏂囦欢澶у皬" width="120">
+          <template #default="{ row }">
+            {{ formatFileSize(row.byteSize) }}
+          </template>
+        </el-table-column>
+        <el-table-column label="鎿嶄綔" width="150">
+          <template #default="{ row }">
+            <el-link type="primary" :href="row.previewURL" target="_blank">棰勮</el-link>
+            <el-link type="primary" :href="row.downloadURL" style="margin-left: 10px">涓嬭浇</el-link>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-empty v-else description="鏆傛棤闄勪欢" />
+    </el-dialog>
   </div>
 </template>
 
@@ -914,6 +949,9 @@
   const sparePartsOptions = ref([]);
   const salesContractList = ref([]);
   const supplierList = ref([]);
+  const contractList = ref([]); // 渚涘簲鍟嗗悎鍚屽垪琛�
+  const contractFileDialogVisible = ref(false);
+  const contractFileList = ref([]);
   const tableLoading = ref(false);
   const recordId = ref();
   const fileListDialogVisible = ref(false);
@@ -926,6 +964,7 @@
   import useUserStore from "@/store/modules/user";
   import { modelList, productTreeList } from "@/api/basicData/product.js";
   import { getSparePartsList } from "@/api/equipmentManagement/spareParts.js";
+  import { getSupplierContractList, getSupplierContractFilesByNo } from "@/api/basicData/supplierContract.js";
   import dayjs from "dayjs";
   import FileUpload from "@/components/AttachmentUpload/file/index.vue";
 
@@ -966,6 +1005,7 @@
       寰呭叆搴�: "info", // 寰呭叆搴� - 鐏拌壊
       鍏ュ簱涓�: "warning", // 鍏ュ簱涓� - 姗欒壊
       瀹屽叏鍏ュ簱: "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
+      宸查┏鍥�: "danger", // 宸查┏鍥� - 绾㈣壊
     };
     return typeMap[status] || "";
   };
@@ -1509,6 +1549,17 @@
             type: 2,
           });
           productData.value = productRes.data || [];
+          // 缂栬緫鏃跺姞杞戒緵搴斿晢鐨勫悎鍚屽垪琛ㄤ互渚垮洖鏄炬�诲悎鍚屽彿
+          if (purchaseRes.supplierId) {
+            try {
+              const contractRes = await getSupplierContractList(purchaseRes.supplierId);
+              if (contractRes.code === 200) {
+                contractList.value = contractRes.data || [];
+              }
+            } catch (error) {
+              console.error('鑾峰彇渚涘簲鍟嗗悎鍚屽垪琛ㄥけ璐�:', error);
+            }
+          }
         } catch (error) {
           console.error("鍔犺浇閲囪喘鍙拌处鏁版嵁澶辫触:", error);
           proxy.$modal.msgError("鍔犺浇鏁版嵁澶辫触");
@@ -2200,6 +2251,48 @@
     }
   };
 
+  // 渚涘簲鍟嗛�夋嫨鍙樺寲鏃讹紝鍔犺浇璇ヤ緵搴斿晢鐨勫悎鍚屽垪琛�
+  const handleSupplierChange = async (supplierId) => {
+    form.value.masterContractNo = '';
+    contractList.value = [];
+    if (!supplierId) return;
+
+    try {
+      const res = await getSupplierContractList(supplierId);
+      if (res.code === 200) {
+        contractList.value = res.data || [];
+      }
+    } catch (error) {
+      console.error('鑾峰彇渚涘簲鍟嗗悎鍚屽垪琛ㄥけ璐�:', error);
+    }
+  };
+
+  // 鏌ョ湅鎬诲悎鍚岄檮浠�
+  const openContractFileDialog = async (row) => {
+    if (!row.masterContractNo) {
+      proxy.$modal.msgWarning('璇ヨ褰曟病鏈夋�诲悎鍚屽彿');
+      return;
+    }
+    try {
+      const res = await getSupplierContractFilesByNo(row.masterContractNo);
+      if (res.code === 200) {
+        contractFileList.value = res.data || [];
+        contractFileDialogVisible.value = true;
+      }
+    } catch (error) {
+      console.error('鑾峰彇鍚堝悓闄勪欢澶辫触:', error);
+    }
+  };
+
+  // 鏍煎紡鍖栨枃浠跺ぇ灏�
+  const formatFileSize = (bytes) => {
+    if (!bytes) return '0 B';
+    const k = 1024;
+    const sizes = ['B', 'KB', 'MB', 'GB'];
+    const i = Math.floor(Math.log(bytes) / Math.log(k));
+    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
+  };
+
   onMounted(() => {
     getList();
     getTemplateList();

--
Gitblit v1.9.3