From bcefcad229dc22a8994364afc7827aab8123dd79 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期一, 29 六月 2026 11:29:16 +0800
Subject: [PATCH] 新疆大罗素 1.隐藏字段

---
 src/views/procurementManagement/procurementLedger/index.vue |  237 +++++++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 173 insertions(+), 64 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 8a6c27d..495f159 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -4,6 +4,14 @@
       <div>
         <el-form :model="searchForm"
                  :inline="true">
+          <el-form-item label="鎬诲悎鍚屽彿锛�">
+            <el-input v-model="searchForm.masterContractNo"
+                      style="width: 240px"
+                      placeholder="璇疯緭鍏�"
+                      @change="handleQuery"
+                      clearable
+                      :prefix-icon="Search" />
+          </el-form-item>
           <el-form-item label="渚涘簲鍟嗗悕绉帮細">
             <el-input v-model="searchForm.supplierName"
                       placeholder="璇疯緭鍏�"
@@ -19,13 +27,13 @@
                       clearable
                       :prefix-icon="Search" />
           </el-form-item>
-          <el-form-item label="閿�鍞悎鍚屽彿锛�">
-            <el-input v-model="searchForm.salesContractNo"
-                      placeholder="璇疯緭鍏�"
-                      clearable
-                      prefix-icon="Search"
-                      @change="handleQuery" />
-          </el-form-item>
+<!--          <el-form-item label="璁㈠崟鍙凤細">-->
+<!--            <el-input v-model="searchForm.salesContractNo"-->
+<!--                      placeholder="璇疯緭鍏�"-->
+<!--                      clearable-->
+<!--                      prefix-icon="Search"-->
+<!--                      @change="handleQuery" />-->
+<!--          </el-form-item>-->
           <el-form-item label="椤圭洰鍚嶇О锛�">
             <el-input v-model="searchForm.projectName"
                       placeholder="璇疯緭鍏�"
@@ -77,7 +85,7 @@
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <el-button type="danger"
                    plain
-                   @click="handleDelete">鍒犻櫎
+                   @click="handleDelete" v-hasPermi="['procurementManagement:procurementLedger:remove']">鍒犻櫎
         </el-button>
       </div>
       <el-table :data="tableData"
@@ -201,14 +209,18 @@
                          label="搴忓彿"
                          type="index"
                          width="60" />
+        <el-table-column label="鎬诲悎鍚屽彿"
+                         prop="masterContractNo"
+                         width="150"
+                         show-overflow-tooltip />
         <el-table-column label="閲囪喘鍚堝悓鍙�"
                          prop="purchaseContractNumber"
                          width="160"
                          show-overflow-tooltip />
-        <el-table-column label="閿�鍞悎鍚屽彿"
-                         prop="salesContractNo"
-                         width="160"
-                         show-overflow-tooltip />
+<!--        <el-table-column label="璁㈠崟鍙�"-->
+<!--                         prop="salesContractNo"-->
+<!--                         width="160"-->
+<!--                         show-overflow-tooltip />-->
         <el-table-column label="渚涘簲鍟嗗悕绉�"
                          prop="supplierName"
                          width="160"
@@ -228,17 +240,17 @@
             </el-tag>
           </template>
         </el-table-column>
-        <el-table-column label="鍏ュ簱鐘舵��"
-                         prop="stockInStatus"
-                         width="100"
-                         show-overflow-tooltip>
-          <template #default="scope">
-            <el-tag :type="getStockInStatusType(scope.row.stockInStatus)"
-                    size="small">
-              {{ scope.row.stockInStatus || '--' }}
-            </el-tag>
-          </template>
-        </el-table-column>
+<!--        <el-table-column label="鍏ュ簱鐘舵��"-->
+<!--                         prop="stockInStatus"-->
+<!--                         width="100"-->
+<!--                         show-overflow-tooltip>-->
+<!--          <template #default="scope">-->
+<!--            <el-tag :type="getStockInStatusType(scope.row.stockInStatus)"-->
+<!--                    size="small">-->
+<!--              {{ scope.row.stockInStatus || '&#45;&#45;' }}-->
+<!--            </el-tag>-->
+<!--          </template>-->
+<!--        </el-table-column>-->
         <el-table-column label="绛捐鏃ユ湡"
                          prop="executionDate"
                          width="100"
@@ -266,17 +278,21 @@
                          show-overflow-tooltip />
         <el-table-column fixed="right"
                          label="鎿嶄綔"
-                         width="120"
+                         width="200"
                          align="center">
           <template #default="scope">
             <el-button link
                        type="primary"
-                       @click="openForm('edit', scope.row)"
-                       :disabled="scope.row.stockInStatus === '瀹屽叏鍏ュ簱'">缂栬緫
+                       @click="openForm('edit', scope.row)">缂栬緫
             </el-button>
             <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>
@@ -308,21 +324,21 @@
                         clearable />
             </el-form-item>
           </el-col>
-          <el-col :span="12">
-            <el-form-item label="閿�鍞悎鍚屽彿锛�"
-                          prop="salesLedgerId">
-              <el-select v-model="form.salesLedgerId"
-                         placeholder="璇烽�夋嫨"
-                         filterable
-                         clearable
-                         @change="salesLedgerChange">
-                <el-option v-for="item in salesContractList"
-                           :key="item.id"
-                           :label="item.salesContractNo"
-                           :value="item.id" />
-              </el-select>
-            </el-form-item>
-          </el-col>
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="璁㈠崟鍙凤細"-->
+<!--                          prop="salesLedgerId">-->
+<!--              <el-select v-model="form.salesLedgerId"-->
+<!--                         placeholder="璇烽�夋嫨"-->
+<!--                         filterable-->
+<!--                         clearable-->
+<!--                         @change="salesLedgerChange">-->
+<!--                <el-option v-for="item in salesContractList"-->
+<!--                           :key="item.id"-->
+<!--                           :label="item.salesContractNo"-->
+<!--                           :value="item.id" />-->
+<!--              </el-select>-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
         </el-row>
         <el-row :gutter="30">
           <el-col :span="12">
@@ -331,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"
@@ -340,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">
@@ -352,9 +385,16 @@
         <el-row :gutter="30">
           <el-col :span="12">
             <el-form-item label="浠樻鏂瑰紡">
-              <el-input v-model="form.paymentMethod"
-                        placeholder="璇疯緭鍏�"
-                        clearable />
+              <el-select v-model="form.paymentMethod"
+                         placeholder="璇烽�夋嫨"
+                         clearable
+                         style="width: 100%">
+                <el-option label="鐜伴噾" value="鐜伴噾" />
+                <el-option label="鐢垫眹" value="鐢垫眹" />
+                <el-option label="寰俊" value="寰俊" />
+                <el-option label="鏀粯瀹�" value="鏀粯瀹�" />
+                <el-option label="鏀エ" value="鏀エ" />
+              </el-select>
             </el-form-item>
           </el-col>
           <el-col :span="12">
@@ -402,10 +442,12 @@
           <el-form-item label="浜у搧淇℃伅锛�"
                         prop="entryDate">
             <el-button type="primary"
+                       v-if="form.approvalStatus !== 3"
                        @click="openProductForm('add')">娣诲姞
             </el-button>
             <el-button plain
                        type="danger"
+                       v-if="form.approvalStatus !== 3"
                        @click="deleteProduct">鍒犻櫎
             </el-button>
           </el-form-item>
@@ -563,7 +605,7 @@
               <el-button link
                          type="primary"
                          @click="openProductForm('edit', scope.row, scope.$index)"
-                         :disabled="scope.row.stockInApprovalStatus === '瀹屽叏鍏ュ簱'">缂栬緫
+                         :disabled="form.approvalStatus === 3">缂栬緫
               </el-button>
             </template>
           </el-table-column>
@@ -828,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>
 
@@ -885,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);
@@ -897,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";
 
@@ -937,6 +1005,7 @@
       寰呭叆搴�: "info", // 寰呭叆搴� - 鐏拌壊
       鍏ュ簱涓�: "warning", // 鍏ュ簱涓� - 姗欒壊
       瀹屽叏鍏ュ簱: "success", // 瀹屽叏鍏ュ簱 - 缁胯壊
+      宸查┏鍥�: "danger", // 宸查┏鍥� - 绾㈣壊
     };
     return typeMap[status] || "";
   };
@@ -1051,6 +1120,7 @@
       supplierName: "", // 渚涘簲鍟嗗悕绉�
       purchaseContractNumber: "", // 閲囪喘鍚堝悓缂栧彿
       salesContractNo: "", // 閿�鍞悎鍚岀紪鍙�
+      masterContractNo: "", // 鎬诲悎鍚屽彿
       projectName: "", // 椤圭洰鍚嶇О
       entryDate: null, // 褰曞叆鏃ユ湡
       entryDateStart: undefined,
@@ -1060,6 +1130,7 @@
       purchaseContractNumber: "",
       salesLedgerId: "",
       projectName: "",
+      masterContractNo: "",
       recorderId: "",
       entryDate: "",
       productData: [],
@@ -1438,13 +1509,6 @@
   };
   // 鎵撳紑寮规
   const openForm = async (type, row) => {
-    // 缂栬緫鏃舵鏌ュ叆搴撶姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
-    if (type === "edit" && row) {
-      if (row.stockInStatus === "瀹屽叏鍏ュ簱") {
-        proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑璁板綍涓嶈兘缂栬緫");
-        return;
-      }
-    }
 
     await getTemplateList();
     await userListNoPage().then(res => {
@@ -1485,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("鍔犺浇鏁版嵁澶辫触");
@@ -1615,9 +1690,9 @@
   };
   // 鎵撳紑浜у搧寮规
   const openProductForm = async (type, row, index) => {
-    // 缂栬緫鏃舵鏌ヤ骇鍝佸叆搴撳鏍哥姸鎬侊紝瀹屽叏鍏ュ簱鏃朵笉鑳界紪杈�
-    if (type === "edit" && row && row.stockInApprovalStatus === "瀹屽叏鍏ュ簱") {
-      proxy.$modal.msgWarning("瀹屽叏鍏ュ簱鐘舵�佺殑浜у搧涓嶈兘缂栬緫");
+    // 瀹℃壒閫氳繃鏃朵笉鑳界紪杈戜骇鍝佷俊鎭�
+    if (type === "edit" && form.value.approvalStatus === 3) {
+      proxy.$modal.msgWarning("瀹℃壒閫氳繃鐨勮褰曚笉鑳界紪杈戜骇鍝佷俊鎭�");
       return;
     }
 
@@ -1864,14 +1939,6 @@
   const deleteProduct = () => {
     if (productSelectedRows.value.length === 0) {
       proxy.$modal.msgWarning("璇烽�夋嫨鏁版嵁");
-      return;
-    }
-    // 妫�鏌ラ�変腑鐨勪骇鍝佷腑鏄惁鏈夊畬鍏ㄥ叆搴撶殑
-    const hasFullyStocked = productSelectedRows.value.some(
-      row => row.stockInApprovalStatus === "瀹屽叏鍏ュ簱"
-    );
-    if (hasFullyStocked) {
-      proxy.$modal.msgWarning("閫変腑鐨勪骇鍝佷腑鍖呭惈瀹屽叏鍏ュ簱鐨勪骇鍝侊紝鏃犳硶鍒犻櫎");
       return;
     }
     if (operationType.value === "add") {
@@ -2184,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