feat:打印消息缓存

This commit is contained in:
houjunxiang
2025-11-25 14:36:18 +08:00
parent 44398c6004
commit 96cc747150
3 changed files with 48 additions and 13 deletions

View File

@@ -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 = {

View File

@@ -91,7 +91,7 @@ function handleReturnToStock() {
})
if (res.isPrint == 1) {
// 执行打印
nx.$print.print(res)
nx.$print.getPrintTemplateAndPrint(res.id)
}
})
}

View File

@@ -48,6 +48,7 @@
<up-button
v-if="sampleData.id"
:disabled="sampleData.returnStatus !== 'completed'"
:loading="btnLoading"
type="primary"
style="width: 90%"
text="打印归库标签"
@@ -110,8 +111,13 @@ async function getSampleDetail() {
sampleData.value = list[0]
}
}
let btnLoading = ref(false)
function handlePrint() {
nx.$print.print(sampleData.value)
btnLoading.value = true
nx.$print.getPrintTemplateAndPrint(sampleData.value.id, () => {
uni.showToast({ title: '已打印', icon: 'success' })
btnLoading.value = false
})
}
</script>