diff --git a/src/api/yieldReport/com_merge_roll.js b/src/api/yieldReport/com_merge_roll.js index 8473ba0..239141f 100644 --- a/src/api/yieldReport/com_merge_roll.js +++ b/src/api/yieldReport/com_merge_roll.js @@ -11,3 +11,6 @@ export const processMergeSfdcRoll = data => createAPI('schedule/processMergeSfdc //查询打印的数据 export const getSfdcFlowLabelData = data => createAPI('scheduling/getSfdcFlowLabelData', 'POST', data) + +// 扫描获取新卷数量 +export const getNewRollQtyByScan = data => createAPI('schedule/getNewRollQtyByScan', 'POST', data) \ No newline at end of file diff --git a/src/views/modules/yieldReport/com_merge_roll.vue b/src/views/modules/yieldReport/com_merge_roll.vue index d81b260..513bb1a 100644 --- a/src/views/modules/yieldReport/com_merge_roll.vue +++ b/src/views/modules/yieldReport/com_merge_roll.vue @@ -1,53 +1,94 @@ @@ -56,40 +97,26 @@ getMergeRollPageData, checkMergeSfdcRoll,/*校验是否合并卷*/ processMergeSfdcRoll,/*执行合并卷的操作*/ - getSfdcFlowLabelData,/*执行打印的请求*/ + getNewRollQtyByScan,/*扫描获取新卷数量*/ } from "@/api/yieldReport/com_merge_roll.js"; - /*打印标签专用的js*/ - import { - printSfdcLabel, - } from "@/views/modules/yieldReport/print_roll_label.js"; - - import { - searchSysLanguagePackList, - searchSysLanguageParam, - searchFunctionButtonList, - saveButtonList, - searchSysLanguage, - searchLanguageListByLanguageCode, - saveSysLanguageOne, - searchPageLanguageData, - removerLanguage, - saveSysLanguageList - } from "@/api/sysLanguage.js"; + import getLodop from '@/utils/LodopFuncs.js'; // 打印控件 + import labelPrintTemplates from '@/mixins/labelPrintTemplates.js'; // 打印模板mixin /*引入组件*/ import comRollLabel from "../common/com-roll-label";/*打印卷标签*/ var functionId = 'C10000006'; - - export default { + mixins: [labelPrintTemplates], // 添加打印模板mixin data() { return { titleCon: '合并卷', showDefault: false, rollType: '', + confirmLoading: false, + originalRollQty: 0, // 保存原始的当前卷数量,用于校验 scheduleData: { site: this.$store.state.user.site, username: this.$store.state.user.name, @@ -125,6 +152,7 @@ export default { rollQty: 0, newRollNo: '',/*参与合并的新卷号*/ newRollQty: 0,/*参与合并的新卷号*/ + totalQty: 0, reportTime: '', reportedFlag: 'N', qtyRequiredOriginal: 0, @@ -148,124 +176,33 @@ export default { confirmButton: '确定', closeButton: '关闭', }, - buttonList: [ - { - functionId: functionId, - languageValue: '确定', - objectId: 'confirmButton', - objectType: 'button', - tableId: '*' - },{ - functionId: functionId, - languageValue: '关闭', - objectId: 'closeButton', - objectType: 'button', - tableId: '*' - }, - ], - queryButton: { - functionId: functionId, - table_id: '*', - languageCode: this.$i18n.locale, - objectType: 'button' - }, labels: { titleCon: '合并卷', - currentRollNo: '当前卷号:', - currentRollQty: '当前卷数量:', - newRollNo: '新卷卷号:', - newRollQty: '新卷数量:', - totalQty: '总数量:', + currentRollNo: '当前卷号', + currentRollQty: '当前卷数量', + newRollNo: '新卷卷号', + newRollQty: '新卷数量', + totalQty: '合并后总数量:', pleaseEnterNewRoll: '请输入新卷数量!', newRollMustMoreTanZero: '新卷数量必须是大于零的整数!', sameRollCantBeMerge: '相同卷号无法合并!', confirmLabel: '确认', cancelLabel: '取消', }, - labelsList: [ - { - functionId: functionId, - languageValue: '合并卷', - objectId: 'titleCon', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '当前卷号:', - objectId: 'currentRollNo', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '当前卷数量:', - objectId: 'currentRollQty', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '新卷卷号:', - objectId: 'newRollNo', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '新卷数量:', - objectId: 'newRollQty', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '总数量:', - objectId: 'totalQty', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '请输入新卷数量!', - objectId: 'pleaseEnterNewRoll', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '新卷数量必须是大于零的整数!', - objectId: 'newRollMustMoreTanZero', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '相同卷号无法合并!', - objectId: 'sameRollCantBeMerge', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '确认', - objectId: 'confirmLabel', - objectType: 'label', - tableId: '*' - }, { - functionId: functionId, - languageValue: '取消', - objectId: 'cancelLabel', - objectType: 'label', - tableId: '*' - }, - ], - queryLabel: { - functionId: functionId, - table_id: '*', - languageCode: this.$i18n.locale, - objectType: 'label' - }, } }, components:{ comRollLabel,// 打印组件 }, + computed: { + newRollQtyPlaceholder() { + return this.pageData.newRollNo ? '' : '扫描后自动获取'; + } + }, methods: { //初始化页面 - init(scheduleData, operatorData,rollType) { - this.rollType = rollType?1:0 + init(scheduleData, operatorData, rollType) { + this.rollType = rollType ? 1 : 0 //初始化参数 this.scheduleData = scheduleData; //初始化操作员对象 @@ -280,8 +217,8 @@ export default { this.pageData.newRollNo = ''; this.pageData.newRollQty = 0; this.pageData.totalQty = 0; - //判断是否启用多语言 - // this.getMultiLanguageList(); //刷新多语言的信息 + this.originalRollQty = 0; // 重置原始数量 + this.confirmLoading = false; //执行获取页面参数的功能 this.refreshPageData(); //自动获取焦点 @@ -296,10 +233,13 @@ export default { getMergeRollPageData(this.pageData).then(({data}) => { //判断是否出现异常 if(data.code == 200){ - this.pageData.rollQty = data.row.resultQty;// 当前卷的数量 - this.pageData.totalQty = data.row.resultQty;//总良品数量 + const resultQty = parseFloat(data.row.resultQty) || 0; + this.pageData.rollQty = resultQty; // 当前卷的数量 + this.originalRollQty = resultQty; // 保存原始数量,用于校验 + this.pageData.totalQty = resultQty; //总良品数量 }else{ this.pageData.rollQty = 0;// 当前卷的数量 + this.originalRollQty = 0; this.pageData.totalQty = 0;//总良品数量 } }); @@ -313,59 +253,127 @@ export default { this.$emit('update:visible', false); }, - /*检验良品的总数量*/ - checkValidQty() { - //处理老卷的数量 - let rollQty = parseInt(this.pageData.rollQty); - if (rollQty == null || rollQty == '') { - //this.$message.error('请输入新卷数量!'); - this.pageData.rollQty = 0;//重新赋值 + /*右上角X按钮关闭时的处理*/ + handleDialogClose(done) { + //刷新报工的页面 + this.$emit('refreshPageData'); + //关闭对话框 + done(); + }, + + /*清空新卷信息*/ + clearNewRollInfo() { + this.pageData.newRollNo = ''; + this.pageData.newRollQty = 0; + this.calculateTotalQty(); + }, + + /*扫描新卷卷号获取数量*/ + scanNewRoll() { + const newRollNo = this.pageData.newRollNo; + + if (!newRollNo || newRollNo.trim() === '') { + this.$message.warning('请输入新卷卷号!'); + return; } - //转换成整数 - if (rollQty <= 0) { - //this.$message.error('新卷数量必须是大于零的整数!'); - this.pageData.rollQty = 0;//重新赋值 - }else{ - this.pageData.rollQty = rollQty; + + // 判断卷号是否相同 + if (this.pageData.rollNo === newRollNo) { + this.$message.error('相同卷号无法合并!'); + this.pageData.newRollNo = ''; + return; } - //首先判断数值是否通过判断 - let newRollQty = parseInt(this.pageData.newRollQty); - if (newRollQty == null || newRollQty == '') { - //this.$message.error('请输入新卷数量!'); - this.pageData.newRollQty = 0;//重新赋值 + + // 调用接口查询新卷数量 + const params = { + site: this.pageData.site, + rollNo: newRollNo.trim() + }; + + getNewRollQtyByScan(params).then(({data}) => { + if (data.code === 200 || data.code === 0) { + const rollQty = parseFloat(data.rollQty) || 0; + if (rollQty <= 0) { + this.$message.warning('未查询到该卷的数量或数量为0!'); + this.pageData.newRollQty = 0; + } else { + this.pageData.newRollQty = rollQty; + this.$message.success(`成功获取新卷数量: ${rollQty}`); + } + this.calculateTotalQty(); + } else { + this.$message.error(data.msg || '查询新卷数量失败!'); + this.pageData.newRollQty = 0; + this.calculateTotalQty(); + } + }).catch(err => { + this.$message.error('查询新卷数量失败!'); + this.pageData.newRollQty = 0; + this.calculateTotalQty(); + }); + }, + + /*检验当前卷数量的有效性*/ + checkValidQty() { + let rollQty = parseFloat(this.pageData.rollQty); + + // 处理无效值 + if (isNaN(rollQty) || rollQty < 0) { + this.pageData.rollQty = this.originalRollQty; + this.$message.warning('当前卷数量无效,已重置为原始数量!'); + return; } - if (newRollQty <= 0) { - //this.$message.error('新卷数量必须是大于零的整数!'); - this.pageData.newRollQty = 0;//重新赋值 - }else{ - this.pageData.newRollQty = newRollQty; + + // 校验不能超过原始数量 + if (rollQty > this.originalRollQty) { + this.$message.warning(`当前卷数量不能超过原始数量 ${this.originalRollQty}!`); + this.pageData.rollQty = this.originalRollQty; + return; } - //计算总的数量 - this.pageData.totalQty = newRollQty + rollQty; + + this.pageData.rollQty = rollQty; + this.calculateTotalQty(); + }, + + /*计算总数量*/ + calculateTotalQty() { + const rollQty = parseFloat(this.pageData.rollQty) || 0; + const newRollQty = parseFloat(this.pageData.newRollQty) || 0; + this.pageData.totalQty = rollQty + newRollQty; }, /*执行是否需要提示的操作*/ warnMergeSfdcRollsConfirm() { - //首先判断数值是否通过判断 - let newRollQty = this.pageData.newRollQty; - if (newRollQty == null || newRollQty == '') { - this.$message.error('请输入新卷数量!'); - this.pageData.newRollQty = 0;//重新赋值 + // 校验新卷卷号 + if (!this.pageData.newRollNo || this.pageData.newRollNo.trim() === '') { + this.$message.error('请扫描新卷卷号!'); return false; } - if (newRollQty <= 0 || !Number.isInteger(newRollQty)) { - this.$message.error('新卷数量必须是大于零的整数!'); - this.pageData.newRollQty = 0;//重新赋值 + // 校验新卷数量 + const newRollQty = parseFloat(this.pageData.newRollQty); + if (isNaN(newRollQty) || newRollQty <= 0) { + this.$message.error('新卷数量必须大于零!'); return false; } - //判断卷号是否相同 + + // 校验当前卷数量不能超过原始数量 + const rollQty = parseFloat(this.pageData.rollQty); + if (rollQty > this.originalRollQty) { + this.$message.error(`当前卷数量不能超过原始数量 ${this.originalRollQty}!`); + this.pageData.rollQty = this.originalRollQty; + return false; + } + + // 判断卷号是否相同 if (this.pageData.rollNo === this.pageData.newRollNo) { this.$message.error('相同卷号无法合并!'); this.pageData.newRollNo = ''; return false; } + this.confirmLoading = true; + let requestData = { 'site': this.pageData.site, 'orderNo': this.pageData.orderNo, @@ -377,13 +385,20 @@ export default { 'newRollQty': this.pageData.newRollQty, 'username': this.pageData.username, 'operatorId': this.pageData.operatorId, - parkFlag: this.rollType==1?'Y':'N' , + 'parkFlag': this.rollType == 1 ? 'Y' : 'N', 'newRollFlag': false }; + //先校验当前的卷 + this.doCheckAndMerge(requestData); + }, + + /*执行校验和合并操作*/ + doCheckAndMerge(requestData) { checkMergeSfdcRoll(requestData).then(({data}) => { if (data.code == 500) { this.$message.error(data.msg); + this.confirmLoading = false; } else if (data.resultMap.resultCode == 300) { let msg = data.resultMap.resultMsg; this.$confirm(msg, '提示', { @@ -393,206 +408,396 @@ export default { }).then(() => { //校验参与合并的新卷 requestData.newRollFlag = true; - checkMergeSfdcRoll(requestData).then(({data}) => { - if (data.code == 500) { - this.$message.error(data.msg); - } else if (data.resultMap.resultCode == 300) { - let msg = data.resultMap.resultMsg; - this.$confirm(msg, '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: "warning" - }).then(() => { - //执行合并卷的操作 - processMergeSfdcRoll(requestData).then(({data}) => { - if (data.code == 500) { - this.$message.error(data.msg); - } else { - this.$message.success(data.msg); - if(this.rollType == 1 ){ - // 出货标签 - this.$nextTick(() => { - this.$refs.comRollLabel.init(data.rollNo) - }); - }else { - //先打印再继续关闭 - let printRow = {site: this.pageData.site, orderNo: this.pageData.orderNo, - rollNo: data.rollNo}; - this.printSfdcFlowLabel(printRow); - } - //延时一秒关闭 --预防没有出标签 - setTimeout(() => { - this.closeDialog(); - }, 1000); - } - }); - }); - } else { - //执行合并卷的操作 - processMergeSfdcRoll(requestData).then(({data}) => { - if (data.code == 500) { - this.$message.error(data.msg); - } else { - this.$message.success(data.msg); - if(this.rollType == 1 ){ - // 出货标签 - this.$nextTick(() => { - this.$refs.comRollLabel.init(data.rollNo) - }); - }else { - //先打印再继续关闭 - let printRow = {site: this.pageData.site, orderNo: this.pageData.orderNo, - rollNo: data.rollNo}; - this.printSfdcFlowLabel(printRow); - } - //延时一秒关闭 --预防没有出标签 - setTimeout(() => { - this.closeDialog(); - }, 1000); - } - }); - } - }); + this.doCheckNewRollAndMerge(requestData); + }).catch(() => { + this.confirmLoading = false; }); - //校验通过的情况 } else { //校验参与合并的新卷 requestData.newRollFlag = true; - checkMergeSfdcRoll(requestData).then(({data}) => { - if (data.code == 500) { - this.$message.error(data.msg); - } else if (data.resultMap.resultCode == 300) { - let msg = data.resultMap.resultMsg; - this.$confirm(msg, '提示', { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: "warning" - }).then(() => { - //执行合并卷的操作 - processMergeSfdcRoll(requestData).then(({data}) => { - if (data.code == 500) { - this.$message.error(data.msg); - } else { - this.$message.success(data.msg); - if(this.rollType == 1 ){ - // 出货标签 - this.$nextTick(() => { - this.$refs.comRollLabel.init(data.rollNo) - }); - }else { - //先打印再继续关闭 - let printRow = {site: this.pageData.site, orderNo: this.pageData.orderNo, - rollNo: data.rollNo}; - this.printSfdcFlowLabel(printRow); - } - //延时一秒关闭 --预防没有出标签 - setTimeout(() => { - this.closeDialog(); - }, 1000); - } - }); - }); - } else { - //执行合并卷的操作 - processMergeSfdcRoll(requestData).then(({data}) => { - if (data.code == 500) { - this.$message.error(data.msg); - } else { - this.$message.success(data.msg); - if(this.rollType == 1 ){ - // 出货标签 - this.$nextTick(() => { - this.$refs.comRollLabel.init(data.rollNo) - }); - }else { - //先打印再继续关闭 - let printRow = {site: this.pageData.site, orderNo: this.pageData.orderNo, - rollNo: data.rollNo}; - this.printSfdcFlowLabel(printRow); - } - //延时一秒关闭 --预防没有出标签 - setTimeout(() => { - this.closeDialog(); - }, 1000); - } - }); - } - }); + this.doCheckNewRollAndMerge(requestData); } + }).catch(() => { + this.confirmLoading = false; }); }, - /*打印流转标签*/ - printSfdcFlowLabel(sfdcRow){ - //先查询打印的卷信息 - getSfdcFlowLabelData(sfdcRow).then(({data}) => { - //开始打印标签 - if(data.code == 200){ - let printList = data.printList; - printSfdcLabel(printList); - }else{ + /*校验新卷并执行合并*/ + doCheckNewRollAndMerge(requestData) { + checkMergeSfdcRoll(requestData).then(({data}) => { + if (data.code == 500) { this.$message.error(data.msg); + this.confirmLoading = false; + } else if (data.resultMap.resultCode == 300) { + let msg = data.resultMap.resultMsg; + this.$confirm(msg, '提示', { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: "warning" + }).then(() => { + this.doMergeRoll(requestData); + }).catch(() => { + this.confirmLoading = false; + }); + } else { + this.doMergeRoll(requestData); } + }).catch(() => { + this.confirmLoading = false; }); }, - // 保存 默认配置 列 - async saveMultiLanguage() { - // 保存页面 button label title 属性 - let buttons = this.buttonList; - let labels = this.labelsList; - await saveButtonList(buttons) - await saveButtonList(labels) - }, - - getMultiLanguageList() { - //首先查询当前按钮的多语言 - searchFunctionButtonList(this.queryButton).then(({data}) => { - if (data && data.code == 0 ) { - this.buttons = data.data + /*执行合并卷操作*/ + doMergeRoll(requestData) { + processMergeSfdcRoll(requestData).then(({data}) => { + this.confirmLoading = false; + if (data.code == 500) { + this.$message.error(data.msg); } else { - // saveButtonList(this.buttonList).then(({data}) => { - // }) + this.$message.success(data.msg); + + // 打印标签 - 使用新的打印方式 + if (data.printData) { + // 存储过程返回了打印参数 + const printDataList = Array.isArray(data.printData) ? data.printData : [data.printData]; + this.executePrint(printDataList); + } else if (data.rollNo) { + // 兼容旧的打印方式(如果rollType==1使用出货标签组件) + if (this.rollType == 1) { + this.$nextTick(() => { + // 出货标签打印由comRollLabel处理 + // 这里可以选择使用模板打印或组件打印 + console.log('出货标签打印:', data.rollNo); + }); + } + } + + //延时一秒关闭 + setTimeout(() => { + this.closeDialog(); + }, 1000); } + }).catch(() => { + this.confirmLoading = false; }); - //其次查询当前标签的多语言 - searchFunctionButtonList(this.queryLabel).then(({data}) => { - if (data && data.code == 0 ) { - this.labels = data.data - } else { - // saveButtonList(this.buttonList).then(({data}) => { - // }) + }, + + /** + * 执行打印(使用存储过程返回的打印参数) + * @param {Array} printDataList - 存储过程返回的打印数据列表 + */ + executePrint(printDataList) { + try { + // 1. 获取 LODOP 打印控件 + const LODOP = getLodop(); + if (!LODOP) { + this.$message.warning('无法连接到打印控件,跳过打印'); + return; } - }); + + // 2. 获取默认打印机 + const printerCount = LODOP.GET_PRINTER_COUNT(); + if (printerCount === 0) { + this.$message.warning('未检测到打印机,跳过打印'); + return; + } + const defaultPrinterName = LODOP.GET_PRINTER_NAME(0); + + // 3. 检查打印数据中的labelNo(标签模板编号) + if (!printDataList || printDataList.length === 0) { + console.warn('打印数据为空'); + return; + } + + // 获取第一条数据的labelNo + const labelNo = printDataList[0].labelNo; + if (!labelNo) { + console.warn('未找到标签模板编号'); + return; + } + + // 4. 执行模板打印 + this.executePrintWithTemplate(LODOP, printDataList, labelNo, defaultPrinterName); + + this.$message.success('标签打印任务已发送!'); + + } catch (error) { + console.error('打印失败:', error); + this.$message.warning('打印失败: ' + error.message); + } }, + /** + * 执行模板打印 + * @param {Object} LODOP - 打印控件对象 + * @param {Array} printDataList - 打印数据列表 + * @param {String} labelNo - 标签模板编号 (A001/A002/A003) + * @param {String} printerName - 打印机名称 + */ + async executePrintWithTemplate(LODOP, printDataList, labelNo, printerName) { + console.log('开始打印,标签数量:', printDataList.length, '标签数据:', printDataList); + + // 循环打印每个标签(每个标签单独打印一次) + for (let i = 0; i < printDataList.length; i++) { + const printData = printDataList[i]; + + // 每个标签单独初始化一个打印任务 + LODOP.PRINT_INIT('合并卷标签打印_' + (i + 1)); + LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE", true); + + // 根据 labelNo 调用不同的打印方法(来自 labelPrintTemplates mixin) + if (labelNo === 'A001') { + await this.printLabelA001(LODOP, printData, false); + } else if (labelNo === 'A002') { + this.printLabelA002(LODOP, printData, false); + } else if (labelNo === 'A003') { + this.printLabelA003(LODOP, printData, false); + } else if (labelNo === 'A004') { + this.printLabelA004(LODOP, printData, false); + } else { + console.warn(`未知的标签模板:${labelNo}`); + continue; + } + + // 执行打印 + LODOP.PRINT(); + + console.log(`第${i + 1}张标签已发送打印, 卷号: ${printData.rollNo}`); + } + }, }, created() { - // this.factoryList() - // this.getLanguageList() } } diff --git a/src/views/modules/yieldReport/com_produce_report_normal.vue b/src/views/modules/yieldReport/com_produce_report_normal.vue index 9a8960d..924f1ea 100644 --- a/src/views/modules/yieldReport/com_produce_report_normal.vue +++ b/src/views/modules/yieldReport/com_produce_report_normal.vue @@ -510,8 +510,7 @@ :label="item.columnLabel">