工单打印记录
This commit is contained in:
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -514,7 +514,7 @@ const printLabel = async () => {
|
||||
</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(() => {
|
||||
|
||||
Reference in New Issue
Block a user