修复:防止异步响应覆盖与打印资源泄漏
This commit is contained in:
@@ -255,14 +255,25 @@ function handlePrint(row) {
|
||||
}
|
||||
|
||||
let objectUrl;
|
||||
let closeMonitorId;
|
||||
let cleanupFinished = false;
|
||||
setPrinting(row.palletId, true);
|
||||
const revokeObjectUrl = () => {
|
||||
const cleanupPrint = () => {
|
||||
if (cleanupFinished) return;
|
||||
cleanupFinished = true;
|
||||
if (closeMonitorId !== undefined) {
|
||||
window.clearInterval(closeMonitorId);
|
||||
closeMonitorId = undefined;
|
||||
}
|
||||
if (objectUrl) {
|
||||
URL.revokeObjectURL(objectUrl);
|
||||
objectUrl = undefined;
|
||||
}
|
||||
setPrinting(row.palletId, false);
|
||||
};
|
||||
closeMonitorId = window.setInterval(() => {
|
||||
if (printWindow.closed) cleanupPrint();
|
||||
}, 250);
|
||||
|
||||
getPalletQrcode(row.palletId).then((qrCodeBlob) => {
|
||||
if (printWindow.closed) throw new Error("打印窗口已关闭");
|
||||
@@ -282,16 +293,12 @@ function handlePrint(row) {
|
||||
printWindow.print();
|
||||
}, { once: true });
|
||||
imageElement.addEventListener("error", () => {
|
||||
revokeObjectUrl();
|
||||
cleanupPrint();
|
||||
printWindow.close();
|
||||
proxy.$modal.msgError("二维码图片加载失败");
|
||||
}, { once: true });
|
||||
printWindow.addEventListener("afterprint", () => {
|
||||
if (objectUrl) {
|
||||
URL.revokeObjectURL(objectUrl);
|
||||
objectUrl = undefined;
|
||||
}
|
||||
setPrinting(row.palletId, false);
|
||||
cleanupPrint();
|
||||
printWindow.close();
|
||||
}, { once: true });
|
||||
|
||||
@@ -299,7 +306,7 @@ function handlePrint(row) {
|
||||
printWindow.document.head.append(styleElement);
|
||||
printWindow.document.body.replaceChildren(titleElement, imageElement);
|
||||
}).catch(() => {
|
||||
revokeObjectUrl();
|
||||
cleanupPrint();
|
||||
if (!printWindow.closed) printWindow.close();
|
||||
proxy.$modal.msgError("二维码获取失败");
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user