From 3a7267cd8eebce7c75afb142f8632bfadd5e7a49 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期一, 20 四月 2026 11:33:20 +0800
Subject: [PATCH] Merge branch 'dev_河南_鹤壁天沐玻璃厂' of http://114.132.189.42:9002/r/product-inventory-management into dev_河南_鹤壁天沐玻璃厂

---
 src/views/salesManagement/salesLedger/components/processCardPrint.js |   44 ++++++++++++++++++++++++++++++++++++++++----
 src/views/salesManagement/salesLedger/index.vue                      |   11 +++++++++--
 2 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/components/processCardPrint.js b/src/views/salesManagement/salesLedger/components/processCardPrint.js
index d1c0472..aa50b34 100644
--- a/src/views/salesManagement/salesLedger/components/processCardPrint.js
+++ b/src/views/salesManagement/salesLedger/components/processCardPrint.js
@@ -1,3 +1,5 @@
+import QRCode from "qrcode";
+
 const PRINT_TITLE = "鐢熶骇娴佺▼鍗�(鎴愬搧)";
 
 const formatDisplayDate = (value) => {
@@ -83,7 +85,7 @@
   return pages;
 };
 
-export const printFinishedProcessCard = (cardData) => {
+export const printFinishedProcessCard = async (cardData) => {
   const data = cardData ?? {};
   const routeNodes = Array.isArray(data.routeNodes) ? data.routeNodes : [];
   const items = Array.isArray(data.items) ? data.items : [];
@@ -95,6 +97,21 @@
   const pageSize = 10;
   const itemPages = splitItemsByPage(items, pageSize);
   const totalPages = itemPages.length;
+
+  const ledgerId =
+    data?.salesLedgerId ?? data?.ledgerId ?? data?.id ?? data?.salesLedgerID;
+  const salesContractNo = String(data?.salesContractNo ?? "").trim();
+  const qrPayload = JSON.stringify({
+    id: ledgerId ?? "",
+    salesContractNo,
+    type: "XS",
+  });
+  let qrDataUrl = "";
+  try {
+    qrDataUrl = await QRCode.toDataURL(qrPayload, { width: 180, margin: 2 });
+  } catch {
+    qrDataUrl = "";
+  }
 
   const printWindow = window.open("", "_blank", "width=1200,height=900");
   if (!printWindow) {
@@ -109,9 +126,19 @@
     <title>${PRINT_TITLE}</title>
     <style>
       body { margin: 0; padding: 0; font-family: "SimSun", serif; color: #222; }
-      .page { width: 198mm; margin: 0 auto; padding: 6mm 3mm 5mm; box-sizing: border-box; page-break-after: always; }
+      .page { position: relative; width: 198mm; margin: 0 auto; padding: 6mm 3mm 5mm; box-sizing: border-box; page-break-after: always; }
       .page:last-child { page-break-after: auto; }
-      .table-wrap { position: relative; }
+      .table-wrap { position: relative; margin-top: 22mm; }
+      .header { position: relative; padding-top: 0; }
+      .qr-block {
+        position: absolute;
+        right: 2mm;
+        top: -1mm;
+        width: 32mm;
+        text-align: center;
+        z-index: 3;
+      }
+      .qr-block img { width: 32mm; height: 32mm; display: block; margin: 0 auto; }
       .page-mark {
         position: absolute;
         left: 0;
@@ -162,7 +189,16 @@
         const startIndex = pageIndex * pageSize;
         return `
     <div class="page">
-      <div class="title">楣ゅ澶╂矏閽㈠寲鐜荤拑鍘�<br /><span class="sub-title">鐢熶骇娴佺▼鍗�(鎴愬搧)</span></div>
+      <div class="header">
+        ${
+          qrDataUrl
+            ? `<div class="qr-block">
+          <img src="${qrDataUrl}" alt="浜岀淮鐮�" />
+        </div>`
+            : ""
+        }
+        <div class="title">楣ゅ澶╂矏閽㈠寲鐜荤拑鍘�<br /><span class="sub-title">鐢熶骇娴佺▼鍗�(鎴愬搧)</span></div>
+      </div>
       <div class="table-wrap">
       <div class="page-mark">绗�${pageIndex + 1}椤碉紝鍏�${totalPages}椤�</div>
       <table>
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index a9aea49..1d54201 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -3780,6 +3780,13 @@
       } else {
         const res = await getProcessCard(selectedId);
         const processCardData = res?.data ?? {};
+        // 琛ラ綈浜岀淮鐮佹墍闇�鐨勫彴璐︽爣璇嗭紙鍚庣鏁版嵁鏈夋椂涓嶅甫 id锛�
+        if (processCardData && typeof processCardData === "object") {
+          processCardData.salesLedgerId = processCardData.salesLedgerId ?? selectedId;
+          processCardData.salesContractNo =
+            (processCardData.salesContractNo ?? "").trim() ||
+            String(selectedRow?.salesContractNo ?? "").trim();
+        }
         const routeNodes = processCardData?.routeNodes;
         const isProcessRouteEmpty =
           !Array.isArray(routeNodes) || routeNodes.length === 0;
@@ -3798,9 +3805,9 @@
           } catch {
             return;
           }
-          printFinishedProcessCard(processCardData);
+          await printFinishedProcessCard(processCardData);
         } else {
-          printFinishedProcessCard(processCardData);
+          await printFinishedProcessCard(processCardData);
         }
       }
     } catch (error) {

--
Gitblit v1.9.3