yyb
昨天 375ff3d362716240137e83361a27a167be249f02
销售发货单打印逻辑
已修改2个文件
100 ■■■■■ 文件已修改
src/views/salesManagement/salesLedger/components/processCardPrint.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/components/processCardPrint.js
@@ -207,6 +207,7 @@
        return `
    <div class="page">
      <div class="header">
        <div class="title">鹤壁天沐钢化玻璃厂<br /><span class="sub-title">生产流程卡(成品)</span></div>
        ${
          qrDataUrl
            ? `<div class="qr-block">
@@ -214,7 +215,6 @@
        </div>`
            : ""
        }
        <div class="title">鹤壁天沐钢化玻璃厂<br /><span class="sub-title">生产流程卡(成品)</span></div>
      </div>
      <div class="table-wrap">
      <div class="page-mark">第${pageIndex + 1}页,共${totalPages}页</div>
src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js
@@ -30,6 +30,69 @@
const getOrderNo = (data, row, item) =>
  item?.salesContractNo || item?.orderNo || data?.salesContractNo || row?.salesContractNo || "";
const PRODUCT_NAME_FIELD_KEYS = [
  "productDescription",
  "productName",
  "name",
  "title",
  "goodsName",
  "materialName",
  "glassName",
];
const PRODUCT_NAME_LIST_FIELD_KEYS = [
  "productDescriptionList",
  "productNameList",
  "productDescriptions",
  "productNames",
  "nameList",
  "goodsNameList",
  "detailProductNames",
  "productInfoList",
];
const normalizeNameList = (value) => {
  if (Array.isArray(value)) {
    return value
      .flatMap((item) => normalizeNameList(item))
      .map((item) => String(item).trim())
      .filter(Boolean);
  }
  if (value && typeof value === "object") {
    const objectListNames = PRODUCT_NAME_LIST_FIELD_KEYS.flatMap((key) => normalizeNameList(value?.[key]));
    if (objectListNames.length) return objectListNames;
    return PRODUCT_NAME_FIELD_KEYS.flatMap((key) => normalizeNameList(value?.[key]));
  }
  if (typeof value === "string") {
    const text = value.trim();
    if (!text) return [];
    const parts = text
      .split(/[,\n,、;;]/)
      .map((item) => item.trim())
      .filter(Boolean);
    return parts.length > 1 ? parts : [text];
  }
  if (value === null || value === undefined) return [];
  const text = String(value).trim();
  return text ? [text] : [];
};
const extractNameListByKeys = (source, keys) => {
  if (!source || typeof source !== "object") return [];
  return keys.flatMap((key) => normalizeNameList(source?.[key]));
};
const resolveProductName = (item, fallbackNames, index) => {
  const itemNames = [
    ...extractNameListByKeys(item, PRODUCT_NAME_LIST_FIELD_KEYS),
    ...extractNameListByKeys(item, PRODUCT_NAME_FIELD_KEYS),
  ];
  if (itemNames.length > 1) {
    return itemNames[index] || itemNames[0] || "";
  }
  return itemNames[0] || fallbackNames[index] || fallbackNames[0] || "";
};
const splitItemsByPage = (items, pageSize) => {
  const list = Array.isArray(items) ? items : [];
  if (list.length === 0) return [[]];
@@ -42,19 +105,36 @@
const normalizeInvoiceData = (raw, selectedRow) => {
  const data = raw ?? {};
  const groups = Array.isArray(data.groups) ? data.groups : [];
  if (!groups.length) return data;
  const groups = Array.isArray(data.groups)
    ? data.groups
    : Array.isArray(data.groupList)
      ? data.groupList
      : [];
  const dataLevelNames = [
    ...extractNameListByKeys(data, PRODUCT_NAME_LIST_FIELD_KEYS),
    ...extractNameListByKeys(data, PRODUCT_NAME_FIELD_KEYS),
  ];
  const items = groups.flatMap((group) =>
    (Array.isArray(group?.items) ? group.items : []).map((item) => ({
  const items = groups.length
    ? groups.flatMap((group) => {
        const groupItems = Array.isArray(group?.items) ? group.items : [];
        const groupNames = [
          ...extractNameListByKeys(group, PRODUCT_NAME_LIST_FIELD_KEYS),
          ...extractNameListByKeys(group, PRODUCT_NAME_FIELD_KEYS),
        ];
        return groupItems.map((item, index) => ({
      ...item,
      // 优先使用明细自身产品名,避免分组名称覆盖导致“一个产品名挂多种明细”
      productDescription:
        item?.productDescription || item?.productName || group?.productName || "",
          // 优先使用明细自身产品名,兼容“名称数组/分隔字符串”的接口格式
          productDescription: resolveProductName(item, groupNames, index),
      salesContractNo: group?.salesContractNo || item?.salesContractNo || "",
      widthHeight: item?.widthHeight || "",
    }))
  );
        }));
      })
    : (Array.isArray(data.items) ? data.items : []).map((item, index) => ({
        ...item,
        productDescription: resolveProductName(item, dataLevelNames, index),
        widthHeight: item?.widthHeight || "",
      }));
  return {
    ...data,