From 36549e4b0d27c4d73fd29e483b9c39e1b16f3d43 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期六, 18 七月 2026 10:49:32 +0800
Subject: [PATCH] feat: 销售和采购单据打印下载

---
 src/views/procurementManagement/procurementLedger/index.vue |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 52 insertions(+), 2 deletions(-)

diff --git a/src/views/procurementManagement/procurementLedger/index.vue b/src/views/procurementManagement/procurementLedger/index.vue
index 77c70a3..685a8aa 100644
--- a/src/views/procurementManagement/procurementLedger/index.vue
+++ b/src/views/procurementManagement/procurementLedger/index.vue
@@ -45,6 +45,7 @@
         <el-button @click="handleOut">瀵煎嚭</el-button>
         <el-button type="danger" plain @click="handleDelete">鍒犻櫎
         </el-button>
+        <el-button type="warning" plain @click="handlePrint">鎵撳嵃鍗曟嵁</el-button>
       </div>
       <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
         :expand-row-keys="expandedRowKeys" :row-key="(row) => row.id" show-summary :summary-method="summarizeMainTable"
@@ -100,14 +101,14 @@
         <el-table-column label="褰曞叆浜�" prop="recorderName" width="120" show-overflow-tooltip />
         <el-table-column label="褰曞叆鏃ユ湡" prop="entryDate" width="100" show-overflow-tooltip />
         <el-table-column label="澶囨敞" prop="remarks" width="200" show-overflow-tooltip />
-        <el-table-column fixed="right" label="鎿嶄綔" width="180" align="center">
+        <el-table-column fixed="right" label="鎿嶄綔" width="220" align="center">
           <template #default="scope">
             <el-button link type="primary" @click="openForm('detail', scope.row)">璇︽儏
             </el-button>
             <el-button link type="primary" @click="openForm('edit', scope.row)"
               :disabled="scope.row.stockInStatus === '瀹屽叏鍏ュ簱'">缂栬緫
             </el-button>
-            <el-button link type="primary" @click="openFileDialog(scope.row)">闄勪欢</el-button>
+            <el-button link type="primary" @click="downloadOrder(scope.row.id)">涓嬭浇</el-button>
           </template>
         </el-table-column>
       </el-table>
@@ -411,6 +412,7 @@
   productList,
   getPurchaseById,
   getOptions,
+  getPrintData,
   getPurchaseTemplateList,
   delPurchaseTemplate,
 } from "@/api/procurementManagement/procurementLedger.js";
@@ -446,6 +448,7 @@
 import dayjs from "dayjs";
 import FileUpload from "@/components/AttachmentUpload/file/index.vue";
 import { tableAmountFormatter, formatDecimal, buildAmountSummaryFormat } from '@/utils/numberFormat';
+import { downloadPurchaseJpg, printPurchaseMulti } from "@/utils/documentPrint.js";
 
 const userStore = useUserStore();
 
@@ -1436,6 +1439,31 @@
     });
 };
 
+// 鎵归噺鎵撳嵃閲囪喘鍗� - 澶氶�夊悎骞堕瑙�
+const handlePrint = async () => {
+  if (selectedRows.value.length === 0) {
+    proxy.$modal.msgWarning("璇烽�夋嫨瑕佹墦鍗扮殑鏁版嵁");
+    return;
+  }
+  proxy.$modal.loading("姝e湪鍔犺浇鎵撳嵃鏁版嵁...");
+  try {
+    const orders = [];
+    let companyName = '';
+    for (const row of selectedRows.value) {
+      const res = await getPrintData(row.id);
+      const data = res.data || res;
+      companyName = data.companyName || companyName;
+      orders.push({ ledger: data.ledger, products: data.products });
+    }
+    printPurchaseMulti(companyName, orders);
+  } catch (e) {
+    console.error('鎵撳嵃澶辫触:', e);
+    proxy.$modal.msgError("鎵撳嵃澶辫触");
+  } finally {
+    proxy.$modal.closeLoading();
+  }
+};
+
 // 鑾峰彇褰撳墠鏃ユ湡骞舵牸寮忓寲涓� YYYY-MM-DD
 function getCurrentDate() {
   const today = new Date();
@@ -1589,6 +1617,28 @@
   fileListDialogVisible.value = true;
 };
 
+// 涓嬭浇閲囪喘鍗�
+const downloadOrder = async (id) => {
+  try {
+    const res = await getPrintData(id);
+    const data = res.data || res;
+    downloadPurchaseJpg(data.companyName, data.ledger, data.products, '閲囪喘鍗昣' + (data.ledger.purchaseContractNumber || id) + '.jpg');
+  } catch (e) {
+    console.error('涓嬭浇澶辫触:', e);
+  }
+};
+
+// 鎵撳嵃閲囪喘鍗�
+const printOrder = async (id) => {
+  try {
+    const res = await getPrintData(id);
+    const data = res.data || res;
+    printPurchase(data.companyName, data.ledger, data.products);
+  } catch (e) {
+    console.error('鎵撳嵃澶辫触:', e);
+  }
+};
+
 // 鍒犻櫎妯℃澘
 const handleDeleteTemplate = async item => {
   if (!item.id) {

--
Gitblit v1.9.3