diff --git a/inventory-web/src/views/outbound/Selection.vue b/inventory-web/src/views/outbound/Selection.vue index 2b31f70..55361a6 100644 --- a/inventory-web/src/views/outbound/Selection.vue +++ b/inventory-web/src/views/outbound/Selection.vue @@ -794,6 +794,15 @@ const handlePreview = () => { previewVisible.value = true } +// 创建隐藏 iframe 用于打印 +const printFrame = document.createElement('iframe'); +printFrame.style.position = 'absolute'; +printFrame.style.width = '0'; +printFrame.style.height = '0'; +printFrame.style.border = '0'; +document.body.appendChild(printFrame); +const iframeDoc = printFrame.contentWindow.document; + const confirmPrint = async () => { previewVisible.value = false; // 记录日志 @@ -804,9 +813,85 @@ const confirmPrint = async () => { printSelectionList(JSON.parse(JSON.stringify(payload))).catch(() => {}); } catch (e) {} - setTimeout(() => { - window.print(); - }, 300); + // 获取 #print-area 元素和当前 computed 样式 + const printElement = document.getElementById('print-area'); + if (!printElement) return; + const styles = Array.from(document.styleSheets) + .filter(sheet => { + try { return !sheet.href || sheet.href.indexOf(window.location.host) !== -1; } catch { return false; } + }) + .map(sheet => { + try { + return Array.from(sheet.cssRules).map(rule => rule.cssText).join('\n'); + } catch { return ''; } + }).join('\n'); + + // 4. 将提取的样式和要打印的 HTML 写入 iframe + iframeDoc.open(); + iframeDoc.write(` + + +
+