修理厂现场最怕:技师在工位等工单,前台却在跟浏览器打印框较劲。一张施工单打到财务激光机,一张结算单打到车间针式机------纸飞、人吼、车还压着工位。
服务顾问提的需求通常就这几句:
- 接车单 / 施工单打到车间那台
- 结算单、报价单打到前台那台
- 不要弹窗、尽量指定打印机
- 格式跟现在单据差不多
window.print 解决不了「指定机」;jsPDF 更冤,做出来是下载文件,车间要的是纸。
这类系统真正卡在哪
浏览器安全模型不允许网页随便静默出纸。车间、前台想一点就出,行业做法是:出纸电脑装本机打印服务,页面把内容推过去。
老 DMS / 汽修软件里 Lodop 很常见。能跑就别全拆。新做的 Vue 工单模块、平板接车壳,继续塞全局脚本会越来越痛,Chrome 一升级又「打印没反应」。
我现在新模块怎么接
票种不多、单据是页面 HTML 的,用 npm 包 web-print-pdf:工位装配套客户端,前端 async 调一下。
bash
npm install web-print-pdf
js
import webPrintPdf from 'web-print-pdf'
export async function printWorkOrder(html, printerName) {
return webPrintPdf.printHtml(
html,
{
paperFormat: 'A4',
margin: { top: '10mm', bottom: '10mm', left: '10mm', right: '10mm' },
printBackground: true,
},
{ printerName, copies: 1 },
{ action: 'print' } // 联调先 preview
)
}
// 车间施工单
await printWorkOrder(jobHtml, '车间-工单针式')
// 前台结算单
await printWorkOrder(billHtml, '前台-结算激光')
打印机名字写进门店 / 工位配置。 别信「默认打印机」。名字用包里的 utils.getPrinterList() 抄。
已经生成 PDF 的结算、报价,走 printPdfByUrl / printPdfByBase64,别再转 HTML。客户端要能访问到那个地址,内网鉴权链现场容易栽。
和 Lodop 怎么共存
老接车单、老套打继续 Lodop。新做的快速保养单、配件领料单走新方案。字典加打印引擎字段。对店长好讲话:不是推翻现场,是新流程试点。
上线前车间盯什么
客户端开机自启没有。
车间机、前台机名字有没有装反。
一式两联要不要 copies: 2,还是模板里直接两联排版。
高峰连打会不会把针式机堵死(看包是否支持排队 / 批量)。
包名搜 web-print-pdf。百度开发者中心这篇不放外链。