From c5efe6beda499a19733b3d762d769c693aed4c7f Mon Sep 17 00:00:00 2001 From: fengyuan_yang <1976974459@qq.com> Date: Mon, 1 Dec 2025 16:17:43 +0800 Subject: [PATCH] =?UTF-8?q?2025-12-01=20=E5=88=9B=E5=BB=BA=E5=88=86?= =?UTF-8?q?=E5=8D=B7=E6=89=93=E5=8D=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/mixins/labelPrintTemplates.js | 28 ++-- .../yieldReport/com_produce_report_normal.vue | 3 + .../modules/yieldReport/com_separate_roll.vue | 148 +++++++++++++++++- 3 files changed, 164 insertions(+), 15 deletions(-) diff --git a/src/mixins/labelPrintTemplates.js b/src/mixins/labelPrintTemplates.js index 527da23..1b3113a 100644 --- a/src/mixins/labelPrintTemplates.js +++ b/src/mixins/labelPrintTemplates.js @@ -127,42 +127,44 @@ export default { LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M"); // ============================================================ - // 4. 右侧文字信息(4行) + // 4. 右侧文字信息(4行)- 向左移动,字体缩小 // ============================================================ - const startX = '23mm'; // 文字左边距 - const textWidth = '43mm'; // 文字区域宽度 + const startX = '22mm'; // 文字左边距(从23mm改为22mm,向左移动1mm) + const textWidth = '46mm'; // 文字区域宽度(从43mm增加到46mm) // 第1行:编码 const text1 = LODOP.ADD_PRINT_TEXT('3mm', startX, textWidth, '3mm', `编码:${printData.partNo || ''}`); LODOP.SET_PRINT_STYLEA(text1, "FontName", "Microsoft YaHei"); - LODOP.SET_PRINT_STYLEA(text1, "FontSize", 8); + LODOP.SET_PRINT_STYLEA(text1, "FontSize", 7); // 第2行:卷号 const text2 = LODOP.ADD_PRINT_TEXT('7mm', startX, textWidth, '3mm', `卷号:${printData.rollNo || ''}`); LODOP.SET_PRINT_STYLEA(text2, "FontName", "Microsoft YaHei"); - LODOP.SET_PRINT_STYLEA(text2, "FontSize", 8); + LODOP.SET_PRINT_STYLEA(text2, "FontSize", 7); // 第3行:良品 + 不良品(左右分布) // 良品(左侧) - const text3 = LODOP.ADD_PRINT_TEXT('11mm', startX, '20mm', '3mm', `良品:${printData.goodQuantity || ''}`); + const text3 = LODOP.ADD_PRINT_TEXT('11mm', startX, '22mm', '3mm', `良品:${printData.goodQuantity || ''}`); LODOP.SET_PRINT_STYLEA(text3, "FontName", "Microsoft YaHei"); - LODOP.SET_PRINT_STYLEA(text3, "FontSize", 8); + LODOP.SET_PRINT_STYLEA(text3, "FontSize", 7); // 不良品(右侧) - const text4 = LODOP.ADD_PRINT_TEXT('11mm', '43mm', '23mm', '3mm', `不良品:${printData.badQuantity || ''}`); + const text4 = LODOP.ADD_PRINT_TEXT('11mm', '44mm', '24mm', '3mm', `不良品:${printData.badQuantity || ''}`); LODOP.SET_PRINT_STYLEA(text4, "FontName", "Microsoft YaHei"); - LODOP.SET_PRINT_STYLEA(text4, "FontSize", 8); + LODOP.SET_PRINT_STYLEA(text4, "FontSize", 7); // 第4行:总数 + 良率(左右分布) // 总数(左侧) - const text5 = LODOP.ADD_PRINT_TEXT('15mm', startX, '20mm', '3mm', `总数:${printData.quantity || ''}`); + const text5 = LODOP.ADD_PRINT_TEXT('15mm', startX, '22mm', '3mm', `总数:${printData.quantity || ''}`); LODOP.SET_PRINT_STYLEA(text5, "FontName", "Microsoft YaHei"); - LODOP.SET_PRINT_STYLEA(text5, "FontSize", 8); + LODOP.SET_PRINT_STYLEA(text5, "FontSize", 7); // 良率(右侧) - const text6 = LODOP.ADD_PRINT_TEXT('15mm', '43mm', '23mm', '3mm', `良率:${printData.yield || ''}%`); + const yieldValue = printData['yield'] || printData.yield || ''; + const yieldText = yieldValue ? `良率:${yieldValue}%` : '良率:'; + const text6 = LODOP.ADD_PRINT_TEXT('15mm', '44mm', '24mm', '3mm', yieldText); LODOP.SET_PRINT_STYLEA(text6, "FontName", "Microsoft YaHei"); - LODOP.SET_PRINT_STYLEA(text6, "FontSize", 8); + LODOP.SET_PRINT_STYLEA(text6, "FontSize", 7); }, // A003 标签打印(70mm x 20mm)- 绑定用 diff --git a/src/views/modules/yieldReport/com_produce_report_normal.vue b/src/views/modules/yieldReport/com_produce_report_normal.vue index e225104..4532012 100644 --- a/src/views/modules/yieldReport/com_produce_report_normal.vue +++ b/src/views/modules/yieldReport/com_produce_report_normal.vue @@ -3127,6 +3127,7 @@ export default { scheduledDate: '', shiftNo: '', partNo: '', + buNo: '', workCenterNo: '', workCenterDesc: '', resourceDesc: '', @@ -3935,6 +3936,7 @@ export default { this.scheduleData.itemNo = data.row.itemNo; this.scheduleData.resourceId = data.row.resourceId; this.scheduleData.partNo = data.row.partNo; + this.scheduleData.buNo = data.row.buNo; this.scheduleData.partDesc = data.row.partDesc; this.scheduleData.planStartTime = data.row.planStartTime; this.scheduleData.planFinishTime = data.row.planFinishTime; @@ -4093,6 +4095,7 @@ export default { this.scheduleData.itemNo = data.row.itemNo; this.scheduleData.resourceId = data.row.resourceId; this.scheduleData.partNo = data.row.partNo; + this.scheduleData.buNo = data.row.buNo; this.scheduleData.partDesc = data.row.partDesc; this.scheduleData.planStartTime = data.row.planStartTime; this.scheduleData.planFinishTime = data.row.planFinishTime; diff --git a/src/views/modules/yieldReport/com_separate_roll.vue b/src/views/modules/yieldReport/com_separate_roll.vue index d84cbf4..980e2cf 100644 --- a/src/views/modules/yieldReport/com_separate_roll.vue +++ b/src/views/modules/yieldReport/com_separate_roll.vue @@ -245,10 +245,19 @@ saveSysLanguageList } from "@/api/sysLanguage.js"; + import { + getPartLabelTemplateList, + callUspPartLabelTemplate + } from '@/api/wms/wms'; + + import getLodop from '@/utils/LodopFuncs.js'; + import labelPrintTemplates from '@/mixins/labelPrintTemplates.js'; + var functionId = 'C10000004'; export default { name: "com_separate_roll", + mixins: [labelPrintTemplates], data() { return { titleCon: '创建分卷', @@ -263,6 +272,7 @@ export default { scheduledDate: '', shiftNo: '', partNo: '', + buNo: '', workCenterNo: '', workCenterDesc: '', resourceDesc: '', @@ -937,9 +947,9 @@ export default { // 所有卷创建完成 this.$message.success('创建分卷完成!') - // 处理打印的数据 + // 打印标签(优化版:使用模板打印) if (allPrintList.length > 0) { - printSfdcLabel(allPrintList) + await this.printLabelsWithTemplate(allPrintList) } // 延时关闭弹窗 @@ -953,6 +963,140 @@ export default { } }, + /** + * 使用模板打印标签(优化版) + * @param {Array} printList - 打印数据列表 + */ + async printLabelsWithTemplate(printList) { + try { + // 1. 查询物料的标签模板设置(找默认模板) + const templateParams = { + site: this.scheduleData.site, + buNo: this.scheduleData.buNo, + partNo: this.scheduleData.partNo + }; + + const {data: templateData} = await getPartLabelTemplateList(templateParams); + + if (!templateData || templateData.code !== 0 || !templateData.list || templateData.list.length === 0) { + // 如果没有模板配置,使用原有的流转标签打印方式 + console.warn('未找到物料标签模板配置!'); + return; + } + + // 找到默认模板(default_flag = '1') + let defaultTemplate = templateData.list.find(item => item.defaultFlag === '1'); + if (!defaultTemplate && templateData.list.length > 0) { + // 如果没有设置默认模板,使用第一个 + defaultTemplate = templateData.list[0]; + } + + if (!defaultTemplate) { + console.warn('未找到默认模板!'); + return; + } + + const labelNo = defaultTemplate.labelNo; // A001、A002、A003 + + // 2. 获取打印机(使用默认打印机) + const LODOP = getLodop(); + if (!LODOP) { + this.$message.warning('无法连接到打印控件,跳过打印'); + return; + } + + // 获取默认打印机 + const printerCount = LODOP.GET_PRINTER_COUNT(); + if (printerCount === 0) { + this.$message.warning('未检测到打印机,跳过打印'); + return; + } + + const defaultPrinterName = LODOP.GET_PRINTER_NAME(0); // 使用第一个打印机作为默认打印机 + + // 3. 调用存储过程获取打印参数 + const printDataList = []; + + for (let i = 0; i < printList.length; i++) { + const item = printList[i]; + 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: item.rollNo + }; + + const {data: printData} = await callUspPartLabelTemplate(params); + if (printData && printData.code === 0 && printData.row) { + printDataList.push({ + ...printData.row, + labelNo: labelNo + }); + } else { + console.warn(`获取卷号 ${item.rollNo} 的打印参数失败,使用原始数据`); + // 如果获取打印参数失败,使用原始数据 + printDataList.push({ + ...item, + labelNo: labelNo + }); + } + } + + // 4. 执行打印 + this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName); + + this.$message.success('标签打印任务已发送!'); + + } catch (error) { + console.error('模板打印失败:', error); + this.$message.warning('模板打印失败,使用默认流转标签打印'); + // 降级处理:使用原有的流转标签打印方式 + printSfdcLabel(printList); + } + }, + + /** + * 执行模板打印 + * @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 属性