diff --git a/src/views/modules/yieldReport/com_cutting_material.vue b/src/views/modules/yieldReport/com_cutting_material.vue index f5be8d8..851e8b8 100644 --- a/src/views/modules/yieldReport/com_cutting_material.vue +++ b/src/views/modules/yieldReport/com_cutting_material.vue @@ -48,10 +48,12 @@ import { processCuttingMaterialRoll, } from "@/api/yieldReport/com_cutting_material.js"; -/*打印标签专用的js*/ import { - printMaterialLabel, -} from "@/views/modules/yieldReport/print_roll_label.js" + callUspPartLabelTemplate +} from '@/api/wms/wms'; + +import getLodop from '@/utils/LodopFuncs.js'; +import labelPrintTemplates from '@/mixins/labelPrintTemplates.js'; import { searchSysLanguagePackList, @@ -69,6 +71,7 @@ import { var functionId = 'C10000017'; export default { + mixins: [labelPrintTemplates], data() { return { titleCon: '材料退料', @@ -280,15 +283,110 @@ export default { this.$message.success(data.msg); //刷新报工的页面 this.$emit('refreshPageData'); - //打印材料卷标签 - let printList = data.printList; - printMaterialLabel(printList); + //获取返回的卷号并打印 + const printRollNo = data.printRollNo; + if (printRollNo) { + this.printLabelWithTemplate(printRollNo); + } //关闭当前的页面 this.closeDialog(); } }); }, + /** + * 使用模板打印标签 + * @param {String} rollNo - 卷号 + */ + async printLabelWithTemplate(rollNo) { + try { + // 1. 获取 LODOP 打印控件 + const LODOP = getLodop(); + if (!LODOP) { + this.$message.warning('无法连接到打印控件,跳过打印'); + return; + } + + // 2. 获取默认打印机 + const printerCount = LODOP.GET_PRINTER_COUNT(); + if (printerCount === 0) { + this.$message.warning('未检测到打印机,跳过打印'); + return; + } + const defaultPrinterName = LODOP.GET_PRINTER_NAME(0); + + // 3. 调用存储过程获取打印参数(labelNo传空,由存储过程返回) + const params = { + site: this.scheduleData.site, + buNo: this.scheduleData.buNo, + menuID: '104003006', // 功能ID + relatedOrderNo: this.scheduleData.orderNo, + relatedOrderLineNo: this.scheduleData.seqNo, + documentNo: '', + partNo: this.scheduleData.partNo, + labelNo: '', // 传空字符串,由存储过程返回labelNo + rollNo: rollNo + }; + + const {data: printData} = await callUspPartLabelTemplate(params); + + if (printData && printData.code === 0 && printData.row) { + const labelNo = printData.row.labelNo; + if (!labelNo) { + console.warn('未获取到标签模板编号,跳过打印'); + return; + } + + // 4. 执行模板打印 + this.executePrintWithTemplate(LODOP, [printData.row], labelNo, defaultPrinterName); + this.$message.success('标签打印任务已发送!'); + } else { + console.warn('获取打印参数失败'); + } + } catch (error) { + console.error('打印失败:', error); + this.$message.warning('打印失败: ' + error.message); + } + }, + + /** + * 执行模板打印 + * @param {Object} LODOP - 打印控件对象 + * @param {Array} printDataList - 打印数据列表 + * @param {String} labelNo - 标签模板编号 (A001/A002/A003) + * @param {String} printerName - 打印机名称 + */ + executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) { + // 初始化打印任务 + LODOP.PRINT_INIT('下料标签打印'); + + // 设置打印模式 + LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE", true); + + // 设置打印机 + LODOP.SET_PRINTER_INDEX(printerName); + + // 循环打印每个标签 + for (let i = 0; i < printDataList.length; i++) { + const printData = printDataList[i]; + const isNewPage = i > 0; + + // 根据 labelNo 调用不同的打印方法(来自 labelPrintTemplates mixin) + if (labelNo === 'A001') { + this.printLabelA001(LODOP, printData, isNewPage); + } else if (labelNo === 'A002') { + this.printLabelA002(LODOP, printData, isNewPage); + } else if (labelNo === 'A003') { + this.printLabelA003(LODOP, printData, isNewPage); + } else { + console.warn(`未知的标签模板:${labelNo},跳过该标签`); + } + } + + // 预览打印 + LODOP.PREVIEW(); + }, + // 保存 默认配置 列 async saveMultiLanguage() { // 保存页面 button label title 属性