现场最常见的弹窗之一:C-Lodop 未准备好、WebSocket 没准备好。点打印没纸,控制台一串本地连接失败。
这不一定是 Lodop 本身坏了。老项目里 C-Lodop 当本机打印服务用得很广,页面要连上它才能出纸。连不上时,先别改单据坐标。
按这个顺序查
1. 托盘在不在
任务栏右下角服务图标没有,页面怎么 getLodop 都是空的。让操作员点开安装目录里的服务,或从开始菜单启动一次。重启电脑后没自启,第二天全店一起报这个错。
2. 进程在不在
任务管理器里看服务进程。被安全软件隔离、被远程桌面会话带挂,都会变成「未准备好」。
3. 端口有没有人抢
本机同时装了好几个打印服务时,默认端口容易撞。浏览器开发者工具看本地 WebSocket / HTTP 是失败还是超时。失败就去服务设置里核对端口,和页面脚本里写的是否一致。
4. 页面协议对不对
业务站是 HTTPS,本机服务还按 HTTP 提供,浏览器会拦混合内容。同事点掉一次提示,后面就像「没反应」。无痕窗口能复现的话,先处理证书或本机 HTTPS,再查业务代码。
5. 脚本是不是在服务起来之前就调了
Vue 路由一进来就打印,服务还在启动,第一次必失败。按钮点击时再取实例,比 onMounted 里抢跑稳。
以上都通了,Lodop 老单据可以继续打。这套服务能跑的工位,不要为了排障把现场拆掉。
新模块可以并行,不必停掉 C-Lodop
有的票已经是 Vue 拼出来的 HTML,不想再往全局脚本里塞一截。可以另开一条:工位再装一套 npm 客户端,页面用 web-print-pdf 打新票。
bash
npm install web-print-pdf
js
import webPrintPdf from 'web-print-pdf'
await webPrintPdf.printHtml(
html,
{ paperFormat: 'A4', printBackground: true },
{ printerName: '从本机列表抄的名字' },
{ action: 'print' }
)
老套打仍走原来的 C-Lodop。字典里加个打印引擎字段,比「全场二选一」好讲话。
包名搜 web-print-pdf。本文不放链接。