diff --git a/nx/helper/print.js b/nx/helper/print.js index 6f70834..dce172e 100644 --- a/nx/helper/print.js +++ b/nx/helper/print.js @@ -12,7 +12,7 @@ export default { clearInterval(printer.intervalID) printer.socketTask.close() } - }, 20000) + }, 10000) }, //开始心跳 heartbeatStart(printer) { @@ -44,7 +44,7 @@ export default { printer = { isOpen: false, isOpening: false, //打开中 - socketTask: false, + socketTask: null, timeoutID: -1, intervalID: -1, reConnectCount: 0, //重新连接次数 @@ -77,7 +77,6 @@ export default { complete: () => {} }) if (!socketTask) return - // console.log(socketTask); printer.socketTask = socketTask this.printMap.set(printServerIp, printer) @@ -89,6 +88,18 @@ export default { uni.$emit('printStatus', {}) console.log(socketTask) console.log(printServerIp + ': WebSocket连接成功。。。') + + // 发送 pending 消息 + if (printer.pendingMessages?.length) { + printer.pendingMessages.forEach(msg => { + try { + printer.socketTask.send({ data: msg }) + } catch (e) { + console.error('发送 pending 消息失败:', e) + } + }) + printer.pendingMessages = [] + } this.heartbeatStart(printer) this.checkConnect(printer) //检测连接是否正常 }) @@ -104,7 +115,7 @@ export default { socketTask.onClose(res => { printer.isOpen = false printer.isOpening = false - printer.socketTask = false + printer.socketTask = null uni.$emit('printStatus', {}) // console.log(printer.printServerIp + ": WebSocket连接关闭。。。"); this.heartbeatClear(printer) @@ -119,7 +130,7 @@ export default { socketTask.onError(res => { printer.isOpen = false printer.isOpening = false - printer.socketTask = false + printer.socketTask = null uni.$emit('printStatus', {}) // console.log(printServerIp + ": WebSocket连接失败。。。"); // console.log(res); @@ -175,20 +186,38 @@ export default { send(printServerIp, data) { let printer = this.printMap.get(printServerIp) if (!printer) { - //不存在则打开 + // 创建新 printer 对象(尚未连接) + printer = { + isOpen: false, + isOpening: false, + socketTask: null, + timeoutID: -1, + intervalID: -1, + reConnectCount: 0, //重新连接次数 + printServerIp: printServerIp, + lastReceiveMessageTime: new Date().getTime(), + pendingMessages: [data] + } + this.printMap.set(printServerIp, printer) this.open(printServerIp) + return } - if (printer?.socketTask) { + if (printer.isOpen && printer.socketTask?.readyState === 1) { printer.socketTask.send({ data: data }) + } else { + // 连接中 or 已断开 → 缓存 + printer.pendingMessages = printer.pendingMessages || [] + printer.pendingMessages.push(data) } }, //获取打印模板并执行打印 - getPrintTemplateAndPrint(businessSubId) { + getPrintTemplateAndPrint(businessSubId, callback) { getBusinessSubSample(businessSubId) - .then(res => { - this.print(res) + .then(async res => { + await this.print(res) + callback && callback() }) .catch(err => { console.log(err) @@ -197,7 +226,7 @@ export default { //调用send方法执行打印 print(businessSubData) { const { printTemplate } = businessSubData - if (!printTemplate) return uni.showToast({ title: '样品未配置打印模板' }) + if (!printTemplate) return uni.showToast({ title: '样品未配置打印模板', icon: 'error' }) const me = this me.getReportData(printTemplate, function (res) { const reportData = { diff --git a/pages/sampleWarehouse/returnToStock/index.vue b/pages/sampleWarehouse/returnToStock/index.vue index 62d9c87..08d1ee0 100644 --- a/pages/sampleWarehouse/returnToStock/index.vue +++ b/pages/sampleWarehouse/returnToStock/index.vue @@ -91,7 +91,7 @@ function handleReturnToStock() { }) if (res.isPrint == 1) { // 执行打印 - nx.$print.print(res) + nx.$print.getPrintTemplateAndPrint(res.id) } }) } diff --git a/pages/sampleWarehouse/sampleSearch/index.vue b/pages/sampleWarehouse/sampleSearch/index.vue index c26757b..8b4ec64 100644 --- a/pages/sampleWarehouse/sampleSearch/index.vue +++ b/pages/sampleWarehouse/sampleSearch/index.vue @@ -48,6 +48,7 @@ { + uni.showToast({ title: '已打印', icon: 'success' }) + btnLoading.value = false + }) }