您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
美尔斯通报表上传打印
// ==UserScript== // @name MEST Custon Report // @namespace joyings.com.cn // @version 2.5.5 // @description 美尔斯通报表上传打印 // @author zmz125000 // @match http://*/mest/* // @icon http://www.google.com/s2/favicons?domain=openwrt.org // @grant none // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.1/jquery.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.js // @license MIT // ==/UserScript== (function () { 'use strict'; // Your code here... addPrintButtons(); window.fastPrint = false; function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } function unsecuredCopyToClipboard(text) { const textArea = document.createElement("textarea"); textArea.value = text; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { document.execCommand('copy'); } catch (err) { console.error('Unable to copy to clipboard', err); } document.body.removeChild(textArea); } // 添加按钮、快速复制文本 async function addPrintButtons() { if (!$('div[class="el-tabs__item is-top is-active is-closable"]:contains("自定义报表")')[0] || !$('input[placeholder="输入关键字进行过滤"]')[0]) { await sleep(500); addPrintButtons(); return; } if ($('[role="group"]')[0]) { for (let elm of $('[class="custom-tree-node"]', $('[role="group"]')[0])) { if (!elm.hasAttribute('helper')) { elm.addEventListener('click', async function () { await sleep(100); // 设为100条 while (!$('[class="el-scrollbar__view el-select-dropdown__list"]')[0]) { await sleep(50); } $('li', $('[class="el-scrollbar__view el-select-dropdown__list"]')).last().click() await sleep(100); while ($('[class="el-loading-mask"]')[0] && $('[class="el-loading-mask"]')[0].getAttribute("style") == 'display: none;') { await sleep(100); } while (!$('tbody')[0]) { await sleep(100); } // 自动复制 if (!$('tbody')[0].hasAttribute('helper')) { $('tbody')[0].addEventListener('click', function (e) { const cell = e.target.closest('td'); if (cell) { let headerText = $('[class="has-gutter"]')[0].rows.item(0).cells.item(cell.cellIndex).firstChild.textContent; let sval = cell.childNodes[0].innerText; unsecuredCopyToClipboard(sval); setInput(headerText, sval); } }); $('tbody')[0].setAttribute('helper', true); } elm.setAttribute('helper', true); }) } } } if (!$('button:contains("打印")')[0]) { let btnRow = $('button:contains("导出")')[0].parentElement; var btn = document.createElement('button'); btn.setAttribute('id', 'printMaterialBtn'); btn.setAttribute('type', 'button'); btn.onclick = generateMaterial; btn.appendChild(document.createTextNode('打印排料单')); var btn2 = document.createElement('button'); btn2.setAttribute('id', 'printTableBtn'); btn2.setAttribute('title', '同种物料合并计数'); btn2.setAttribute('type', 'button'); btn2.onclick = generateSumTable; btn2.appendChild(document.createTextNode('打印备料单')); var btn3 = document.createElement('button'); btn3.setAttribute('type', 'button'); btn3.onclick = generateAndPrint; btn3.appendChild(document.createTextNode('打印生产单')); var btn4 = document.createElement('button'); btn4.setAttribute('type', 'button'); btn4.onclick = uploadProcessReport; btn4.appendChild(document.createTextNode('上传报工单')); var btn6 = document.createElement('button'); btn6.setAttribute('type', 'button'); btn6.onclick = uploadMaterialList; btn6.appendChild(document.createTextNode('上传出入库单')); var btn5 = document.createElement('button'); btn5.setAttribute('type', 'button'); btn5.onclick = generatePurchase; btn5.appendChild(document.createTextNode('打印采购单')); var btn8 = document.createElement('button'); btn8.setAttribute('title', '快速打印'); btn8.setAttribute('id', 'fastPrintBtn'); btn8.setAttribute('type', 'button'); btn8.onclick = toggleFastPrint; btn8.appendChild(document.createTextNode(window.fastPrint ? "✔" : "✘")); btnRow.appendChild(btn); btnRow.appendChild(btn3); btnRow.appendChild(btn5); btnRow.appendChild(btn2); btnRow.appendChild(btn4); btnRow.appendChild(btn6); btnRow.appendChild(btn8); } if ($('button:contains("重置")')[0] && !$('button:contains("重置")')[0].hasAttribute('helper')) { $('button:contains("重置")')[0].addEventListener('click', async function (e) { if ($('[class="el-tree-node is-expanded is-current is-focusable"]')[0]) { $('[class="el-tree-node is-expanded is-current is-focusable"]')[0].click(); } await sleep(100); while (!$('tbody')[0]) { await sleep(100); } // 自动复制 if (!$('tbody')[0].hasAttribute('helper')) { $('tbody')[0].addEventListener('click', function (e) { const cell = e.target.closest('td'); if (cell) { let headerText = $('[class="has-gutter"]')[0].rows.item(0).cells.item(cell.cellIndex).firstChild.textContent; let sval = cell.childNodes[0].innerText; unsecuredCopyToClipboard(sval); setInput(headerText, sval); } }); $('tbody')[0].setAttribute('helper', true); } }) $('button:contains("重置")')[0].setAttribute('helper', true); } await sleep(500); addPrintButtons(); } function setInput(label, value) { if ($('label:contains(' + label + ')')[0]) { $('input', $('label:contains(' + label + ')')[0].nextSibling)[0].value = value; $('input', $('label:contains(' + label + ')')[0].nextSibling)[0].dispatchEvent(new Event('input', { bubbles: true })); } } function toggleFastPrint() { if (window.fastPrint) { window.fastPrint = false; document.getElementById("fastPrintBtn").firstChild.nodeValue = "✘"; } else { window.fastPrint = true; document.getElementById("fastPrintBtn").firstChild.nodeValue = "✔"; } } async function getFullTable(index) { var tbody = document.createElement('table'); let nextBodyRows = $('tr', $('tbody')[0]); for (let tr of nextBodyRows) { tbody.appendChild(tr.cloneNode(true)); } // 主键所在列 let i = index; if (!index) { i = 2 } var oldValue = $('div', $('tbody')[0].rows.item(0).cells.item(i))[0].textContent; while (!$('[class="btn-next"]')[0].getAttribute("disabled")) { $('[class="btn-next"]')[0].click(); await sleep(100); while ($('div', $('tbody')[0].rows.item(0).cells.item(i))[0].textContent == oldValue) { await sleep(100); } let nextBodyRows = $('tr', $('tbody')[0]); for (let tr of nextBodyRows) { tbody.appendChild(tr.cloneNode(true)); } oldValue = $('div', $('tbody')[0].rows.item(0).cells.item(i))[0].textContent; } return tbody; } // 上传SCD数据 async function uploadProcessReport() { const customerIndex = $('th:contains("客户名")')[0].cellIndex; const orderNoIndex = $('th:contains("订单号")')[0].cellIndex; const aliasIndex = $('th:contains("别名")')[0].cellIndex; const productNameIndex = $('th:contains("产品名")')[0].cellIndex; const productCodeIndex = $('th:contains("编码")')[0].cellIndex; const SCDIndex = $('th:contains("生产单")')[0].cellIndex; const createDateIndex = $('th:contains("订单日期")')[0].cellIndex; var tbody = null; await getFullTable(SCDIndex).then(t => { tbody = t; }) var bodyRows = tbody.rows; var lastCustomer = bodyRows.item(0).cells.item(customerIndex).textContent; var lastOrder = bodyRows.item(0).cells.item(orderNoIndex).textContent; var object = { customers: [{ "name": lastCustomer, "orders": [{ "order": lastOrder, "SCDs": [] }] }] }; var objC = object.customers var customerArrayIndex = 0; var orderArrayIndex = 0; for (let row of bodyRows) { if (row.cells.item(customerIndex).textContent != lastCustomer) { customerArrayIndex = objC.push({ "name": row.cells.item(customerIndex).textContent, "orders": [] }) - 1; lastCustomer = row.cells.item(customerIndex).textContent; } if (row.cells.item(orderNoIndex).textContent != lastOrder) { orderArrayIndex = objC[customerArrayIndex]['orders'].push({ "order": row.cells.item(orderNoIndex).textContent, "SCDs": [] }) - 1; lastOrder = row.cells.item(orderNoIndex).textContent; } objC[customerArrayIndex]['orders'][orderArrayIndex]['SCDs'].push({ 'SCD': row.cells.item(SCDIndex).textContent, "productCode": row.cells.item(productCodeIndex).textContent, "productName": row.cells.item(productNameIndex).textContent, "productAlias": row.cells.item(aliasIndex).textContent }) } console.log(object); var myJSONString = JSON.stringify(object); var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n") .replace(/\\'/g, "\\'") .replace(/\\"/g, '\\"') .replace(/\\&/g, "\\&") .replace(/\\r/g, "\\r") .replace(/\\t/g, "\\t") .replace(/\\b/g, "\\b") .replace(/\\f/g, "\\f"); (async () => { const rawResponse = await fetch('https://api.jsonbin.io/v3/b/636b64a10e6a79321e444fe8', { method: 'PUT', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: myEscapedJSONString }); const content = await rawResponse.json(); alert(JSON.stringify(content)); })(); } // 上传物料数据 async function uploadMaterialList() { const orderNoIndex = $('th:contains("订单号")')[0].cellIndex; const customerIndex = $('th:contains("客户名")')[0].cellIndex; // 物料 const materialCodeIndex = $('th:contains("物料编码")')[0].cellIndex; const materialNameIndex = $('th:contains("物料名")')[0].cellIndex; const materialAliasIndex = $('th:contains("物料别名")')[0].cellIndex; const materialSpecsIndex = $('th:contains("物料规格")')[0].cellIndex; const processIndex = $('th:contains("用途")')[0].cellIndex; var tbody = null; await getFullTable(materialCodeIndex).then(t => { tbody = t; }) var bodyRows = tbody.rows; var lastOrder = bodyRows.item(0).cells.item(orderNoIndex).textContent; var lastCustomer = bodyRows.item(0).cells.item(customerIndex).textContent; var object = { "material": [], "orders": [{ "order": lastOrder, "customer": lastCustomer, "material": [] }] }; var objO = object.orders; var objM = object.material; var orderArrayIndex = 0; var matCodeArray = []; for (let row of bodyRows) { if (row.cells.item(orderNoIndex).textContent != lastOrder) { orderArrayIndex = objO.push({ "order": row.cells.item(orderNoIndex).textContent, "customer": row.cells.item(customerIndex).textContent, "material": [] }) - 1; lastOrder = row.cells.item(orderNoIndex).textContent; } let i = "material"; if (row.cells.item(processIndex).textContent == "包装") { i = "packaging"; } if (!matCodeArray.includes(row.cells.item(materialCodeIndex).textContent)) { matCodeArray.push(row.cells.item(materialCodeIndex).textContent); objM.push({ "type": i, "code": row.cells.item(materialCodeIndex).textContent, "name": row.cells.item(materialNameIndex).textContent, "alias": row.cells.item(materialAliasIndex).textContent, "specs": row.cells.item(materialSpecsIndex).textContent, }) } objO[orderArrayIndex]['material'].push({ "type": i, "code": row.cells.item(materialCodeIndex).textContent, "name": row.cells.item(materialNameIndex).textContent, "alias": row.cells.item(materialAliasIndex).textContent, "specs": row.cells.item(materialSpecsIndex).textContent, }) - 1; } console.log(object); var myJSONString = JSON.stringify(object); var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n") .replace(/\\'/g, "\\'") .replace(/\\"/g, '\\"') .replace(/\\&/g, "\\&") .replace(/\\r/g, "\\r") .replace(/\\t/g, "\\t") .replace(/\\b/g, "\\b") .replace(/\\f/g, "\\f"); (async () => { const rawResponse = await fetch('https://api.jsonbin.io/v3/b/637eceb165b57a31e6c15f19', { method: 'PUT', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: myEscapedJSONString }); const content = await rawResponse.json(); alert(JSON.stringify(content)); })(); } // 打印采购单 async function generatePurchase() { if (!$('input', $('label:contains("订单号")')[0].nextSibling)[0].value) { alert("未输入订单号/生产单号/产品编号/产品名,请先设置至少一项筛选条件"); return; } const orderNoIndex = $('th:contains("订单号")')[0].cellIndex; const customerIndex = $('th:contains("客户名")')[0].cellIndex; const billDateIndex = $('th:contains("单据日期")')[0].cellIndex; const billDeliveryIndex = $('th:contains("发货日期")')[0].cellIndex; // 物料 const materialCodeIndex = $('th:contains("物料编码")')[0].cellIndex; const materialNameIndex = $('th:contains("物料名")')[0].cellIndex; const materialAliasIndex = $('th:contains("物料别名")')[0].cellIndex; const materialSpecsIndex = $('th:contains("物料规格")')[0].cellIndex; const materialQIndex = $('th:contains("订单用量")')[0].cellIndex; const materialUnitIndex = $('th:contains("计量单位")')[0].cellIndex; const processIndex = $('th:contains("用途")')[0].cellIndex; const wareHouseIndex = $('th:contains("库存量")')[0].cellIndex; const usedIndex = $('th:contains("材料未出库")')[0].cellIndex; const onwayIndex = $('th:contains("采购未入库")')[0].cellIndex; var tbody = null; await getFullTable(materialCodeIndex).then(t => { tbody = t; }) var bodyRows = tbody.rows; let map = new Map(); let trCells = tbody.rows.item(0).cells; var today = new Date(); var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); // 原料采购单 let w = null; let iframe = null; if (window.fastPrint) { iframe = document.createElement('iframe'); document.body.appendChild(iframe); iframe.contentWindow.document.open(); iframe.contentWindow.document.write(purchaseTemplate); w = iframe.contentWindow; } else { w = window.open(); w.document.write(purchaseTemplate); w.document.getElementById("download").setAttribute('download', trCells.item(orderNoIndex).textContent + '-' + "原料采购计划" + '-' + date + ".html"); } map.set('orderNo', trCells.item(orderNoIndex)); map.set('orderDate', trCells.item(billDateIndex)); map.set('deliveryDate', trCells.item(billDeliveryIndex)); map.set('OCellA', trCells.item(orderNoIndex)); map.set('OCellB', trCells.item(orderNoIndex)); for (let item of map) { if ($('#' + item[0], w.document)[0]) { $('#' + item[0], w.document)[0].textContent = $('div', item[1])[0].textContent; } } // 填信息 $('#printTime', w.document)[0].textContent = date + ' ' + time; // 包装采购单 let w1 = null; let iframe1 = null; if (window.fastPrint) { iframe1 = document.createElement('iframe'); document.body.appendChild(iframe1); iframe1.contentWindow.document.open(); iframe1.contentWindow.document.write(w.document.documentElement.innerHTML); w1 = iframe1.contentWindow; } else { w1 = window.open(); w1.document.write(w.document.documentElement.innerHTML); w1.document.getElementById("download").setAttribute('download', trCells.item(orderNoIndex).textContent + '-' + "包装采购计划" + '-' + date + ".html"); } new QRCode($('#SCDQR', w.document)[0], { text: trCells.item(orderNoIndex).textContent, width: 144, height: 144 }); new QRCode($('#SCDQR', w1.document)[0], { text: trCells.item(orderNoIndex).textContent, width: 144, height: 144 }); w1.document.getElementById('title').textContent = "包装采购计划"; // 原料表 var materialTable = $('#materialTable', w.document)[0]; // 工艺表指针 var wIndex = 1; // 物料表指针 var mIndex = 1; // 表体序号 var tIndex = 1; let name = ''; let lastName = ''; let cell0 = null; // 物料表 var materialTable1 = $('#materialTable', w1.document)[0]; // 工艺表指针 var wIndex1 = 1; // 物料表指针 var mIndex1 = 1; // 表体序号 var tIndex1 = 1; let name1 = ''; let lastName1 = ''; let cell01 = null; for (let row of bodyRows) { let materialCode = $('div', row.cells.item(materialCodeIndex))[0].textContent; let process = $('div', row.cells.item(processIndex))[0].textContent; if (process != '包装' && !materialCode.startsWith('00-')) { name = $('div', row.cells.item(materialNameIndex))[0].textContent; const cells = row.cells; let tr = materialTable.insertRow(wIndex++); let i = 0; tr.insertCell(i++).innerHTML = tIndex++; if (tr.rowIndex == 1) { cell0 = tr.insertCell(i++); cell0.innerHTML = name; } else if (name == lastName) { cell0.setAttribute('rowspan', ++mIndex); } else { mIndex = 1; cell0 = tr.insertCell(i++); cell0.innerHTML = name; } tr.insertCell(i++).innerHTML = cells.item(materialSpecsIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(wareHouseIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(usedIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(onwayIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialQIndex).textContent; let remaining = parseFloat(cells.item(wareHouseIndex).textContent) - parseFloat(cells.item(materialQIndex).textContent) - parseFloat(cells.item(usedIndex).textContent) + parseFloat(cells.item(onwayIndex).textContent); if (remaining >= 0) { tr.insertCell(i++).innerHTML = '0'; } else { let x = Math.abs(remaining) > parseFloat(cells.item(materialQIndex).textContent) ? cells.item(materialQIndex).textContent : Math.abs(remaining); tr.insertCell(i++).innerHTML = Math.ceil(x); } tr.insertCell(i++).innerHTML = cells.item(materialUnitIndex).textContent lastName = name; } if (process == '包装' || materialCode.startsWith('01-012')) { name1 = $('div', row.cells.item(materialNameIndex))[0].textContent; const cells = row.cells; let tr = materialTable1.insertRow(wIndex1++); let i = 0; tr.insertCell(i++).innerHTML = tIndex1++; if (tr.rowIndex == 1) { cell0 = tr.insertCell(i++); cell0.innerHTML = name1; } else if (name1 == lastName1) { cell01.setAttribute('rowspan', ++mIndex1); } else { mIndex1 = 1; cell01 = tr.insertCell(i++); cell01.innerHTML = name1; } tr.insertCell(i++).innerHTML = cells.item(materialSpecsIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(wareHouseIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(usedIndex).textContent; // tr.insertCell(i++).innerHTML = available % 1 == 0 ? available : Number(available).toFixed(2); tr.insertCell(i++).innerHTML = cells.item(onwayIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialQIndex).textContent; let remaining = parseFloat(cells.item(wareHouseIndex).textContent) - parseFloat(cells.item(materialQIndex).textContent) - parseFloat(cells.item(usedIndex).textContent) + parseFloat(cells.item(onwayIndex).textContent); if (remaining >= 0) { tr.insertCell(i++).innerHTML = '0'; } else { let x = Math.abs(remaining) > parseFloat(cells.item(materialQIndex).textContent) ? cells.item(materialQIndex).textContent : Math.abs(remaining); tr.insertCell(i++).innerHTML = Math.ceil(x); } tr.insertCell(i++).innerHTML = cells.item(materialUnitIndex).textContent lastName1 = name1; } } await sleep(100); if (w.document.getElementById("download").hasAttribute('download')) { w.document.getElementById("download").click(); } if (w1.document.getElementById("download").hasAttribute('download')) { w1.document.getElementById("download").click(); } if (window.fastPrint) { w.print(); w1.print(); w.close(); w1.close(); document.body.removeChild(iframe); document.body.removeChild(iframe1); } } // 打印备料单 async function generateSumTable() { if (!$('input', $('label:contains("订单号")')[0].nextSibling)[0].value) { alert("未输入订单号/生产单号/产品编号/产品名,请先设置至少一项筛选条件"); return; } const orderNoIndex = $('th:contains("订单号")')[0].cellIndex; const customerIndex = $('th:contains("客户名")')[0].cellIndex; const billDateIndex = $('th:contains("单据日期")')[0].cellIndex; const billDeliveryIndex = $('th:contains("发货日期")')[0].cellIndex; // 物料 const materialCodeIndex = $('th:contains("物料编码")')[0].cellIndex; const materialNameIndex = $('th:contains("物料名")')[0].cellIndex; const materialAliasIndex = $('th:contains("物料别名")')[0].cellIndex; const materialSpecsIndex = $('th:contains("物料规格")')[0].cellIndex; const materialQIndex = $('th:contains("订单用量")')[0].cellIndex; const materialUnitIndex = $('th:contains("计量单位")')[0].cellIndex; const processIndex = $('th:contains("用途")')[0].cellIndex; const wareHouseIndex = $('th:contains("库存量")')[0].cellIndex; const usedIndex = $('th:contains("材料未出库")')[0].cellIndex; const onwayIndex = $('th:contains("采购未入库")')[0].cellIndex; var tbody = null; await getFullTable(materialCodeIndex).then(t => { tbody = t; }) var bodyRows = tbody.rows; let map = new Map(); let trCells = tbody.rows.item(0).cells; var today = new Date(); var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); // 生产备料单 let w = null; let iframe = null; if (window.fastPrint) { iframe = document.createElement('iframe'); document.body.appendChild(iframe); iframe.contentWindow.document.open(); iframe.contentWindow.document.write(sumMaterialTemplate); w = iframe.contentWindow; } else { w = window.open(); w.document.write(sumMaterialTemplate); w.document.getElementById("download").setAttribute('download', trCells.item(orderNoIndex).textContent + '-' + "生产备料单" + '-' + date + ".html"); } map.set('orderNo', trCells.item(orderNoIndex)); map.set('orderDate', trCells.item(billDateIndex)); map.set('deliveryDate', trCells.item(billDeliveryIndex)); map.set('OCellA', trCells.item(orderNoIndex)); map.set('OCellB', trCells.item(orderNoIndex)); for (let item of map) { if ($('#' + item[0], w.document)[0]) { $('#' + item[0], w.document)[0].textContent = $('div', item[1])[0].textContent; } } // 填信息 $('#printTime', w.document)[0].textContent = date + ' ' + time; // 包装备料单 let w1 = null; let iframe1 = null; if (window.fastPrint) { iframe1 = document.createElement('iframe'); document.body.appendChild(iframe1); iframe1.contentWindow.document.open(); iframe1.contentWindow.document.write(w.document.documentElement.innerHTML); w1 = iframe1.contentWindow; } else { w1 = window.open(); w1.document.write(w.document.documentElement.innerHTML); w1.document.getElementById("download").setAttribute('download', trCells.item(orderNoIndex).textContent + '-' + "包装备料单" + '-' + date + ".html"); } new QRCode($('#SCDQR', w.document)[0], { text: trCells.item(orderNoIndex).textContent, width: 144, height: 144 }); new QRCode($('#SCDQR', w1.document)[0], { text: trCells.item(orderNoIndex).textContent, width: 144, height: 144 }); w1.document.getElementById('title').textContent = "包装备料单"; // 原料表 var materialTable = $('#materialTable', w.document)[0]; // 工艺表指针 var wIndex = 1; // 物料表指针 var mIndex = 1; // 表体序号 var tIndex = 1; let name = ''; let lastName = ''; let cell0 = null; // 物料表 var materialTable1 = $('#materialTable', w1.document)[0]; // 工艺表指针 var wIndex1 = 1; // 物料表指针 var mIndex1 = 1; // 表体序号 var tIndex1 = 1; let name1 = ''; let lastName1 = ''; let cell01 = null; for (let row of bodyRows) { let materialCode = $('div', row.cells.item(materialCodeIndex))[0].textContent; let process = $('div', row.cells.item(processIndex))[0].textContent; if (process != '包装' && !materialCode.startsWith('00-')) { name = $('div', row.cells.item(materialNameIndex))[0].textContent; const cells = row.cells; let tr = materialTable.insertRow(wIndex++); let i = 0; tr.insertCell(i++).innerHTML = tIndex++; tr.insertCell(i++).innerHTML = cells.item(materialCodeIndex).textContent; if (tr.rowIndex == 1) { cell0 = tr.insertCell(i++); cell0.innerHTML = name; } else if (name == lastName) { cell0.setAttribute('rowspan', ++mIndex); } else { mIndex = 1; cell0 = tr.insertCell(i++); cell0.innerHTML = name; } tr.insertCell(i++).innerHTML = cells.item(materialAliasIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialSpecsIndex).textContent; if (materialCode.startsWith('00-') || materialCode.startsWith('01-012')) { tr.insertCell(i++).innerHTML = '外购'; } else { tr.insertCell(i++).innerHTML = ''; } tr.insertCell(i++).innerHTML = cells.item(materialQIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialUnitIndex).textContent lastName = name; } if (process == '包装' || materialCode.startsWith('01-012')) { name1 = $('div', row.cells.item(materialNameIndex))[0].textContent; const cells = row.cells; let tr = materialTable1.insertRow(wIndex1++); let i = 0; tr.insertCell(i++).innerHTML = tIndex1++; tr.insertCell(i++).innerHTML = cells.item(materialCodeIndex).textContent; if (tr.rowIndex == 1) { cell0 = tr.insertCell(i++); cell0.innerHTML = name1; } else if (name1 == lastName1) { cell01.setAttribute('rowspan', ++mIndex1); } else { mIndex1 = 1; cell01 = tr.insertCell(i++); cell01.innerHTML = name1; } tr.insertCell(i++).innerHTML = cells.item(materialAliasIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialSpecsIndex).textContent; if (materialCode.startsWith('01-012')) { tr.insertCell(i++).innerHTML = '车件'; } else { tr.insertCell(i++).innerHTML = ''; } tr.insertCell(i++).innerHTML = cells.item(materialQIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialUnitIndex).textContent lastName1 = name1; } } await sleep(100); if (w.document.getElementById("download").hasAttribute('download')) { w.document.getElementById("download").click(); } if (w1.document.getElementById("download").hasAttribute('download')) { w1.document.getElementById("download").click(); } if (window.fastPrint) { w.print(); w1.print(); w.close(); w1.close(); document.body.removeChild(iframe); document.body.removeChild(iframe1); } } // 打印排料单 async function generateMaterial() { if (!$('input', $('label:contains("订单号")')[0].nextSibling)[0].value && !$('input', $('label:contains("生产单号")')[0].nextSibling)[0].value && !$('input', $('label:contains("产品编码")')[0].nextSibling)[0].value && !$('input', $('label:contains("产品名")')[0].nextSibling)[0].value) { alert("未输入订单号/生产单号/产品编号/产品名,请先设置至少一项筛选条件"); return; } const orderNoIndex = $('th:contains("订单号")')[0].cellIndex; const customerIndex = $('th:contains("客户名")')[0].cellIndex; const billDateIndex = $('th:contains("单据日期")')[0].cellIndex; const billDeliveryIndex = $('th:contains("发货日期")')[0].cellIndex; const productCodeIndex = $('th:contains("产品编码")')[0].cellIndex; const productNameIndex = $('th:contains("产品名")')[0].cellIndex; const productAliasIndex = $('th:contains("产品别名")')[0].cellIndex; const productSpecsIndex = $('th:contains("产品规格")')[0].cellIndex; const scdIndex = $('th:contains("生产单号")')[0].cellIndex; const orderQuantityIndex = $('th:contains("下单数")')[0].cellIndex; const processIndex = $('th:contains("工序名")')[0].cellIndex; const semiIndex = $('th:contains("工件名")')[0].cellIndex; const plannedQuantityIndex = $('th:contains("加工数")')[0].cellIndex; const productPlannedQuantityIndex = $('th:contains("生产数")')[0].cellIndex; const workshopIndex = $('th:contains("车间")')[0].cellIndex; const keyIndex = $('th:contains("主键")')[0].cellIndex; // 物料 const materialCodeIndex = $('th:contains("物料编码")')[0].cellIndex; const materialNameIndex = $('th:contains("物料名")')[0].cellIndex; const materialAliasIndex = $('th:contains("物料别名")')[0].cellIndex; const materialSpecsIndex = $('th:contains("物料规格")')[0].cellIndex; const semiSpecsIndex = $('th:contains("工件尺寸")')[0].cellIndex; const materialQIndex = $('th:contains("领料数")')[0].cellIndex; const materialUnitIndex = $('th:contains("计量单位")')[0].cellIndex; var tbody = null; await getFullTable().then(t => { tbody = t; }) var bodyRows = tbody.rows; let trCells = tbody.rows.item(0).cells; var today = new Date(); var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); let w = null; let iframe = null; if (window.fastPrint) { iframe = document.createElement('iframe'); document.body.appendChild(iframe); iframe.contentWindow.document.open(); iframe.contentWindow.document.write(materialTemplate); w = iframe.contentWindow; } else { w = window.open(); w.document.write(materialTemplate); w.document.getElementById("download").setAttribute('download', trCells.item(orderNoIndex).textContent + '-' + "生产排料单" + '-' + date + ".html"); } let map = new Map(); map.set('orderNo', trCells.item(orderNoIndex)); map.set('SCD', trCells.item(scdIndex)); map.set('SCDCell', trCells.item(scdIndex)); map.set('orderQuantity', trCells.item(orderQuantityIndex)); map.set('plannedQuantity', trCells.item(productPlannedQuantityIndex)); map.set('orderDate', trCells.item(billDateIndex)); map.set('deliveryDate', trCells.item(billDeliveryIndex)); map.set('OCellA', trCells.item(orderNoIndex)); map.set('OCellB', trCells.item(orderNoIndex)); for (let item of map) { if ($('#' + item[0], w.document)[0]) { $('#' + item[0], w.document)[0].textContent = $('div', item[1])[0].textContent; } } // 填信息 $('#printTime', w.document)[0].textContent = date + ' ' + time; new QRCode($('#SCDQR', w.document)[0], { text: trCells.item(orderNoIndex).textContent, width: 144, height: 144 }); var materialTable = $('#materialTable', w.document)[0]; // 工艺表指针 var wIndex = 1; // 物料表指针 var mIndex = 1; let lastCode = ''; let cell0 = null; let cell1 = null; let cell2 = null; for (let row of bodyRows) { let materialCode = $('div', row.cells.item(materialCodeIndex))[0].textContent; let process = $('div', row.cells.item(processIndex))[0].textContent; if (materialCode && process != '包装' && process != '产品组装' && !materialCode.startsWith('02-1')) { const semi = $('div', row.cells.item(semiIndex))[0].textContent; const code = $('div', row.cells.item(productCodeIndex))[0].textContent; const cells = row.cells; let tr = materialTable.insertRow(wIndex++); if (tr.rowIndex == 1) { cell0 = tr.insertCell(0); cell1 = tr.insertCell(1); cell2 = tr.insertCell(2); cell0.innerHTML = cells.item(productAliasIndex).textContent + "<br />" + cells.item(productNameIndex).textContent; cell1.innerHTML = cells.item(productPlannedQuantityIndex).textContent; cell1.className = "numCell"; cell2.innerHTML = cells.item(orderQuantityIndex).textContent; cell2.className = "numCell"; } else if (code == lastCode) { cell0.setAttribute('rowspan', mIndex); cell1.setAttribute('rowspan', mIndex); cell2.setAttribute('rowspan', mIndex); } else { mIndex = 1; cell0 = tr.insertCell(0); cell1 = tr.insertCell(1); cell2 = tr.insertCell(2); cell0.innerHTML = cells.item(productAliasIndex).textContent + "<br />" + cells.item(productNameIndex).textContent; cell1.innerHTML = cells.item(productPlannedQuantityIndex).textContent; cell1.className = "numCell"; cell2.innerHTML = cells.item(orderQuantityIndex).textContent; cell2.className = "numCell"; } let i = 0; if (code != lastCode) { i = 3; } //tr.insertCell(i++).innerHTML = cells.item(processIndex).textContent; tr.insertCell(i++).innerHTML = semi; tr.insertCell(i++).innerHTML = mIndex++; //tr.insertCell(i++).innerHTML = cells.item(materialCodeIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialNameIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialSpecsIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(semiSpecsIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(plannedQuantityIndex).textContent; if (materialCode.startsWith('00-') || materialCode.startsWith('01-012')) { tr.insertCell(i++).innerHTML = '外购'; } else { tr.insertCell(i++).innerHTML = ''; } tr.insertCell(i++).innerHTML = cells.item(materialQIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(materialUnitIndex).textContent; //tr.insertCell(i++).innerHTML = cells.item(processIndex).textContent; tr.insertCell(i++).innerHTML = cells.item(workshopIndex).textContent; lastCode = code; } } await sleep(100); if (w.document.getElementById("download").hasAttribute('download')) { w.document.getElementById("download").click(); } if (window.fastPrint) { w.print(); w.close(); document.body.removeChild(iframe); } } // 打印生产单 async function generateAndPrint() { if (!$('input', $('label:contains("订单号")')[0].nextSibling)[0].value && !$('input', $('label:contains("生产单号")')[0].nextSibling)[0].value && !$('input', $('label:contains("产品编码")')[0].nextSibling)[0].value && !$('input', $('label:contains("产品名")')[0].nextSibling)[0].value) { alert("未输入订单号/生产单号/产品编号/产品名,请先设置至少一项筛选条件"); return; } const orderNoIndex = $('th:contains("订单号")')[0].cellIndex; const customerIndex = $('th:contains("客户名")')[0].cellIndex; const billDateIndex = $('th:contains("单据日期")')[0].cellIndex; const billDeliveryIndex = $('th:contains("发货日期")')[0].cellIndex; const productCodeIndex = $('th:contains("产品编码")')[0].cellIndex; const productNameIndex = $('th:contains("产品名")')[0].cellIndex; const productAliasIndex = $('th:contains("产品别名")')[0].cellIndex; const productSpecsIndex = $('th:contains("产品规格")')[0].cellIndex; const scdIndex = $('th:contains("生产单号")')[0].cellIndex; const orderQuantityIndex = $('th:contains("下单数")')[0].cellIndex; const processIndex = $('th:contains("工序名")')[0].cellIndex; const semiIndex = $('th:contains("工件名")')[0].cellIndex; const plannedQuantityIndex = $('th:contains("加工数")')[0].cellIndex; const productPlannedQuantityIndex = $('th:contains("生产数")')[0].cellIndex; const workshopIndex = $('th:contains("车间")')[0].cellIndex; const keyIndex = $('th:contains("主键")')[0].cellIndex; // 物料 const materialCodeIndex = $('th:contains("物料编码")')[0].cellIndex; const materialNameIndex = $('th:contains("物料名")')[0].cellIndex; const materialAliasIndex = $('th:contains("物料别名")')[0].cellIndex; const materialSpecsIndex = $('th:contains("物料规格")')[0].cellIndex; const semiSpecsIndex = $('th:contains("工件尺寸")')[0].cellIndex; const materialQIndex = $('th:contains("领料数")')[0].cellIndex; const materialUnitIndex = $('th:contains("计量单位")')[0].cellIndex; var tbody = null; await getFullTable().then(t => { tbody = t; }) var bodyRows = tbody.rows; var today = new Date(); var date = today.getFullYear() + '-' + (today.getMonth() + 1) + '-' + today.getDate(); var time = today.getHours() + ":" + today.getMinutes() + ":" + today.getSeconds(); let oldSCD = '' let atable = []; var currentTable = null; // 根据不同生产单生成n个表 for (let tr of bodyRows) { let cSCD = $('div', tr.cells.item(scdIndex))[0].textContent; if (cSCD != oldSCD) { currentTable = document.createElement('table'); atable.push(currentTable); } currentTable.appendChild(tr.cloneNode(true)); oldSCD = cSCD; } for (let t of atable) { let trCells = t.rows.item(0).cells; let w = null; let iframe = null; if (window.fastPrint) { iframe = document.createElement('iframe'); document.body.appendChild(iframe); iframe.contentWindow.document.open(); iframe.contentWindow.document.write(htmlTemplate); w = iframe.contentWindow; } else { w = window.open(); w.document.write(htmlTemplate); w.document.getElementById("download").setAttribute('download', trCells.item(orderNoIndex).textContent + '-' + "生产任务单" + '-' + trCells.item(productAliasIndex).textContent + '-' + trCells.item(productNameIndex).textContent + '-' + date + ".html"); } let map = new Map(); map.set('customerName', trCells.item(customerIndex)); map.set('orderNo', trCells.item(orderNoIndex)); map.set('productCode', trCells.item(productCodeIndex)); map.set('productName', trCells.item(productNameIndex)); map.set('ProductNameCell', trCells.item(productNameIndex)); map.set('productAlias', trCells.item(productAliasIndex)); map.set('productSpecs', trCells.item(productSpecsIndex)); map.set('SCD', trCells.item(scdIndex)); map.set('SCDCell', trCells.item(scdIndex)); map.set('orderQuantity', trCells.item(orderQuantityIndex)); map.set('plannedQuantity', trCells.item(productPlannedQuantityIndex)); map.set('orderDate', trCells.item(billDateIndex)); map.set('deliveryDate', trCells.item(billDeliveryIndex)); // 填信息 for (let item of map) { $('#' + item[0], w.document)[0].textContent = $('div', item[1])[0].textContent; } $('#ProductNameCell', w.document)[0].textContent = $('div', trCells.item(productAliasIndex))[0].textContent + ' ' + $('#ProductNameCell', w.document)[0].textContent; $('#printTime', w.document)[0].textContent = date + ' ' + time; new QRCode($('#SCDQR', w.document)[0], { text: $('div', map.get('SCD'))[0].textContent, width: 144, height: 144 }); var tBodyRows = t.rows; var processTable = $('#procedureTable', w.document)[0]; var materialTable = $('#materialTable', w.document)[0]; // 工艺表指针 var wIndex = 1; // 物料表指针 var mIndex = 1; var contentIndex = 0; let outsourcing = ''; let lastID = ''; let processCell = null; let span = 1; for (let row of tBodyRows) { let process = $('div', row.cells.item(processIndex))[0].textContent; const semi = $('div', row.cells.item(semiIndex))[0].textContent; const plannedQuantity = $('div', row.cells.item(plannedQuantityIndex))[0].textContent; const workshop = $('div', row.cells.item(workshopIndex))[0].textContent; const key = $('div', row.cells.item(keyIndex))[0].textContent; if (process.includes('振光') || process.includes('镀') || process.includes('电解') || process.includes('丝印') || process.includes('打砂') || process.includes('浸塑') || process.includes('震光') || process.includes('氧化着色') || process.includes('喷粉')) { if (!outsourcing.includes(process)) outsourcing = outsourcing ? outsourcing + '/' + process : process; } let materialCode = $('div', row.cells.item(materialCodeIndex))[0].textContent; if (materialCode.startsWith("02-")) { materialCode = null; } // 填工序卡表体 if (key != lastID) { let tr = processTable.insertRow(wIndex); contentIndex = wIndex++; tr.insertCell(0).innerHTML = contentIndex; let processCell = tr.insertCell(1); processCell.innerHTML = materialCode ? '🅐' + process : process; processCell.setAttribute('class', 'processCell'); let semiCell = tr.insertCell(2); semiCell.innerHTML = semi; semiCell.setAttribute('class', 'semiCell'); let i = 3 let pieceQuantity = plannedQuantity / $('#plannedQuantity', w.document)[0].textContent; tr.insertCell(i++).innerHTML = plannedQuantity; tr.insertCell(i++).innerHTML = pieceQuantity < 1 ? Number(pieceQuantity).toFixed(2) : pieceQuantity; tr.insertCell(i++).innerHTML = ''; tr.insertCell(i++).innerHTML = ''; tr.insertCell(i++).innerHTML = ''; tr.insertCell(i++).innerHTML = ''; tr.insertCell(i++).innerHTML = ''; tr.insertCell(i++).innerHTML = ''; tr.insertCell(i++).innerHTML = workshop; // let qrCell = tr.insertCell(6); // var qrDiv = document.createElement('div'); // new QRCode(qrDiv, { // text: process, // width: 64, // height: 64 // }); // qrCell.appendChild(qrDiv); } // 填物料表体 if (materialCode && process != '包装' && process != '产品组装') { let materialCode = $('div', row.cells.item(materialCodeIndex))[0].textContent; let materialName = $('div', row.cells.item(materialNameIndex))[0].textContent; let materialAlias = $('div', row.cells.item(materialAliasIndex))[0].textContent; let materialSpecs = $('div', row.cells.item(materialSpecsIndex))[0].textContent; let semiSpecs = $('div', row.cells.item(semiSpecsIndex))[0].textContent; let materialQ = $('div', row.cells.item(materialQIndex))[0].textContent; let materialUnit = $('div', row.cells.item(materialUnitIndex))[0].textContent; let tr = materialTable.insertRow(mIndex++); if (mIndex == 1) { processCell = tr.insertCell(0); processCell.innerHTML = contentIndex + '.' + process; processCell.setAttribute('class', 'processCell'); } else if (key == lastID) { processCell.setAttribute('rowspan', ++span); } else { span = 1; processCell = tr.insertCell(0); processCell.innerHTML = contentIndex + '.' + process; processCell.setAttribute('class', 'processCell'); } let i = 0; if (key != lastID) { i = 1; } tr.insertCell(i++).innerHTML = materialCode; let nameCell = tr.insertCell(i++); nameCell.innerHTML = materialName; nameCell.setAttribute('class', 'nameCell'); tr.insertCell(i++).innerHTML = materialSpecs; tr.insertCell(i++).innerHTML = semiSpecs; tr.insertCell(i++).innerHTML = plannedQuantity; tr.insertCell(i++).innerHTML = materialQ; tr.insertCell(i++).innerHTML = materialUnit; } lastID = key; } $('#outSourceType', w.document)[0].textContent = outsourcing; await sleep(100); if (w.document.getElementById("download").hasAttribute('download')) { w.document.getElementById("download").click(); } if (window.fastPrint) { w.print(); w.close(); document.body.removeChild(iframe); } } } //async function makeQRCode() { // let bodyRows = document.querySelectorAll('[class="cell el-tooltip"]')[0].closest('table').lastChild.rows; // const qrIndex = $('th:contains("二维码")')[0].cellIndex; // if (!qrIndex) { // return; // } // let qrCell = null; // for (let row of bodyRows) { // qrCell = row.cells.item(qrIndex); // let qrDiv = $('#qrBoxDiv', qrCell)[0]; // if (qrDiv) { // qrCell.removeChild(qrDiv); // } // qrDiv = document.createElement('div'); // qrDiv.setAttribute('id', 'qrBoxDiv'); // qrCell.appendChild(qrDiv); // let str = $('div', row.cells.item(qrIndex))[0].textContent; // new QRCode(qrDiv, { // text: str, // width: 96, // height: 96 // }); // } // while ($('img', qrCell)[0].getAttribute('style') == "display: none;") { // await sleep(100); // } // formatAndPrint(); //} //async function formatAndPrint() { // var header = $('thead')[0].firstChild; // var body = document.querySelectorAll('[class="cell el-tooltip"]')[0].closest('tbody').cloneNode(true); // var bodyRows = body.rows; // // cleanup table elements // var tbl = document.createElement('table'); // for (let row of bodyRows) { // // tr // row.removeAttribute('class'); // for (let cell of row.cells) { // // td // cell.removeAttribute('class'); // cell.removeAttribute('rowspan'); // cell.removeAttribute('colspan'); // // td-div // cell.firstChild.removeAttribute('class'); // cell.firstChild.removeAttribute('style'); // } // } // var printContents = body.innerHTML; // var pageTemplate = '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paper-css/0.3.0/paper.css">\n<style>@page { size: A4 }</style>\n<body class="A5">\n<section class="sheet padding-10mm">\n'; // // add contents here // pageTemplate += "<table>" + printContents + "</table>"; // pageTemplate += '\n</section>\n</body>'; // var w = window.open(); // w.document.write(pageTemplate); // await sleep(500); // w.print(); // // w.close(); //} // 生产任务单 const htmlTemplate = `<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paper-css/0.3.0/paper.css"> <body class="A4" style="height: auto;"> <a onclick="this.href='data:text/html;charset=UTF-8,'+encodeURIComponent(document.documentElement.outerHTML)" href="#" id="download"></a> <section class="sheet padding-10mm" style="height: auto;"> <p align=center style="margin-top: -5px;"><span class=title lang=ZH-CN>车间生产任务单</span></p> <div align=center> <div id="leftbox"> <p align=left><label>客户名: </label><span id="customerName"></span></p> <p align=left><label>订单号: </label><span id="orderNo"></span></p> <p align=left><label>产品编码: </label><span id="productCode"></span></p> <p align=left><label>产品名: </label><span id="productName"></span></p> <p align=left><label>产品别名: </label><span id="productAlias"></span></p> <p align=left><label>产品规格: </label><span id="productSpecs"></span></p> <p align=left><label>生产单号: </label><span id="SCD"></span></p> <p align=left><label>客户下单数: </label><span id="orderQuantity"></span></p> <p align=left><label>计划生产数: </label><span id="plannedQuantity"></span></p> <p align=left><label>订单日期: </label><span id="orderDate"></span></p> <p align=left><label>交货日期: </label><span id="deliveryDate"></span></p> <p align=left><label>打印时间: </label><span id="printTime"></span></p> <p align=left><label>外发类型: </label><span id="outSourceType"></span></p> </div> <div id="rightbox" style="margin-bottom: 10px;"> <table id="materialTable" style="font-size:small;" contenteditable> <tr> <th>工序</th> <th>物料编号</th> <th>物料名称</th> <th>物料规格</th> <th>开料尺寸</th> <th>开料数</th> <th>用量</th> <th>单位</th> </tr> </table> <div style="margin-top: 20px;" id="SCDQR"></div> </div> </div> <div style="clear: both;"></div> <div style="margin-top: 10px;" align=center> <table style="font-size:small;" contenteditable> <thead> <tr> <td colspan="12" style="font-size: medium;"><span>产品名: </span> <span id="ProductNameCell"></span> </td> </tr> </thead> <tfoot> <tr> <td colspan="12" style="font-size: medium;"><span>车间生产单号: </span><span id="SCDCell"></span> </td> </tr> </tfoot> <tbody id="procedureTable"> <tr> <th>#</th> <th>工序</th> <th>工序内容</th> <th>数量</th> <th>单件</th> <th style="min-width: 15mm;">日期</th> <th style="min-width: 15mm;">投入数</th> <th style="min-width: 15mm;">产出数</th> <th style="min-width: 10mm;">不良品</th> <th style="min-width: 10mm;">用时</th> <th style="min-width: 15mm;">生产员</th> <th>车间</th> </tr> </tbody> </table> </div> </section> </body> <style> @page { size: A4; } #leftbox { float: left; margin-top: 20px; margin-bottom: 20px; width: 30%; } #rightbox { float: right; margin-top: 30px; width: 68%; } .title { text-align: center; font-size: large; } p { margin-bottom: -10px; font-size: 90%; } .avoidBreak { page-break-after: avoid; } table, th, td { word-wrap: break-word; } .semiCell { max-width: 50mm; } .processCell { max-width: 17mm; } .nameCell { max-width: 25mm; } .materialCode { font-size: 6px; } table { width: 100%; border-width: 1px; border-spacing: 0px; border-style: solid; border-color: grey; border-collapse: separate; } table th { border-width: 1px; border-color: grey; border-style: solid; } table td { border-width: 1px; border-color: grey; border-style: solid; } td { font-size: smaller; } tr { page-break-inside: avoid; page-break-after: auto; } thead { display: table-header-group; } tfoot { display: table-footer-group; } </style>`; // 排料单 const materialTemplate = `<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paper-css/0.3.0/paper.css"> <body class="A4" style="height: auto;"> <a onclick="this.href='data:text/html;charset=UTF-8,'+encodeURIComponent(document.documentElement.outerHTML)" href="#" id="download"></a> <section class="sheet padding-10mm" style="height: auto;"> <p align=center style="margin-top: -5px;"><span class=title lang=ZH-CN>生产排料单</span></p> <div align=center> <div id="leftbox"> <p align=left><label>订单号: </label><span id="orderNo"></span></p> <p align=left><label>订单日期: </label><span id="orderDate"></span></p> <p align=left><label>领料日期: </label><span id="pickingDate"></span></p> <p align=left><label>交货日期: </label><span id="deliveryDate"></span></p> <p align=left><label>打印时间: </label><span id="printTime"></span></p> </div> <div id="rightbox"> <div align="right" style="margin-top: 20px;" id="SCDQR"></div> </div> </div> <div style="clear: both;"></div> <div style="margin-top: 10px;" align=center> <table style="font-size:small;" contenteditable> <thead> <tr> <td colspan="15" style="font-size: medium;"><span>订单号: </span> <span id="OCellA"></span> </td> </tr> </thead> <tfoot> <tr> <td colspan="15" style="font-size: medium;"><span>订单号: </span><span id="OCellB"></span> </td> </tr> </tfoot> <tbody id="materialTable"> <tr> <th>产品名称</th> <th class="numCell">生产数</th> <th class="numCell">出货数</th> <th>工件名称</th> <th>#</th> <th>物料名称</th> <th>物料规格</th> <th>开料尺寸</th> <th>开料数</th> <th style="min-width: 30px;">物料来源</th> <th>用量</th> <th>单位</th> <th>车间</th> </tr> </tbody> </table> </div> </section> </body> <style> @page { size: A4; } #leftbox { float: left; margin-top: 20px; margin-bottom: 20px; width: 30%; } #rightbox { float: right; margin-top: 10px; width: 68%; } .numCell { max-width: 25px; } .title { text-align: center; font-size: large; } .materialCode { font-size: 6px; } .avoidBreak { page-break-after: avoid; } p { margin-bottom: -10px; font-size: 90%; } table, th, td { word-wrap: break-word; } table { width: 100%; border-width: 1px; border-spacing: 0px; border-style: solid; border-color: grey; border-collapse: separate; } table th { border-width: 1px; border-color: grey; border-style: solid; } table td { border-width: 1px; border-color: grey; border-style: solid; } td { font-size: smaller; max-width: 80px; } </style>`; // 备料单 const sumMaterialTemplate = `<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paper-css/0.3.0/paper.css"> <body class="A4" style="height: auto;"> <a onclick="this.href='data:text/html;charset=UTF-8,'+encodeURIComponent(document.documentElement.outerHTML)" href="#" id="download"></a> <section class="sheet padding-10mm" style="height: auto;"> <p align=center style="margin-top: -5px;"><span id="title" class="title">生产备料单</span></p> <div align=center> <div id="leftbox"> <p align=left><label>订单号: </label><span id="orderNo"></span></p> <p align=left><label>订单日期: </label><span id="orderDate"></span></p> <p align=left><label>领料日期: </label><span id="pickingDate"></span></p> <p align=left><label>交货日期: </label><span id="deliveryDate"></span></p> <p align=left><label>打印时间: </label><span id="printTime"></span></p> </div> <div id="rightbox"> <div align="right" style="margin-top: 20px;" id="SCDQR"></div> </div> </div> <div style="clear: both;"></div> <div style="margin-top: 10px;" align=center> <table style="font-size:small;" contenteditable> <thead> <tr> <td colspan="15" style="font-size: medium;"><span>订单号: </span> <span id="OCellA"></span> </td> </tr> </thead> <tfoot> <tr> <td colspan="15" style="font-size: medium;"><span>订单号: </span><span id="OCellB"></span> </td> </tr> </tfoot> <tbody id="materialTable"> <tr> <th>#</th> <th>物料编码</th> <th>物料名称</th> <th>物料别名</th> <th>物料规格</th> <th style="min-width: 30px;">物料来源</th> <th>用量</th> <th>单位</th> </tr> </tbody> </table> </div> </section> </body> <style> @page { size: A4; } #leftbox { float: left; margin-top: 20px; margin-bottom: 20px; width: 30%; } #rightbox { float: right; margin-top: 10px; width: 68%; } .numCell { max-width: 10px; } .materialCode { font-size: 6px; } .title { text-align: center; font-size: large; } p { margin-bottom: -10px; font-size: 90%; } .avoidBreak { page-break-after: avoid; } table, th, td { word-wrap: break-word; } table { width: 100%; border-width: 1px; border-spacing: 0px; border-style: solid; border-color: grey; border-collapse: separate; } table th { border-width: 1px; border-color: grey; border-style: solid; } table td { border-width: 1px; border-color: grey; border-style: solid; } </style>`; // 采购单 const purchaseTemplate = ` <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/paper-css/0.3.0/paper.css"> <body class="A4" style="height: auto;"> <a onclick="this.href='data:text/html;charset=UTF-8,'+encodeURIComponent(document.documentElement.outerHTML)" href="#" id="download"></a> <section class="sheet padding-10mm" style="height: auto;"> <p align=center style="margin-top: -5px;"><span id="title" class="title">原料采购计划</span></p> <div align=center> <div id="leftbox"> <p align=left><label>订单号: </label><span id="orderNo"></span></p> <p align=left><label>订单日期: </label><span id="orderDate"></span></p> <p align=left><label>领料日期: </label><span id="pickingDate"></span></p> <p align=left><label>交货日期: </label><span id="deliveryDate"></span></p> <p align=left><label>打印时间: </label><span id="printTime"></span></p> </div> <div id="rightbox"> <div align="right" style="margin-top: 20px;" id="SCDQR"></div> </div> </div> <div style="clear: both;"></div> <div style="margin-top: 10px;" align=center> <table style="font-size:small;" contenteditable> <thead> <tr> <td colspan="15" style="font-size: medium;"><span>订单号: </span> <span id="OCellA"></span> </td> </tr> </thead> <tfoot> <tr> <td colspan="15" style="font-size: medium;"><span>订单号: </span><span id="OCellB"></span> </td> </tr> </tfoot> <tbody id="materialTable"> <tr> <th>#</th> <th>物料名称</th> <th>物料规格</th> <th style="min-width: 30px;">当前库存</th> <th>生产待领料</th> <th>采购未入库</th> <th>订单用量</th> <th>建议采购数</th> <th>单位</th> </tr> </tbody> </table> </div> </section> </body> <style> @page { size: A4; } #leftbox { float: left; margin-top: 20px; margin-bottom: 20px; width: 30%; } #rightbox { float: right; margin-top: 10px; width: 68%; } .numCell { max-width: 10px; } .materialCode { font-size: 6px; } .title { text-align: center; font-size: large; } p { margin-bottom: -10px; font-size: 90%; } .avoidBreak { page-break-after: avoid; } table, th, td { word-wrap: break-word; } table { width: 100%; border-width: 1px; border-spacing: 0px; border-style: solid; border-color: grey; border-collapse: separate; } table th { border-width: 1px; border-color: grey; border-style: solid; } table td { border-width: 1px; border-color: grey; border-style: solid; } </style> `; })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址