You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
261 lines
12 KiB
261 lines
12 KiB
import QRCode from 'qrcode';
|
|
|
|
/**
|
|
* 标签打印模板 Mixin
|
|
* 提供 A001、A002、A003 三种标签打印模板的通用方法
|
|
*/
|
|
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)- 左边二维码,右边文字信息
|
|
// 布局:2mm边距,左侧二维码区20mm,右侧文字区,底部两行物料名称
|
|
async printLabelA001(LODOP, printData, isNewPage){
|
|
if(isNewPage){
|
|
LODOP.NEWPAGE();
|
|
}
|
|
|
|
// ============================================================
|
|
// 1. 纸张设置
|
|
// ============================================================
|
|
// 纸张大小 70mm x 30mm,留2mm边距,实际打印区域 66mm x 26mm
|
|
LODOP.SET_PRINT_PAGESIZE(0, 700, 300, '');
|
|
|
|
// ============================================================
|
|
// 2. 绘制边框和分隔线
|
|
// ============================================================
|
|
// 外边框(2mm边距,66mm宽 x 26mm高)
|
|
LODOP.ADD_PRINT_RECT('2mm', '2mm', '66mm', '26mm', 0, 1);
|
|
|
|
// 垂直分隔线:左右分隔(二维码区18mm,文字区48mm)
|
|
LODOP.ADD_PRINT_LINE('2mm', '20mm', '19mm', '20mm', 0, 1);
|
|
|
|
// 水平分隔线1:编码下方
|
|
LODOP.ADD_PRINT_LINE('7mm', '20mm', '7mm', '68mm', 0, 1);
|
|
|
|
// 水平分隔线2:型号下方
|
|
LODOP.ADD_PRINT_LINE('11mm', '20mm', '11mm', '68mm', 0, 1);
|
|
|
|
// 水平分隔线3:数量下方
|
|
LODOP.ADD_PRINT_LINE('15mm', '20mm', '15mm', '68mm', 0, 1);
|
|
|
|
// 水平分隔线4:批号下方,同时是物料描述区上边界(横跨整个宽度)
|
|
LODOP.ADD_PRINT_LINE('19mm', '2mm', '19mm', '68mm', 0, 1);
|
|
|
|
// ============================================================
|
|
// 3. 左侧二维码(使用LODOP自带二维码)
|
|
// ============================================================
|
|
// 可见区域:18mm(宽) x 17mm(高)
|
|
// 二维码有默认白边(静区),需放大约20%让白边溢出到框外
|
|
const qrContent = printData.rollNo || '';
|
|
if (qrContent) {
|
|
// 位置:top=2mm, left=2mm(往右下移动)
|
|
const qrIndex = LODOP.ADD_PRINT_BARCODE('2mm', '2.5mm', '21mm', '20mm', 'QRCode', qrContent);
|
|
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeVersion", 0); // 自动选择版本
|
|
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M");
|
|
}
|
|
|
|
// ============================================================
|
|
// 4. 右侧文字信息(4行)- 字体6号
|
|
// ============================================================
|
|
const labelX = '21mm'; // 标签列起始位置
|
|
const valueX = '32mm'; // 值列起始位置(从30mm改为32mm,给标签留更多空间)
|
|
const labelWidth = '11mm'; // 标签列宽度(从9mm改为11mm,确保冒号能显示)
|
|
const valueWidth = '35mm'; // 值列宽度
|
|
const fontSize = 6; // 字体大小
|
|
|
|
// 编码(第1行)
|
|
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行)
|
|
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行)
|
|
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行)
|
|
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);
|
|
|
|
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)- 其他工序用
|
|
printLabelA002(LODOP, printData, isNewPage){
|
|
if(isNewPage){
|
|
LODOP.NEWPAGE();
|
|
}
|
|
|
|
// ============================================================
|
|
// 1. 纸张设置
|
|
// ============================================================
|
|
// 设置纸张大小 70mm x 20mm (0=纵向)
|
|
LODOP.SET_PRINT_PAGESIZE(0, 700, 200, '');
|
|
|
|
// ============================================================
|
|
// 2. 绘制边框
|
|
// ============================================================
|
|
// 外边框(1mm边距,68mm宽 x 18mm高)
|
|
LODOP.ADD_PRINT_RECT('1mm', '1mm', '68mm', '18mm', 0, 1);
|
|
|
|
// ============================================================
|
|
// 3. 左侧二维码
|
|
// ============================================================
|
|
// 二维码位置:距上1.6mm,距左3.4mm,尺寸18.2mm x 18.2mm
|
|
const qrIndex = LODOP.ADD_PRINT_BARCODE('1.6mm', '3.4mm', '18.2mm', '18.2mm', 'QRCode', printData.rollNo || '');
|
|
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeVersion", 4);
|
|
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M");
|
|
|
|
// ============================================================
|
|
// 4. 右侧文字信息(4行)- 向左移动,字体缩小
|
|
// ============================================================
|
|
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", 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", 7);
|
|
|
|
// 第3行:良品 + 不良品(左右分布)
|
|
// 良品(左侧)
|
|
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", 7);
|
|
|
|
// 不良品(右侧)
|
|
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", 7);
|
|
|
|
// 第4行:总数 + 良率(左右分布)
|
|
// 总数(左侧)
|
|
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", 7);
|
|
|
|
// 良率(右侧)
|
|
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", 7);
|
|
},
|
|
|
|
// A003 标签打印(70mm x 20mm)- 绑定用
|
|
printLabelA003(LODOP, printData, isNewPage){
|
|
if(isNewPage){
|
|
LODOP.NEWPAGE();
|
|
}
|
|
|
|
// ============================================================
|
|
// 1. 纸张设置
|
|
// ============================================================
|
|
// 设置纸张大小 70mm x 20mm (0=纵向)
|
|
LODOP.SET_PRINT_PAGESIZE(0, 700, 200, '');
|
|
|
|
// ============================================================
|
|
// 2. 绘制边框
|
|
// ============================================================
|
|
// 外边框(1mm边距,68mm宽 x 18mm高)
|
|
LODOP.ADD_PRINT_RECT('1mm', '1mm', '68mm', '18mm', 0, 1);
|
|
|
|
// ============================================================
|
|
// 3. 左侧二维码
|
|
// ============================================================
|
|
// 二维码位置:距上1.6mm,距左3.4mm,尺寸18.2mm x 18.2mm
|
|
const qrIndex = LODOP.ADD_PRINT_BARCODE('1.6mm', '3.4mm', '18.2mm', '18.2mm', 'QRCode', printData.rollNo || '');
|
|
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeVersion", 4);
|
|
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M");
|
|
|
|
// ============================================================
|
|
// 4. 右侧文字信息(4行)
|
|
// ============================================================
|
|
const startX = '23mm'; // 文字左边距
|
|
const textWidth = '43mm'; // 文字区域宽度
|
|
|
|
// 第1行:ERP No.
|
|
const text1 = LODOP.ADD_PRINT_TEXT('3mm', startX, textWidth, '3mm', `ERP No.: ${printData.partNo || ''}`);
|
|
LODOP.SET_PRINT_STYLEA(text1, "FontName", "Microsoft YaHei");
|
|
LODOP.SET_PRINT_STYLEA(text1, "FontSize", 8);
|
|
|
|
// 第2行:Batch No. + Reel No.(左右分布)
|
|
// Batch No.(左侧)
|
|
const text2 = LODOP.ADD_PRINT_TEXT('7mm', startX, '20mm', '3mm', `Batch No.: ${printData.batchNo || ''}`);
|
|
LODOP.SET_PRINT_STYLEA(text2, "FontName", "Microsoft YaHei");
|
|
LODOP.SET_PRINT_STYLEA(text2, "FontSize", 8);
|
|
|
|
// Reel No.(右侧)
|
|
const text3 = LODOP.ADD_PRINT_TEXT('7mm', '43mm', '23mm', '3mm', `Reel No.: ${printData.reelNo || ''}`);
|
|
LODOP.SET_PRINT_STYLEA(text3, "FontName", "Microsoft YaHei");
|
|
LODOP.SET_PRINT_STYLEA(text3, "FontSize", 8);
|
|
|
|
// 第3行:Good QTY
|
|
const text4 = LODOP.ADD_PRINT_TEXT('11mm', startX, textWidth, '3mm', `Good QTY: ${printData.goodQuantity || ''}`);
|
|
LODOP.SET_PRINT_STYLEA(text4, "FontName", "Microsoft YaHei");
|
|
LODOP.SET_PRINT_STYLEA(text4, "FontSize", 8);
|
|
|
|
// 第4行:Bad QTY
|
|
const text5 = LODOP.ADD_PRINT_TEXT('15mm', startX, textWidth, '3mm', `Bad QTY: ${printData.badQuantity || ''}`);
|
|
LODOP.SET_PRINT_STYLEA(text5, "FontName", "Microsoft YaHei");
|
|
LODOP.SET_PRINT_STYLEA(text5, "FontSize", 8);
|
|
}
|
|
}
|
|
}
|
|
|