工单打印记录
This commit is contained in:
@@ -79,3 +79,8 @@ export function deleteWorkOrder(ids: string | Array<string>) {
|
|||||||
export function exportWorkOrder(query: WorkOrderQuery) {
|
export function exportWorkOrder(query: WorkOrderQuery) {
|
||||||
return http.download(`${BASE_URL}/export`, query)
|
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 { ref, reactive, nextTick, onMounted } from 'vue'
|
||||||
import { Message } from '@arco-design/web-vue'
|
import { Message } from '@arco-design/web-vue'
|
||||||
import { useRoute } from 'vue-router'
|
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 QRCode from 'qrcode';
|
||||||
import {getMaterialDetail} from "@/apis/weightManage/weightManage";
|
import {getMaterialDetail} from "@/apis/weightManage/weightManage";
|
||||||
|
|
||||||
@@ -514,7 +514,7 @@ const printLabel = async () => {
|
|||||||
</div>
|
</div>
|
||||||
`).join('')
|
`).join('')
|
||||||
|
|
||||||
// 构建打印内容
|
// 构建打印内容,通过 matchMedia 监听打印确认事件(仅在确认打印时保存记录)
|
||||||
const printHTML = `
|
const printHTML = `
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
@@ -539,6 +539,26 @@ const printLabel = async () => {
|
|||||||
<div class="label-container">
|
<div class="label-container">
|
||||||
${labelsHTML}
|
${labelsHTML}
|
||||||
</div>
|
</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>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
`
|
`
|
||||||
@@ -546,6 +566,46 @@ const printLabel = async () => {
|
|||||||
printWindow.document.write(printHTML)
|
printWindow.document.write(printHTML)
|
||||||
printWindow.document.close()
|
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 = () => {
|
printWindow.onload = () => {
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user