From 21ac0f3d564d27585515300ac1abc189dc997f7d Mon Sep 17 00:00:00 2001
From: yyb <995253665@qq.com>
Date: 星期二, 21 四月 2026 09:43:27 +0800
Subject: [PATCH] 更新销售发货单打印功能,添加二维码生成和产品名称优先级逻辑
---
src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js | 55 +++++++++++++++++++++++++++++++++++++++++++++++++------
src/views/salesManagement/salesLedger/index.vue | 2 +-
2 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js b/src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js
index e23fd53..d0f6868 100644
--- a/src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js
+++ b/src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js
@@ -1,3 +1,5 @@
+import QRCode from "qrcode";
+
const PRINT_TITLE = "閿�鍞彂璐у崟";
const escapeHtml = (value) =>
@@ -46,7 +48,9 @@
const items = groups.flatMap((group) =>
(Array.isArray(group?.items) ? group.items : []).map((item) => ({
...item,
- productDescription: group?.productName || item?.productDescription || "",
+ // 浼樺厛浣跨敤鏄庣粏鑷韩浜у搧鍚嶏紝閬垮厤鍒嗙粍鍚嶇О瑕嗙洊瀵艰嚧鈥滀竴涓骇鍝佸悕鎸傚绉嶆槑缁嗏��
+ productDescription:
+ item?.productDescription || item?.productName || group?.productName || "",
salesContractNo: group?.salesContractNo || item?.salesContractNo || "",
widthHeight: item?.widthHeight || "",
}))
@@ -105,12 +109,33 @@
})
.join("");
-export const printSalesDeliveryNote = (rawData, selectedRow = {}) => {
+export const printSalesDeliveryNote = async (rawData, selectedRow = {}, ledgerIds = null) => {
const data = normalizeInvoiceData(rawData, selectedRow);
const allItems = Array.isArray(data.items) ? data.items : [];
const pageSize = 18;
const itemPages = splitItemsByPage(allItems, pageSize);
const totalPages = itemPages.length;
+
+ const ids =
+ Array.isArray(ledgerIds) && ledgerIds.length > 0
+ ? ledgerIds
+ : selectedRow?.id !== undefined && selectedRow?.id !== null && selectedRow?.id !== ""
+ ? [selectedRow.id]
+ : [];
+ const shipmentRef = String(
+ data.shipmentNo || data.deliveryNo || data.externalOrderNo || selectedRow?.expressNumber || ""
+ ).trim();
+ const qrPayload = JSON.stringify({
+ type: "FH",
+ shipmentNo: shipmentRef,
+ ledgerIds: ids,
+ });
+ let qrDataUrl = "";
+ try {
+ qrDataUrl = await QRCode.toDataURL(qrPayload, { width: 160, margin: 1 });
+ } catch {
+ qrDataUrl = "";
+ }
const printWindow = window.open("", "_blank", "width=1200,height=900");
if (!printWindow) {
@@ -146,17 +171,32 @@
font-size: 12px;
margin-right: 8mm;
margin-bottom: 1px;
+ position: relative;
+ top: 6mm;
}
.head-mid {
display: grid;
grid-template-columns: 1fr auto 1fr;
align-items: center;
- margin-bottom: 2px;
+ margin-top: 6mm;
+ margin-bottom: 0;
+ position: relative;
}
.head-mid-left { font-size: 13px; text-align: left; }
- .head-mid-title { font-size: 20px; font-weight: 700; text-align: center; }
+ .head-mid-title-wrap { grid-column: 2; }
+ .head-mid-title { font-size: 20px; font-weight: 700; text-align: center; line-height: 1; }
+ .head-qr {
+ width: 18mm;
+ height: 18mm;
+ object-fit: contain;
+ display: block;
+ position: absolute;
+ left: calc(50% + 30mm);
+ top: calc(50% - 4mm);
+ transform: translateY(-50%);
+ }
.head-mid-right { font-size: 13px; text-align: right; padding-right: 8mm; }
- table { width: 100%; border-collapse: collapse; table-layout: fixed; border: 1px solid #222; }
+ table { width: 100%; margin-top: 3mm; border-collapse: collapse; table-layout: fixed; border: 1px solid #222; }
td, th { border: 1px solid #222; padding: 2px 4px; font-size: 13px; text-align: center; vertical-align: middle; }
.left { text-align: left; }
.group-title td { font-weight: 700; }
@@ -185,7 +225,10 @@
</div>
<div class="head-mid">
<div class="head-mid-left">瀵规柟鍗曞彿: ${escapeHtml(data.deliveryNo || data.shippingNo || selectedRow.expressNumber || "")}</div>
- <div class="head-mid-title">閿�鍞彂璐у崟</div>
+ <div class="head-mid-title-wrap">
+ <div class="head-mid-title">閿�鍞彂璐у崟</div>
+ </div>
+ ${qrDataUrl ? `<img class="head-qr" src="${qrDataUrl}" alt="浜岀淮鐮�" />` : ""}
<div class="head-mid-right">鍙戣揣鍗曞彿: ${escapeHtml(data.shipmentNo || data.deliveryNo || "")}</div>
</div>
<table>
diff --git a/src/views/salesManagement/salesLedger/index.vue b/src/views/salesManagement/salesLedger/index.vue
index 0de79fd..5ceb912 100644
--- a/src/views/salesManagement/salesLedger/index.vue
+++ b/src/views/salesManagement/salesLedger/index.vue
@@ -3751,7 +3751,7 @@
try {
const res = await getSalesInvoices(selectedIds);
const salesInvoiceData = res?.data ?? {};
- printSalesDeliveryNote(salesInvoiceData, selectedRow);
+ await printSalesDeliveryNote(salesInvoiceData, selectedRow, selectedIds);
} catch (error) {
console.error("鎵撳嵃閿�鍞彂璐у崟澶辫触:", error);
proxy.$modal.msgError("鎵撳嵃澶辫触锛岃绋嶅悗閲嶈瘯");
--
Gitblit v1.9.3