const PRINT_TITLE = "生产流程卡(成品)"; const formatDisplayDate = (value) => { if (!value) return ""; const date = new Date(value); if (Number.isNaN(date.getTime())) return String(value); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); return `${year}/${month}/${day}`; }; const getCurrentDate = () => { const date = new Date(); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); const day = String(date.getDate()).padStart(2, "0"); return `${year}/${month}/${day}`; }; const escapeHtml = (value) => String(value ?? "") .replaceAll("&", "&") .replaceAll("<", "<") .replaceAll(">", ">") .replaceAll('"', """) .replaceAll("'", "'"); const renderRouteHeader = (routeNodes) => { const columns = (Array.isArray(routeNodes) ? routeNodes : []) .sort((a, b) => (a?.dragSort ?? 0) - (b?.dragSort ?? 0)) .map((node) => `${escapeHtml(node?.processRouteItemName)}`) .join(""); return columns || '工序'; }; const renderRouteRow = (routeNodes) => { const columns = (Array.isArray(routeNodes) ? routeNodes : []) .sort((a, b) => (a?.dragSort ?? 0) - (b?.dragSort ?? 0)) .map(() => '次品') .join(""); return columns || '次品'; }; const renderRouteEmptyCells = (routeNodes) => { const columns = (Array.isArray(routeNodes) ? routeNodes : []) .sort((a, b) => (a?.dragSort ?? 0) - (b?.dragSort ?? 0)) .map(() => '') .join(""); return columns || ''; }; const renderItems = (items, startIndex, routeNodes, totalCols) => { const list = Array.isArray(items) ? items : []; if (list.length === 0) { return `暂无明细`; } const routeEmptyCells = renderRouteEmptyCells(routeNodes); return list .map( (item, index) => ` ${startIndex + index + 1} ${escapeHtml(item?.floorCode)} ${escapeHtml(item?.width)} * ${escapeHtml(item?.height)} ${escapeHtml(item?.quantity)} ${escapeHtml(item?.area)} ${escapeHtml(item?.processRequirement)} ${routeEmptyCells} ` ) .join(""); }; const splitItemsByPage = (items, pageSize) => { const list = Array.isArray(items) ? items : []; if (list.length === 0) return [[]]; const pages = []; for (let i = 0; i < list.length; i += pageSize) { pages.push(list.slice(i, i + pageSize)); } return pages; }; export const printFinishedProcessCard = (cardData) => { const data = cardData ?? {}; const routeNodes = Array.isArray(data.routeNodes) ? data.routeNodes : []; const items = Array.isArray(data.items) ? data.items : []; const firstItem = items[0] ?? {}; const productName = firstItem.productDescription || ""; const totalCols = 6 + Math.max(routeNodes.length, 1); const signLabelCols = 2; const signBlankCols = Math.max(totalCols - 5 - signLabelCols, 1); const pageSize = 10; const itemPages = splitItemsByPage(items, pageSize); const totalPages = itemPages.length; const printWindow = window.open("", "_blank", "width=1200,height=900"); if (!printWindow) { throw new Error("浏览器拦截了弹窗,请允许弹窗后重试"); } const html = ` ${PRINT_TITLE} ${itemPages .map((pageItems, pageIndex) => { const isLastPage = pageIndex === totalPages - 1; const startIndex = pageIndex * pageSize; return `
鹤壁天沐钢化玻璃厂
生产流程卡(成品)
第${pageIndex + 1}页,共${totalPages}页
${renderRouteHeader(routeNodes)} ${renderRouteRow(routeNodes)} ${renderItems(pageItems, startIndex, routeNodes, totalCols)} ${ isLastPage ? `` : `` }
订单编号:${escapeHtml(data.salesContractNo)} 交货日期:${escapeHtml(formatDisplayDate(data.deliveryDate))}
客户名称:${escapeHtml(data.customerName)} 工艺流程:${escapeHtml(data.processPathDisplay)}
订序 楼层编号 宽(弧长)*高 数量 面积 明细加工要求
产品名称:${escapeHtml(productName)}
合计: ${escapeHtml(data.totalQuantity)} ${escapeHtml(data.totalArea)} 完工签名
订单 加工 要求
${escapeHtml(data.orderProcessRequirement)} 质检签名
接收签名
生产日期
下页续...
${ isLastPage ? `` : "" }
`; }) .join("")} `; printWindow.document.write(html); printWindow.document.close(); printWindow.onload = () => { setTimeout(() => { printWindow.focus(); printWindow.print(); printWindow.close(); }, 300); }; };