Browse Source

2025-12-29

打印模板A001优化调整
master
fengyuan_yang 6 months ago
parent
commit
c0ced123c0
  1. 146
      src/mixins/labelPrintTemplates.js
  2. 6
      src/views/modules/print/PoPartPrint.vue
  3. 6
      src/views/modules/print/rePrintPoPart.vue
  4. 6
      src/views/modules/shopOrder/productionReport/searchSfdcRollsReport.vue
  5. 6
      src/views/modules/yieldReport/com_abnormal_continue_roll.vue
  6. 4
      src/views/modules/yieldReport/com_abnormal_material_offline.vue
  7. 6
      src/views/modules/yieldReport/com_cutting_material.vue
  8. 4
      src/views/modules/yieldReport/com_material_loss.vue
  9. 6
      src/views/modules/yieldReport/com_produce_report_normal.vue
  10. 6
      src/views/modules/yieldReport/com_separate_roll.vue

146
src/mixins/labelPrintTemplates.js

@ -1,11 +1,34 @@
import QRCode from 'qrcode';
/**
* 标签打印模板 Mixin
* 提供 A001A002A003 三种标签打印模板的通用方法
*/
export default {
methods: {
/**
* 生成二维码图片的Base64字符串
* @param {string} text - 二维码内容
* @param {number} size - 二维码尺寸像素
* @returns {Promise<string>} - Base64图片字符串
*/
async generateQRCodeImage(text, size = 150) {
try {
const dataUrl = await QRCode.toDataURL(text, {
width: size,
margin: 0,
errorCorrectionLevel: 'M'
});
return dataUrl;
} catch (err) {
console.error('生成二维码失败:', err);
return '';
}
},
// A001 标签打印(70mm x 30mm)- 左边二维码,右边文字信息
printLabelA001(LODOP, printData, isNewPage){
// 布局:2mm边距,左侧二维码区20mm,右侧文字区,底部两行物料名称
async printLabelA001(LODOP, printData, isNewPage){
if(isNewPage){
LODOP.NEWPAGE();
}
@ -13,91 +36,98 @@ export default {
// ============================================================
// 1. 纸张设置
// ============================================================
// SET_PRINT_PAGESIZE(方向, 宽度, 高度, 纸张名称)
// 方向: 0=纵向, 1=横向
// 宽度/高度: 单位为 1/10 毫米,如 700 = 70mm
// 纸张大小 70mm x 30mm,留2mm边距,实际打印区域 66mm x 26mm
LODOP.SET_PRINT_PAGESIZE(0, 700, 300, '');
// ============================================================
// 2. 绘制边框和分隔线
// ============================================================
// ADD_PRINT_RECT(上边距, 左边距, 宽度, 高度, 边框样式, 边框粗细)
// 边框样式: 0=实线
// 边框粗细: 单位为像素
// 外边框(2mm边距,66mm宽 x 26mm高)
LODOP.ADD_PRINT_RECT('2mm', '2mm', '66mm', '26mm', 0, 1);
// 外边框(1mm边距,68mm宽 x 28mm高)
LODOP.ADD_PRINT_RECT('1mm', '1mm', '68mm', '28mm', 0, 1);
// ADD_PRINT_LINE(起点Y, 起点X, 终点Y, 终点X, 线条样式, 线条粗细)
// 线条样式: 0=实线
// 垂直分隔线:左右分隔(从上到下)
// 参数说明:起点(1mm, 22mm) -> 终点(29mm, 22mm)
LODOP.ADD_PRINT_LINE('1mm', '22mm', '29mm', '22mm', 0, 1);
// 垂直分隔线:左右分隔(二维码区18mm,文字区48mm)
LODOP.ADD_PRINT_LINE('2mm', '20mm', '19mm', '20mm', 0, 1);
// 水平分隔线1:编码下方
// 参数说明:起点(8mm, 22mm) -> 终点(8mm, 69mm)
LODOP.ADD_PRINT_LINE('8mm', '22mm', '8mm', '69mm', 0, 1);
LODOP.ADD_PRINT_LINE('7mm', '20mm', '7mm', '68mm', 0, 1);
// 水平分隔线2:型号下方
// 参数说明:起点(13mm, 22mm) -> 终点(13mm, 69mm)
LODOP.ADD_PRINT_LINE('13mm', '22mm', '13mm', '69mm', 0, 1);
LODOP.ADD_PRINT_LINE('11mm', '20mm', '11mm', '68mm', 0, 1);
// 水平分隔线3:数量下方
// 参数说明:起点(18mm, 22mm) -> 终点(18mm, 69mm)
LODOP.ADD_PRINT_LINE('18mm', '22mm', '18mm', '69mm', 0, 1);
LODOP.ADD_PRINT_LINE('15mm', '20mm', '15mm', '68mm', 0, 1);
// 水平分隔线4:批号下方
// 参数说明:起点(23mm, 22mm) -> 终点(23mm, 69mm)
LODOP.ADD_PRINT_LINE('23mm', '22mm', '23mm', '69mm', 0, 1);
// 水平分隔线4:批号下方,同时是物料描述区上边界(横跨整个宽度)
LODOP.ADD_PRINT_LINE('19mm', '2mm', '19mm', '68mm', 0, 1);
// ============================================================
// 3. 左侧二维码
// 3. 左侧二维码(使用LODOP自带二维码)
// ============================================================
// ADD_PRINT_BARCODE(上边距, 左边距, 宽度, 高度, 条码类型, 条码内容)
// 二维码位置:距上7mm,距左3mm,尺寸20mm x 20mm
const qrIndex = LODOP.ADD_PRINT_BARCODE('7mm', '3mm', '20mm', '20mm', 'QRCode', printData.rollNo || '');
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeVersion", 4);
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M");
// 可见区域:18mm(宽) x 17mm(高)
// 二维码有默认白边(静区),需放大约20%让白边溢出到框外
const qrContent = printData.rollNo || '';
if (qrContent) {
const qrIndex = LODOP.ADD_PRINT_BARCODE('1.5mm', '1.5mm', '21mm', '20mm', 'QRCode', qrContent);
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeVersion", 0); // 自动选择版本
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M");
}
// ============================================================
// 4. 右侧文字信息(5行)
// 4. 右侧文字信息(4行)- 字体6号
// ============================================================
// ADD_PRINT_TEXT(上边距, 左边距, 宽度, 高度, 文字内容)
// 文字起始X位置(左边距)和宽度
const startX = '23mm'; // 可调整:文字左边距,增大向右移,减小向左移
const textWidth = '43mm'; // 可调整:文字区域宽度
const labelX = '21mm'; // 标签列起始位置(从23mm改为21mm)
const valueX = '30mm'; // 值列起始位置(从32mm改为30mm)
const labelWidth = '9mm'; // 标签列宽度
const valueWidth = '37mm'; // 值列宽度(从35mm改为37mm)
const fontSize = 6; // 字体大小(从8号改为6号)
// 编码(第1行)
// 上边距4mm:可调整,增大向下移,减小向上移
const text1 = LODOP.ADD_PRINT_TEXT('4mm', startX, textWidth, '4mm', `编码:${printData.partNo || ''}`);
LODOP.SET_PRINT_STYLEA(text1, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text1, "FontSize", 8); // 可调整:字体大小
const label1 = LODOP.ADD_PRINT_TEXT('3.5mm', labelX, labelWidth, '3mm', '编码:');
LODOP.SET_PRINT_STYLEA(label1, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(label1, "FontSize", fontSize);
const value1 = LODOP.ADD_PRINT_TEXT('3.5mm', valueX, valueWidth, '3mm', printData.partNo || '');
LODOP.SET_PRINT_STYLEA(value1, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(value1, "FontSize", fontSize);
LODOP.SET_PRINT_STYLEA(value1, "Bold", 1);
// 型号(第2行)
// 上边距9mm:可调整
const text2 = LODOP.ADD_PRINT_TEXT('9mm', startX, textWidth, '4mm', `型号:${printData.spec || ''}`);
LODOP.SET_PRINT_STYLEA(text2, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text2, "FontSize", 8);
const label2 = LODOP.ADD_PRINT_TEXT('7.5mm', labelX, labelWidth, '3mm', '型号:');
LODOP.SET_PRINT_STYLEA(label2, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(label2, "FontSize", fontSize);
const value2 = LODOP.ADD_PRINT_TEXT('7.5mm', valueX, valueWidth, '3mm', printData.spec || '');
LODOP.SET_PRINT_STYLEA(value2, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(value2, "FontSize", fontSize);
// 数量(第3行)
// 上边距14mm:可调整
const text3 = LODOP.ADD_PRINT_TEXT('14mm', startX, textWidth, '4mm', `数量:${printData.quantity || ''}`);
LODOP.SET_PRINT_STYLEA(text3, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text3, "FontSize", 8);
const label3 = LODOP.ADD_PRINT_TEXT('11.5mm', labelX, labelWidth, '3mm', '数量:');
LODOP.SET_PRINT_STYLEA(label3, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(label3, "FontSize", fontSize);
const value3 = LODOP.ADD_PRINT_TEXT('11.5mm', valueX, valueWidth, '3mm', printData.quantity || '');
LODOP.SET_PRINT_STYLEA(value3, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(value3, "FontSize", fontSize);
// 批号(第4行)
// 上边距19mm:可调整
const text4 = LODOP.ADD_PRINT_TEXT('19mm', startX, textWidth, '4mm', `批号:${printData.batchNo || ''}`);
LODOP.SET_PRINT_STYLEA(text4, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text4, "FontSize", 8);
const label4 = LODOP.ADD_PRINT_TEXT('15.5mm', labelX, labelWidth, '3mm', '批号:');
LODOP.SET_PRINT_STYLEA(label4, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(label4, "FontSize", fontSize);
// 日期(第5行)
// 上边距24mm:可调整
const text5 = LODOP.ADD_PRINT_TEXT('24mm', startX, textWidth, '4mm', `日期:${printData.documentDate || ''}`);
LODOP.SET_PRINT_STYLEA(text5, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text5, "FontSize", 8);
const value4 = LODOP.ADD_PRINT_TEXT('15.5mm', valueX, valueWidth, '3mm', printData.batchNo || '');
LODOP.SET_PRINT_STYLEA(value4, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(value4, "FontSize", fontSize);
// ============================================================
// 5. 底部物料名称(2行)- 横跨整个宽度
// ============================================================
const partDesc = printData.partDesc || '';
// 底部区域:从19mm分隔线下方开始,高度约8mm,可显示两行文字
const descText = LODOP.ADD_PRINT_TEXT('19.5mm', '3mm', '63mm', '8mm', partDesc);
LODOP.SET_PRINT_STYLEA(descText, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(descText, "FontSize", fontSize);
LODOP.SET_PRINT_STYLEA(descText, "LineSpacing", 0); // 行间距
LODOP.SET_PRINT_STYLEA(descText, "Multiline", true); // 允许多行
},
// A002 标签打印(70mm x 20mm)- 其他工序用

6
src/views/modules/print/PoPartPrint.vue

@ -1302,7 +1302,7 @@ export default {
}
// labelNo
this.executePrint(printDataList);
await this.executePrint(printDataList);
this.printDialogVisible = false;
this.$message.success('打印任务已发送!');
@ -1317,7 +1317,7 @@ export default {
},
//
executePrint(printDataList){
async executePrint(printDataList){
const LODOP = getLodop();
if (!LODOP) {
this.$message.error('无法连接到打印控件!');
@ -1339,7 +1339,7 @@ export default {
// labelNo
if(printData.labelNo === 'A001'){
this.printLabelA001(LODOP, printData, i > 0 || times > 0);
await this.printLabelA001(LODOP, printData, i > 0 || times > 0);
} else if(printData.labelNo === 'A002'){
this.printLabelA002(LODOP, printData, i > 0 || times > 0);
} else if(printData.labelNo === 'A003'){

6
src/views/modules/print/rePrintPoPart.vue

@ -1198,7 +1198,7 @@ export default {
}
// labelNo
this.executePrint(printDataList);
await this.executePrint(printDataList);
this.printDialogVisible = false;
this.$message.success('打印任务已发送!');
@ -1213,7 +1213,7 @@ export default {
},
//
executePrint(printDataList){
async executePrint(printDataList){
const LODOP = getLodop();
if (!LODOP) {
this.$message.error('无法连接到打印控件!');
@ -1235,7 +1235,7 @@ export default {
// labelNo
if(printData.labelNo === 'A001'){
this.printLabelA001(LODOP, printData, i > 0 || times > 0);
await this.printLabelA001(LODOP, printData, i > 0 || times > 0);
} else if(printData.labelNo === 'A002'){
this.printLabelA002(LODOP, printData, i > 0 || times > 0);
} else if(printData.labelNo === 'A003'){

6
src/views/modules/shopOrder/productionReport/searchSfdcRollsReport.vue

@ -1131,7 +1131,7 @@ import labelPrintTemplates from '@/mixins/labelPrintTemplates.js';
}
// labelNo
this.executePrint(printDataList);
await this.executePrint(printDataList);
this.printDialogVisible = false;
this.$message.success('打印任务已发送!');
@ -1146,7 +1146,7 @@ import labelPrintTemplates from '@/mixins/labelPrintTemplates.js';
},
//
executePrint(printDataList){
async executePrint(printDataList){
const LODOP = getLodop();
if (!LODOP) {
this.$message.error('无法连接到打印控件!');
@ -1168,7 +1168,7 @@ import labelPrintTemplates from '@/mixins/labelPrintTemplates.js';
// labelNo
if(printData.labelNo === 'A001'){
this.printLabelA001(LODOP, printData, i > 0 || times > 0);
await this.printLabelA001(LODOP, printData, i > 0 || times > 0);
} else if(printData.labelNo === 'A002'){
this.printLabelA002(LODOP, printData, i > 0 || times > 0);
} else if(printData.labelNo === 'A003'){

6
src/views/modules/yieldReport/com_abnormal_continue_roll.vue

@ -460,7 +460,7 @@ export default {
}
// 4.
this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName);
await this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName);
this.$message.success('标签打印任务已发送!');
@ -473,7 +473,7 @@ export default {
/**
* 执行模板打印
*/
executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList);
//
@ -486,7 +486,7 @@ export default {
// labelNo
if (labelNo === 'A001') {
this.printLabelA001(LODOP, printData, false);
await this.printLabelA001(LODOP, printData, false);
} else if (labelNo === 'A002') {
this.printLabelA002(LODOP, printData, false);
} else if (labelNo === 'A003') {

4
src/views/modules/yieldReport/com_abnormal_material_offline.vue

@ -331,7 +331,7 @@ export default {
* @param {String} labelNo - 标签模板编号 (A001/A002/A003)
* @param {String} printerName - 打印机名称
*/
executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList);
//
@ -344,7 +344,7 @@ export default {
// labelNo labelPrintTemplates mixin
if (labelNo === 'A001') {
this.printLabelA001(LODOP, printData, false);
await this.printLabelA001(LODOP, printData, false);
} else if (labelNo === 'A002') {
this.printLabelA002(LODOP, printData, false);
} else if (labelNo === 'A003') {

6
src/views/modules/yieldReport/com_cutting_material.vue

@ -338,7 +338,7 @@ export default {
}
// 4.
this.executePrintWithTemplate(LODOP, [printData.row], labelNo, defaultPrinterName);
await this.executePrintWithTemplate(LODOP, [printData.row], labelNo, defaultPrinterName);
this.$message.success('标签打印任务已发送!');
} else {
console.warn('获取打印参数失败');
@ -356,7 +356,7 @@ export default {
* @param {String} labelNo - 标签模板编号 (A001/A002/A003)
* @param {String} printerName - 打印机名称
*/
executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList);
//
@ -369,7 +369,7 @@ export default {
// labelNo labelPrintTemplates mixin
if (labelNo === 'A001') {
this.printLabelA001(LODOP, printData, false);
await this.printLabelA001(LODOP, printData, false);
} else if (labelNo === 'A002') {
this.printLabelA002(LODOP, printData, false);
} else if (labelNo === 'A003') {

4
src/views/modules/yieldReport/com_material_loss.vue

@ -331,7 +331,7 @@ export default {
* @param {String} labelNo - 标签模板编号 (A001/A002/A003)
* @param {String} printerName - 打印机名称
*/
executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList);
//
@ -344,7 +344,7 @@ export default {
// labelNo labelPrintTemplates mixin
if (labelNo === 'A001') {
this.printLabelA001(LODOP, printData, false);
await this.printLabelA001(LODOP, printData, false);
} else if (labelNo === 'A002') {
this.printLabelA002(LODOP, printData, false);
} else if (labelNo === 'A003') {

6
src/views/modules/yieldReport/com_produce_report_normal.vue

@ -4920,7 +4920,7 @@ export default {
}
// 5.
this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName);
await this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName);
this.$message.success('标签打印任务已发送!');
@ -4939,7 +4939,7 @@ export default {
* @param {String} labelNo - 标签模板编号 (A001/A002/A003)
* @param {String} printerName - 打印机名称
*/
executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList);
//
@ -4952,7 +4952,7 @@ export default {
// labelNo labelPrintTemplates mixin
if (labelNo === 'A001') {
this.printLabelA001(LODOP, printData, false);
await this.printLabelA001(LODOP, printData, false);
} else if (labelNo === 'A002') {
this.printLabelA002(LODOP, printData, false);
} else if (labelNo === 'A003') {

6
src/views/modules/yieldReport/com_separate_roll.vue

@ -1445,7 +1445,7 @@ export default {
}
// 4.
this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName);
await this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName);
this.$message.success('标签打印任务已发送!');
@ -1464,7 +1464,7 @@ export default {
* @param {String} labelNo - 标签模板编号 (A001/A002/A003)
* @param {String} printerName - 打印机名称
*/
executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) {
console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList);
//
@ -1480,7 +1480,7 @@ export default {
// labelNo labelPrintTemplates mixin
// NEWPAGE
if (labelNo === 'A001') {
this.printLabelA001(LODOP, printData, false);
await this.printLabelA001(LODOP, printData, false);
} else if (labelNo === 'A002') {
this.printLabelA002(LODOP, printData, false);
} else if (labelNo === 'A003') {

Loading…
Cancel
Save