-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -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">