From cd1f2d9605c2e208bb7e70f5d3bc83b45a9ec8a6 Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期四, 18 六月 2026 15:16:53 +0800
Subject: [PATCH] feat: 产品规格带出产品大类

---
 src/views/salesManagement/salesLedger/components/salesLabelPrint.js |  111 +++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 79 insertions(+), 32 deletions(-)

diff --git a/src/views/salesManagement/salesLedger/components/salesLabelPrint.js b/src/views/salesManagement/salesLedger/components/salesLabelPrint.js
index 333c298..e2578dd 100644
--- a/src/views/salesManagement/salesLedger/components/salesLabelPrint.js
+++ b/src/views/salesManagement/salesLedger/components/salesLabelPrint.js
@@ -18,15 +18,60 @@
   return pages;
 };
 
-const renderLabelCard = (item) => `
-  <div class="label-card">
-    <div class="line customer">${escapeHtml(item?.customerName)}</div>
-    <div class="line order">${escapeHtml(item?.salesContractNo)}</div>
-    <div class="line product">${escapeHtml(item?.productName)}</div>
-    <div class="line spec">${escapeHtml(item?.specification)}</div>
-    <div class="line address">${escapeHtml(item?.floorCode)}</div>
-  </div>
-`;
+const buildMainSpec = (item) => {
+  const value =
+    item?.specificationModel ??
+    item?.productSpecModel ??
+    item?.productName ??
+    "";
+  return String(value ?? "").trim();
+};
+
+const buildDetailSpec = (item) => {
+  const value =
+    item?.specification ??
+    item?.spec ??
+    item?.sizeSpec ??
+    item?.productSpec ??
+    "";
+  return String(value ?? "").trim();
+};
+
+// 鏍规嵁鏂囨湰闀垮害鍔ㄦ�佽绠楀瓧浣撳ぇ灏�
+const getFontSize = (text, baseSize, maxWidthChars) => {
+  const len = String(text ?? "").length;
+  if (len <= maxWidthChars) return baseSize;
+  // 瓒呴暱鏂囨湰鎸夋瘮渚嬬缉灏�
+  const scale = maxWidthChars / len;
+  const minSize = baseSize * 0.7; // 鏈�灏忎笉浣庝簬鍩虹澶у皬鐨�70%
+  const calculatedSize = baseSize * scale;
+  return Math.max(calculatedSize, minSize);
+};
+
+const renderLabelCard = (item) => {
+  const customer = escapeHtml(item?.customerName);
+  const order = escapeHtml(item?.salesContractNo);
+  const model = escapeHtml(buildMainSpec(item));
+  const spec = escapeHtml(buildDetailSpec(item));
+  const address = escapeHtml(item?.floorCode);
+
+  // 鍔ㄦ�佽绠楀瓧浣撳ぇ灏忥紙鍩轰簬50mm瀹藉害锛岀害20-25涓瓧绗︿负姝e父鏄剧ず鑼冨洿锛�
+  const customerSize = getFontSize(customer, 4.2, 18);
+  const orderSize = getFontSize(order, 4.6, 16);
+  const modelSize = getFontSize(model, 4.0, 22);
+  const specSize = getFontSize(spec, 3.8, 28);
+  const addressSize = getFontSize(address, 3.5, 24);
+
+  return `
+    <div class="label-card">
+      <div class="line customer" style="font-size: ${customerSize}mm;">${customer}</div>
+      <div class="line order" style="font-size: ${orderSize}mm;">${order}</div>
+      <div class="line model" style="font-size: ${modelSize}mm;">${model}</div>
+      <div class="line spec" style="font-size: ${specSize}mm;">${spec}</div>
+      <div class="line address" style="font-size: ${addressSize}mm;">${address}</div>
+    </div>
+  `;
+};
 
 export const printSalesLabel = (rawList = []) => {
   const list = Array.isArray(rawList) ? rawList : [];
@@ -34,7 +79,7 @@
     throw new Error("鏍囩鏁版嵁涓虹┖锛屾棤娉曟墦鍗�");
   }
 
-  const pageSize = 18; // 3 鍒� * 6 琛岋紙50x40mm锛�
+  const pageSize = 6; // 2 鍒� * 3 琛岋紙50x40mm锛�
   const pages = splitByPage(list, pageSize);
 
   const printWindow = window.open("", "_blank", "width=1200,height=900");
@@ -56,10 +101,10 @@
         color: #222;
       }
       .page {
-        width: 210mm;
-        min-height: 297mm;
+        width: 104mm;
+        min-height: 124mm;
         margin: 0 auto;
-        padding: 8mm 7mm;
+        padding: 1mm;
         box-sizing: border-box;
         page-break-after: always;
       }
@@ -68,55 +113,57 @@
       }
       .grid {
         display: grid;
-        grid-template-columns: repeat(3, 50mm);
+        grid-template-columns: repeat(2, 50mm);
         grid-auto-rows: 40mm;
-        gap: 2mm;
+        gap: 1mm;
         justify-content: start;
       }
       .label-card {
-        border: 1px solid #ddd;
-        border-radius: 3mm;
-        padding: 1.8mm 2.2mm;
+        border: 0;
+        border-radius: 0;
+        padding: 2.2mm 2.5mm;
         width: 50mm;
         height: 40mm;
         box-sizing: border-box;
-        display: grid;
-        grid-template-rows: auto auto auto auto 1fr;
-        row-gap: 0.9mm;
+        display: flex;
+        flex-direction: column;
+        justify-content: flex-start;
+        overflow: hidden;
       }
       .line {
         font-weight: 700;
-        line-height: 1.15;
+        line-height: 1.2;
         word-break: break-all;
         margin: 0;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: clip;
       }
       .customer {
-        font-size: 4.0mm;
+        /* 鍩虹 4.2mm锛屽姩鎬佽皟鏁� */
       }
       .order {
-        font-size: 5.0mm;
-        letter-spacing: 0;
+        /* 鍩虹 4.6mm锛屽姩鎬佽皟鏁� */
       }
-      .product {
-        font-size: 4.5mm;
+      .model {
+        /* 鍩虹 4.0mm锛屽姩鎬佽皟鏁� */
       }
       .spec {
-        font-size: 5.0mm;
-        letter-spacing: 0;
+        /* 鍩虹 3.8mm锛屽姩鎬佽皟鏁� */
       }
       .address {
-        font-size: 3.8mm;
+        /* 鍩虹 3.5mm锛屽姩鎬佽皟鏁� */
       }
       @media print {
         @page {
-          size: A4 portrait;
+          size: 104mm 124mm;
           margin: 0;
         }
         .page {
           width: 100%;
           min-height: 0;
           margin: 0;
-          padding: 8mm 7mm;
+          padding: 1mm;
         }
       }
     </style>

--
Gitblit v1.9.3