Browse Source

2025-12-01

创建分卷打印
master
fengyuan_yang 1 month ago
parent
commit
c5efe6beda
  1. 28
      src/mixins/labelPrintTemplates.js
  2. 3
      src/views/modules/yieldReport/com_produce_report_normal.vue
  3. 148
      src/views/modules/yieldReport/com_separate_roll.vue

28
src/mixins/labelPrintTemplates.js

@ -127,42 +127,44 @@ export default {
LODOP.SET_PRINT_STYLEA(qrIndex, "QRCodeErrorLevel", "M"); 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行:编码 // 第1行:编码
const text1 = LODOP.ADD_PRINT_TEXT('3mm', startX, textWidth, '3mm', `编码:${printData.partNo || ''}`); 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, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text1, "FontSize", 8);
LODOP.SET_PRINT_STYLEA(text1, "FontSize", 7);
// 第2行:卷号 // 第2行:卷号
const text2 = LODOP.ADD_PRINT_TEXT('7mm', startX, textWidth, '3mm', `卷号:${printData.rollNo || ''}`); 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, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text2, "FontSize", 8);
LODOP.SET_PRINT_STYLEA(text2, "FontSize", 7);
// 第3行:良品 + 不良品(左右分布) // 第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, "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, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text4, "FontSize", 8);
LODOP.SET_PRINT_STYLEA(text4, "FontSize", 7);
// 第4行:总数 + 良率(左右分布) // 第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, "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, "FontName", "Microsoft YaHei");
LODOP.SET_PRINT_STYLEA(text6, "FontSize", 8);
LODOP.SET_PRINT_STYLEA(text6, "FontSize", 7);
}, },
// A003 标签打印(70mm x 20mm)- 绑定用 // A003 标签打印(70mm x 20mm)- 绑定用

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

@ -3127,6 +3127,7 @@ export default {
scheduledDate: '', scheduledDate: '',
shiftNo: '', shiftNo: '',
partNo: '', partNo: '',
buNo: '',
workCenterNo: '', workCenterNo: '',
workCenterDesc: '', workCenterDesc: '',
resourceDesc: '', resourceDesc: '',
@ -3935,6 +3936,7 @@ export default {
this.scheduleData.itemNo = data.row.itemNo; this.scheduleData.itemNo = data.row.itemNo;
this.scheduleData.resourceId = data.row.resourceId; this.scheduleData.resourceId = data.row.resourceId;
this.scheduleData.partNo = data.row.partNo; this.scheduleData.partNo = data.row.partNo;
this.scheduleData.buNo = data.row.buNo;
this.scheduleData.partDesc = data.row.partDesc; this.scheduleData.partDesc = data.row.partDesc;
this.scheduleData.planStartTime = data.row.planStartTime; this.scheduleData.planStartTime = data.row.planStartTime;
this.scheduleData.planFinishTime = data.row.planFinishTime; this.scheduleData.planFinishTime = data.row.planFinishTime;
@ -4093,6 +4095,7 @@ export default {
this.scheduleData.itemNo = data.row.itemNo; this.scheduleData.itemNo = data.row.itemNo;
this.scheduleData.resourceId = data.row.resourceId; this.scheduleData.resourceId = data.row.resourceId;
this.scheduleData.partNo = data.row.partNo; this.scheduleData.partNo = data.row.partNo;
this.scheduleData.buNo = data.row.buNo;
this.scheduleData.partDesc = data.row.partDesc; this.scheduleData.partDesc = data.row.partDesc;
this.scheduleData.planStartTime = data.row.planStartTime; this.scheduleData.planStartTime = data.row.planStartTime;
this.scheduleData.planFinishTime = data.row.planFinishTime; this.scheduleData.planFinishTime = data.row.planFinishTime;

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

@ -245,10 +245,19 @@
saveSysLanguageList saveSysLanguageList
} from "@/api/sysLanguage.js"; } 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'; var functionId = 'C10000004';
export default { export default {
name: "com_separate_roll", name: "com_separate_roll",
mixins: [labelPrintTemplates],
data() { data() {
return { return {
titleCon: '创建分卷', titleCon: '创建分卷',
@ -263,6 +272,7 @@ export default {
scheduledDate: '', scheduledDate: '',
shiftNo: '', shiftNo: '',
partNo: '', partNo: '',
buNo: '',
workCenterNo: '', workCenterNo: '',
workCenterDesc: '', workCenterDesc: '',
resourceDesc: '', resourceDesc: '',
@ -937,9 +947,9 @@ export default {
// //
this.$message.success('创建分卷完成!') this.$message.success('创建分卷完成!')
//
// 使
if (allPrintList.length > 0) { 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; // A001A002A003
// 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() { async saveMultiLanguage() {
// button label title // button label title

Loading…
Cancel
Save