|
|
|
@ -128,10 +128,13 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import { getStockInfoByLabelCode, splitLabel, mergeLabel } from "@/api/label-split-merge/label-split-merge.js"; |
|
|
|
import { getStockInfoByLabelCode, splitLabel, mergeLabel, getUserDefaultPrinter } from "@/api/label-split-merge/label-split-merge.js"; |
|
|
|
import { getCurrentWarehouse } from '@/utils' |
|
|
|
import getLodop from '@/utils/LodopFuncs.js'; |
|
|
|
import labelPrintTemplates from '@/mixins/labelPrintTemplates.js'; |
|
|
|
|
|
|
|
export default { |
|
|
|
mixins: [labelPrintTemplates], |
|
|
|
data() { |
|
|
|
return { |
|
|
|
scanCode: '', |
|
|
|
@ -227,10 +230,17 @@ export default { |
|
|
|
status: this.currentLabel.status, |
|
|
|
statusTb: this.currentLabel.statusTb |
|
|
|
}; |
|
|
|
splitLabel(params).then(({ data }) => { |
|
|
|
splitLabel(params).then(async ({ data }) => { |
|
|
|
if (data && data.code === 0) { |
|
|
|
this.$message.success(`拆分成功!新标签: ${data.data.newLabelCode}`); |
|
|
|
this.closeSplitDialog(); |
|
|
|
|
|
|
|
// 自动打印标签(拆分打印两张:原标签和新标签) |
|
|
|
const printList = data.data.printList || []; |
|
|
|
if (printList.length > 0) { |
|
|
|
await this.printLabelsWithTemplate(printList); |
|
|
|
} |
|
|
|
|
|
|
|
// 刷新当前标签信息 |
|
|
|
this.getStockInfo(this.currentLabel.labelCode); |
|
|
|
} else { |
|
|
|
@ -311,10 +321,17 @@ export default { |
|
|
|
statusTb: this.currentLabel.statusTb |
|
|
|
}; |
|
|
|
|
|
|
|
mergeLabel(mergeParams).then(({ data }) => { |
|
|
|
mergeLabel(mergeParams).then(async ({ data }) => { |
|
|
|
if (data && data.code === 0) { |
|
|
|
this.$message.success('合并成功!'); |
|
|
|
this.closeMergeDialog(); |
|
|
|
|
|
|
|
// 自动打印标签(合并只打印一张:源标签/合并后的标签) |
|
|
|
const printList = data.data.printList || []; |
|
|
|
if (printList.length > 0) { |
|
|
|
await this.printLabelsWithTemplate(printList); |
|
|
|
} |
|
|
|
|
|
|
|
// 清空当前标签信息,因为已经合并出库 |
|
|
|
this.currentLabel = {}; |
|
|
|
// 聚焦扫描框 |
|
|
|
@ -338,6 +355,120 @@ export default { |
|
|
|
console.error('获取目标标签信息失败:', error); |
|
|
|
this.$message.error('获取目标标签信息失败'); |
|
|
|
}); |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* 获取用户默认打印机配置 |
|
|
|
*/ |
|
|
|
async fetchUserDefaultPrinter(labelNo) { |
|
|
|
try { |
|
|
|
const params = { |
|
|
|
userName: localStorage.getItem('userName'), |
|
|
|
labelNo: labelNo || '' |
|
|
|
}; |
|
|
|
const { data } = await getUserDefaultPrinter(params); |
|
|
|
if (data && data.code === 0 && data.printerName) { |
|
|
|
return { |
|
|
|
printerName: data.printerName, |
|
|
|
printerIp: data.printerIp, |
|
|
|
labelNo: data.labelNo |
|
|
|
}; |
|
|
|
} |
|
|
|
return null; |
|
|
|
} catch (error) { |
|
|
|
console.error('获取用户打印机配置失败:', error); |
|
|
|
return null; |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* 使用模板打印标签 |
|
|
|
* @param {Array} printList - 打印数据列表(存储过程UspPartLabelTemplate返回) |
|
|
|
*/ |
|
|
|
async printLabelsWithTemplate(printList) { |
|
|
|
try { |
|
|
|
// 1. 获取 LODOP 打印控件 |
|
|
|
const LODOP = getLodop(); |
|
|
|
if (!LODOP) { |
|
|
|
console.warn('无法连接到打印控件,跳过打印'); |
|
|
|
this.$message.warning('无法连接到打印控件,请确保已安装并启动打印服务'); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 2. 检测打印机数量 |
|
|
|
const printerCount = LODOP.GET_PRINTER_COUNT(); |
|
|
|
if (printerCount === 0) { |
|
|
|
console.warn('未检测到打印机,跳过打印'); |
|
|
|
this.$message.warning('未检测到打印机'); |
|
|
|
return; |
|
|
|
} |
|
|
|
|
|
|
|
// 3. 获取用户配置的打印机 |
|
|
|
const firstLabel = printList[0] || {}; |
|
|
|
const printerConfig = await this.fetchUserDefaultPrinter(firstLabel.labelNo); |
|
|
|
|
|
|
|
let printerName = null; |
|
|
|
if (printerConfig && printerConfig.printerName) { |
|
|
|
printerName = printerConfig.printerName; |
|
|
|
console.log('使用用户配置的打印机:', printerName); |
|
|
|
} else { |
|
|
|
console.log('未找到用户打印机配置,使用默认打印机'); |
|
|
|
} |
|
|
|
|
|
|
|
// 4. 执行打印 |
|
|
|
this.executePrintWithTemplate(LODOP, printList, printerName); |
|
|
|
|
|
|
|
this.$message.success('标签打印任务已发送!'); |
|
|
|
|
|
|
|
} catch (error) { |
|
|
|
console.error('模板打印失败:', error); |
|
|
|
this.$message.warning('标签打印失败,请手动打印'); |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
/** |
|
|
|
* 执行模板打印 |
|
|
|
* @param {Object} LODOP - 打印控件对象 |
|
|
|
* @param {Array} printDataList - 打印数据列表 |
|
|
|
* @param {String} printerName - 用户配置的打印机名称(可选) |
|
|
|
*/ |
|
|
|
executePrintWithTemplate(LODOP, printDataList, printerName) { |
|
|
|
console.log('开始打印,标签数量:', printDataList.length, '打印机:', printerName || '默认', '标签数据:', printDataList); |
|
|
|
|
|
|
|
// 循环打印每个标签(每个标签单独打印一次) |
|
|
|
for (let i = 0; i < printDataList.length; i++) { |
|
|
|
const printData = printDataList[i]; |
|
|
|
|
|
|
|
// 获取标签模板编号(存储过程返回) |
|
|
|
const labelNo = printData.labelNo; |
|
|
|
|
|
|
|
// 每个标签单独初始化一个打印任务 |
|
|
|
LODOP.PRINT_INIT('拆合组托标签打印_' + (i + 1)); |
|
|
|
|
|
|
|
// 设置用户配置的打印机(如果有) |
|
|
|
if (printerName) { |
|
|
|
LODOP.SET_PRINTER_INDEX(printerName); |
|
|
|
} |
|
|
|
|
|
|
|
// 设置打印模式 |
|
|
|
LODOP.SET_PRINT_MODE("PRINT_NOCOLLATE", true); |
|
|
|
|
|
|
|
// 根据标签模板编号调用对应的打印方法 |
|
|
|
if (labelNo === 'A001') { |
|
|
|
this.printLabelA001(LODOP, printData, false); |
|
|
|
} else if (labelNo === 'A002') { |
|
|
|
this.printLabelA002(LODOP, printData, false); |
|
|
|
} else if (labelNo === 'A003') { |
|
|
|
this.printLabelA003(LODOP, printData, false); |
|
|
|
} else { |
|
|
|
// 默认使用 A001 模板 |
|
|
|
console.warn('未知标签模板:', labelNo, ',使用默认模板 A001'); |
|
|
|
this.printLabelA001(LODOP, printData, false); |
|
|
|
} |
|
|
|
|
|
|
|
// 执行打印 |
|
|
|
LODOP.PRINT(); |
|
|
|
} |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
|