diff --git a/src/views/modules/yieldReport/com_abnormal_continue_roll.vue b/src/views/modules/yieldReport/com_abnormal_continue_roll.vue index b430f92..8854059 100644 --- a/src/views/modules/yieldReport/com_abnormal_continue_roll.vue +++ b/src/views/modules/yieldReport/com_abnormal_continue_roll.vue @@ -137,7 +137,16 @@ import { abnormalContinueRoll } from '@/api/yieldReport/abnormalRoll.js'; +import { + getPartLabelTemplateList, + callUspPartLabelTemplate +} from '@/api/wms/wms'; + +import getLodop from '@/utils/LodopFuncs.js'; +import labelPrintTemplates from '@/mixins/labelPrintTemplates.js'; + export default { + mixins: [labelPrintTemplates], data() { return { titleCon: '异常续卷', @@ -147,6 +156,8 @@ export default { seqNo: '', orderNo: '', itemNo: 0, + buNo: '', + partNo: '', }, operatorData: { site: this.$store.state.user.site, @@ -272,8 +283,9 @@ export default { }; }, - // 续卷操作 - continueRoll() { + // 续卷操作(类似产量报告,只有一卷) + async continueRoll() { + console.log(this.scheduleData) // 校验数量必须大于等于原始数量 for (let i = 0; i < this.rowDataList.length; i++) { const currentRow = this.rowDataList[i]; @@ -306,22 +318,52 @@ export default { } } - // 构建提交数据 - const submitData = { - processedBy: this.operatorData.operatorId || this.operatorData.username, - rowDataList: this.rowDataList.map(row => ({ - id: row.id, - goodQty: row.goodQty, - defectQty: row.defectQty, - surfaceLossQty: row.surfaceLossQty, - poorPerformanceQty: row.poorPerformanceQty, - remark: row.remark || '' - })) - }; + try { + // 计算总良品数(所有行良品数相加) + let totalRollQty = 0; + let rollRemark = ''; + for (let i = 0; i < this.rowDataList.length; i++) { + totalRollQty += parseFloat(this.rowDataList[i].goodQty) || 0; + if (i === 0) { + rollRemark = this.rowDataList[i].remark || ''; + } + } + + // 构建提交数据 + const submitData = { + site: this.scheduleData.site, + orderNo: this.scheduleData.orderNo, + itemNo: this.scheduleData.itemNo, + seqNo: this.scheduleData.seqNo, + batchRollNo: this.selectedRollNo.currentRollNo, // 主卷号 + rollNo: this.selectedRollNo.newRollNo, // 分卷卷号 + rollQty: totalRollQty, // 续卷数量 + userid: this.operatorData.operatorId || this.operatorData.username, + remark: rollRemark, + // 用于更新缓存表的数据 + processedBy: this.operatorData.operatorId || this.operatorData.username, + rowDataList: this.rowDataList.map(row => ({ + id: row.id, + rowBumber: row.rowBumber, + goodQty: row.goodQty, + defectQty: row.defectQty, + surfaceLossQty: row.surfaceLossQty, + poorPerformanceQty: row.poorPerformanceQty, + totalQty: (parseFloat(row.goodQty) || 0) + (parseFloat(row.defectQty) || 0), + remark: row.remark || '' + })) + }; + + const { data } = await abnormalContinueRoll(submitData); - abnormalContinueRoll(submitData).then(({ data }) => { if (data.code === 0) { this.$message.success('续卷成功!'); + + // 打印标签(和产量报告一样) + if (data.printList && data.printList.length > 0) { + await this.printLabelsWithTemplate(data.printList); + } + // 刷新数据 this.loadRollNoList(); this.selectedRollNo = { currentRollNo: '', newRollNo: '' }; @@ -332,9 +374,126 @@ export default { } else { this.$message.error(data.msg || '续卷失败'); } - }).catch(err => { + } catch (err) { this.$message.error('续卷失败:' + (err.message || '未知错误')); - }); + } + }, + + /** + * 使用模板打印标签(和创建分卷一样) + * @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; + + // 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', + 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('模板打印失败'); + } + }, + + /** + * 执行模板打印 + */ + 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; + 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(); }, // 关闭对话框