yyb
18 小时以前 471f93fc7a570525c83497719793fe820afb2cff
src/views/salesManagement/salesLedger/components/salesDeliveryPrint.js
@@ -51,6 +51,8 @@
  "productInfoList",
];
const SPECIFICATION_FIELD_KEYS = ["specificationModel", "specification", "model", "spec"];
const normalizeNameList = (value) => {
  if (Array.isArray(value)) {
    return value
@@ -93,6 +95,19 @@
  return itemNames[0] || fallbackNames[index] || fallbackNames[0] || "";
};
const resolveSpecificationModel = (...sources) => {
  for (const source of sources) {
    if (!source || typeof source !== "object") continue;
    for (const key of SPECIFICATION_FIELD_KEYS) {
      const value = source?.[key];
      if (value !== undefined && value !== null && String(value).trim()) {
        return String(value).trim();
      }
    }
  }
  return "";
};
const splitItemsByPage = (items, pageSize) => {
  const list = Array.isArray(items) ? items : [];
  if (list.length === 0) return [[]];
@@ -126,6 +141,7 @@
          ...item,
          // 优先使用明细自身产品名,兼容“名称数组/分隔字符串”的接口格式
          productDescription: resolveProductName(item, groupNames, index),
          specificationModel: resolveSpecificationModel(item, group, data),
          salesContractNo: group?.salesContractNo || item?.salesContractNo || "",
          widthHeight: item?.widthHeight || "",
        }));
@@ -133,6 +149,7 @@
    : (Array.isArray(data.items) ? data.items : []).map((item, index) => ({
        ...item,
        productDescription: resolveProductName(item, dataLevelNames, index),
        specificationModel: resolveSpecificationModel(item, data, selectedRow),
        widthHeight: item?.widthHeight || "",
      }));
@@ -154,10 +171,15 @@
  const list = Array.isArray(items) ? items : [];
  const map = new Map();
  list.forEach((item) => {
    const key = `${item?.productDescription || ""}__${getOrderNo(data, row, item)}`;
    const key = `${item?.productDescription || ""}__${item?.specificationModel || ""}__${getOrderNo(
      data,
      row,
      item
    )}`;
    if (!map.has(key)) {
      map.set(key, {
        productName: item?.productDescription || "",
        specificationModel: item?.specificationModel || "",
        orderNo: getOrderNo(data, row, item),
        items: [],
      });
@@ -202,13 +224,17 @@
      : selectedRow?.id !== undefined && selectedRow?.id !== null && selectedRow?.id !== ""
        ? [selectedRow.id]
        : [];
  const shipmentRef = String(
    data.shipmentNo || data.deliveryNo || data.externalOrderNo || selectedRow?.expressNumber || ""
  ).trim();
  const qrLedgerId =
    selectedRow?.id !== undefined && selectedRow?.id !== null && selectedRow?.id !== ""
      ? selectedRow.id
      : ids.length
        ? ids[0]
        : "";
  const qrSalesContractNo = String(data?.salesContractNo || selectedRow?.salesContractNo || "").trim();
  const qrPayload = JSON.stringify({
    type: "FH",
    shipmentNo: shipmentRef,
    ledgerIds: ids,
    id: qrLedgerId,
    salesContractNo: qrSalesContractNo,
    type: "XS",
  });
  let qrDataUrl = "";
  try {
@@ -339,7 +365,7 @@
                  serial += group.items.length;
                  return `
          <tr class="group-title">
            <td colspan="5" class="left">产品名称: ${escapeHtml(group.productName)}</td>
            <td colspan="5" class="left">产品名称: ${escapeHtml(group.productName)}${group.specificationModel ? ` 规格型号: ${escapeHtml(group.specificationModel)}` : ""}</td>
            <td colspan="2" class="left">订单编号: ${escapeHtml(group.orderNo)}</td>
          </tr>
          ${rows}