yyb
10 小时以前 adc94470f15d0002257d2e04bb7b532c3ab0ac76
添加二维码生成功能至生产流程卡打印,优化打印样式
已修改2个文件
53 ■■■■■ 文件已修改
src/views/salesManagement/salesLedger/components/processCardPrint.js 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/index.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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="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>
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) {