工单打印记录

This commit is contained in:
zc
2026-06-17 15:42:46 +08:00
parent c3da8055ec
commit f571704614
2 changed files with 69 additions and 4 deletions

View File

@@ -79,3 +79,8 @@ export function deleteWorkOrder(ids: string | Array<string>) {
export function exportWorkOrder(query: WorkOrderQuery) {
return http.download(`${BASE_URL}/export`, query)
}
/** @desc 保存打印记录 */
export function savePrintRecord(data: any) {
return http.post(`/print/print`, data)
}

View File

@@ -201,7 +201,7 @@
import { ref, reactive, nextTick, onMounted } from 'vue'
import { Message } from '@arco-design/web-vue'
import { useRoute } from 'vue-router'
import {getWorkOrder, type WorkOrderInfoResp} from "@/apis/workOrder/workOrder"
import {getWorkOrder, savePrintRecord, type WorkOrderInfoResp} from "@/apis/workOrder/workOrder"
import QRCode from 'qrcode';
import {getMaterialDetail} from "@/apis/weightManage/weightManage";
@@ -443,7 +443,7 @@ const printLabel = async () => {
// 判断是打印明细标签还是整体标签
const isDetailLabels = labelDataList.length > 0
const labelsToPrint = isDetailLabels ? labelDataList : [labelData]
// 生成标签HTML
const labelsHTML = labelsToPrint.map(item => `
<div class="label">
@@ -513,8 +513,8 @@ const printLabel = async () => {
</table>
</div>
`).join('')
// 构建打印内容
// 构建打印内容,通过 matchMedia 监听打印确认事件(仅在确认打印时保存记录)
const printHTML = `
<html>
<head>
@@ -539,6 +539,26 @@ const printLabel = async () => {
<div class="label-container">
${labelsHTML}
</div>
<script>
// 标记是否已保存打印记录(避免重复触发)
var printRecordSaved = false;
// 通过 matchMedia 监听打印状态变化
// mediaQuery.matches === true 表示浏览器进入"打印"渲染状态(用户点击了"打印/确认"按钮)
// 取消或关闭窗口不会触发此状态切换
var mediaQuery = window.matchMedia('print');
var handlePrintChange = function(mql) {
if (mql.matches && !printRecordSaved) {
printRecordSaved = true;
// 向父窗口发送消息,通知保存打印记录
window.opener && window.opener.postMessage({ type: 'PRINT_CONFIRMED' }, '*');
}
};
if (mediaQuery.addEventListener) {
mediaQuery.addEventListener('change', handlePrintChange);
} else if (mediaQuery.addListener) {
mediaQuery.addListener(handlePrintChange);
}
<\/script>
</body>
</html>
`
@@ -546,6 +566,46 @@ const printLabel = async () => {
printWindow.document.write(printHTML)
printWindow.document.close()
// 监听子窗口发来的打印确认消息,保存打印记录
const onPrintConfirmed = async (event: MessageEvent) => {
if (event.data && event.data.type === 'PRINT_CONFIRMED') {
try {
const printRecords = labelsToPrint.map(item => ({
workerOrderId: formData.workerOrderId,
materialNamePrint: item.partName,
encodingPrint: item.partNumber,
totalCount: item.totalCount,
totalCalculatedWeight: item.totalCalculatedWeight,
totalWeight: item.totalWeight,
qrCodeData: item.qrCodeData,
batch: formData.batch,
mark: item.mark,
productionDate: item.productionDate,
packingSignature: item.packingSignature == '' ? null : item.packingSignature,
inspectionSignature: item.inspectionSignature == '' ? null : item.inspectionSignature,
}))
await savePrintRecord({
workerOrderId: formData.workerOrderId,
orderNo: formData.orderNo,
encoding: formData.encoding,
materialName: formData.materialName,
materialNamePrint: formData.materialNamePrint,
encodingPrint: formData.encodingPrint,
batch: formData.batch,
labelType: isDetailLabels ? 0 : 1,
labelCount: labelsToPrint.length,
printInfoList: printRecords,
})
Message.success('打印记录已保存')
} catch (err) {
console.error('保存打印记录失败:', err)
Message.error('保存打印记录失败')
}
window.removeEventListener('message', onPrintConfirmed)
}
}
window.addEventListener('message', onPrintConfirmed)
// 等待图片加载完成后再打印
printWindow.onload = () => {
setTimeout(() => {