/** * node-red打印程序 */ import Common from '../../common/Common.js'; import Uuid from '../../common/Uuid.js'; export default { webSocket: '', // websocket对象 socketUrl: 'ws://127.0.0.1:18800/api/ws/print', // websocket客户端地址 /** * 获取所有的打印机 */ getPrinters: function () { var _self = this; var command = { id: Uuid.createUUID(), command: 'getPrinters', data: null, }; var commandStr = JSON.stringify(command); return new Promise((resolve, reject) => { _self.connectNodeRed(resolve, reject, commandStr); }); }, /** * 打印条码程序 * @param {调用的打印方法, 使用http请求头,举例:url = "http://127.0.0.1:8080/api/JobOrderResource/print} url * @param {打印机名称, 取值"TOSHIBA" ,"GK888t","Zebra"} printerName */ print: function (url, printerName) { var _self = this; return new Promise((resolve, reject) => { $.ajax({ type: 'get', url: url, beforeSend: function (request) { Common.addTokenToRequest(request); }, success: function (data) { if (data && data.length > 0) { var printPagesStr = JSON.parse(data); _self.printPrintPages(printPagesStr, printerName); } }, error: function (XMLHttpRequest, textStatus, errorThrown) { reject(XMLHttpRequest); }, }); }); }, /** * 打印机文件 * @param {*} printPages */ printPrintPages: function(printPages, printerName){ var _self = this; var commandData = { id: Uuid.createUUID(), command: 'print', printerName: printerName, data: printPages, }; var commandStr = JSON.stringify(commandData); var promise = new Promise((resolve, reject) => { _self.connectNodeRed(resolve, reject, commandStr); }); return promise; }, /** * 打印机文件预览 * @param {*} printPages */ printPreview: function(printPages, printerName){ var _self = this; var commandData = { id: Uuid.createUUID(), command: 'printPreview', printerName: printerName, data: printPages, }; var commandStr = JSON.stringify(commandData); var promise = new Promise((resolve, reject) => { _self.connectNodeRed(resolve, reject, commandStr); }); return promise; }, // 连接node red的websocket connectNodeRed: function (resolve, reject, commandStr) { var _self = this; let printers = []; _self.webSocket = new WebSocket(this.socketUrl); _self.webSocket.onopen = function (event) { console.log('打印 Websocket 连接成功。'); if (commandStr != null && commandStr.length > 0) { _self.sendCommand(commandStr); } else { _self.close(); } }; _self.webSocket.onclose = function (event) { console.log('打印 Websocket 断开连接。'); resolve(printers); }; _self.webSocket.onerror = function (event) { console.log('打印 Websocket 出错。'); _self.close(); reject(); }; _self.webSocket.onmessage = function (event) { var data = JSON.parse(event.data); if (data.command == 'getPrinters') { printers = data.data; } if (data.command == 'printPreview') { printers = data.previewImages; } _self.close(); }; }, /** * WebSocket 发送指令 * @param {指令} command */ sendCommand: function (command) { if (this.webSocket) { this.webSocket.send(command); } }, /** * 关闭Websocket */ close: function () { if (this.webSocket) { this.webSocket.close(); this.webSocket = null; }; }, };