Commit 6f9c9b9e by wusiyi

Merge branch 'fix_1001679' into release_v2.31.0

parents 12c38184 157d3e5d
......@@ -2903,101 +2903,108 @@ const handleSeedingWall = (type: 'print' | 'sort') => {
podOrderVisible.value = true
}
const printOrder = async (
/** LODOP 单例不可并发,打印串行 */
let printOrderChain: Promise<void> = Promise.resolve()
const printOrder = (
data: OrderData,
callback: (status: boolean) => void,
) => {
const lodop = getCLodop(null, null)
if (!lodop) return
lodop.PRINT_INIT('打印内容')
const printerIndex = lodop.SET_PRINTER_INDEX(sheetPrinter.value)
console.log(
'printerIndex',
printerIndex,
`sheetPrinter.value:${sheetPrinter.value}`,
)
if (!printerIndex) {
ElMessage.error('打印机设置失败')
callback && callback(false)
return
}
if (data.filePath) {
const strURL = filePath + data.filePath
const isHttpsPdf = /(https):\/\/([^/]+)/i.test(strURL)
console.log('[printOrder] label source', {
id: data.id,
hasFilePath: !!data.filePath,
hasFileData: !!data.fileData,
isHttpsPdf,
strURL,
})
const pdfPayload = isHttpsPdf ? downloadPDF(strURL) : strURL
console.log('[printOrder] pdf payload meta', {
mode: isHttpsPdf ? 'base64' : 'url',
length: pdfPayload?.length || 0,
preview: pdfPayload?.slice(0, 30),
})
lodop.ADD_PRINT_PDF(0, 0, '100%', '100%', pdfPayload)
} else {
console.log('[printOrder] raw payload meta', {
id: data.id,
hasFilePath: !!data.filePath,
fileDataLength: data.fileData?.length || 0,
fileDataPreview: data.fileData?.slice(0, 30),
})
lodop.SEND_PRINT_RAWDATA(data.fileData || '')
}
console.log('lodop.CVERSION', lodop.CVERSION)
if (lodop.CVERSION) {
const startTime = Date.now()
const jobCode = await lodopCall((lodop) => {
lodop.SET_PRINT_MODE('CATCH_PRINT_STATUS', true)
return lodop.PRINT()
})
console.log('jobCode', jobCode)
// eslint-disable-next-line no-constant-condition
while (true) {
const ok = await lodopCall((lodop) =>
lodop.GET_VALUE('PRINT_STATUS_OK', jobCode),
)
console.log('PRINT_STATUS_OK:', jobCode, `ok: ${ok}`)
if (ok == 1) {
console.log('打印成功')
// 打印状态:成功
callback && callback(true)
return
}
// 如果打印状态表示未成功或者返回了空,继续获取任务是否存在
const exist = await lodopCall((lodop) =>
lodop.GET_VALUE('PRINT_STATUS_EXIST', jobCode),
)
console.log(
'[LODOP] PRINT_STATUS OK,EXIST',
jobCode,
`ok:${ok}`,
`exist:${exist}`,
`jobCode:${jobCode}`,
`(${Date.now() - startTime}ms)`,
)
if (exist == 0) {
console.log('任务不存在了', `exist:${exist}`)
// 任务不存在了
callback && callback(true)
return
}
const run = async () => {
const lodop = getCLodop(null, null)
if (!lodop) {
callback && callback(false)
return
}
lodop.PRINT_INIT('打印内容')
const printerIndex = lodop.SET_PRINTER_INDEX(sheetPrinter.value)
console.log(
'printerIndex',
printerIndex,
`sheetPrinter.value:${sheetPrinter.value}`,
)
if (!printerIndex) {
ElMessage.error('打印机设置失败')
callback && callback(false)
return
}
if (data.filePath) {
const strURL = filePath + data.filePath
const isHttpsPdf = /(https):\/\/([^/]+)/i.test(strURL)
console.log('[printOrder] label source', {
id: data.id,
hasFilePath: !!data.filePath,
hasFileData: !!data.fileData,
isHttpsPdf,
strURL,
})
const pdfPayload = isHttpsPdf ? downloadPDF(strURL) : strURL
console.log('[printOrder] pdf payload meta', {
mode: isHttpsPdf ? 'base64' : 'url',
length: pdfPayload?.length || 0,
preview: pdfPayload?.slice(0, 30),
})
lodop.ADD_PRINT_PDF(0, 0, '100%', '100%', pdfPayload)
} else {
console.log('[printOrder] raw payload meta', {
id: data.id,
hasFilePath: !!data.filePath,
fileDataLength: data.fileData?.length || 0,
fileDataPreview: data.fileData?.slice(0, 30),
})
lodop.SEND_PRINT_RAWDATA(data.fileData || '')
}
console.log('lodop.CVERSION', lodop.CVERSION)
if (lodop.CVERSION) {
const startTime = Date.now()
const jobCode = await lodopCall((lodop) => {
lodop.SET_PRINT_MODE('CATCH_PRINT_STATUS', true)
return lodop.PRINT()
})
console.log('jobCode', jobCode)
// eslint-disable-next-line no-constant-condition
while (true) {
const ok = await lodopCall((lodop) =>
lodop.GET_VALUE('PRINT_STATUS_OK', jobCode),
)
console.log('PRINT_STATUS_OK:', jobCode, `ok: ${ok}`)
if (ok == 1) {
console.log('打印成功')
callback && callback(true)
return
}
const exist = await lodopCall((lodop) =>
lodop.GET_VALUE('PRINT_STATUS_EXIST', jobCode),
)
console.log(
'[LODOP] PRINT_STATUS OK,EXIST',
jobCode,
`ok:${ok}`,
`exist:${exist}`,
`jobCode:${jobCode}`,
`(${Date.now() - startTime}ms)`,
)
if (exist == 0) {
console.log('任务不存在了', `exist:${exist}`)
callback && callback(true)
return
}
await new Promise((r) => setTimeout(r, 500))
if (Date.now() - startTime >= 30000) {
console.log('打印超时(30秒)')
ElMessage.error('打印超时(30秒)')
callback && callback(false)
return
await new Promise((r) => setTimeout(r, 500))
if (Date.now() - startTime >= 30000) {
console.log('打印超时(30秒)')
ElMessage.error('打印超时(30秒)')
callback && callback(false)
return
}
}
} else {
lodop.PRINT()
callback && callback(false)
}
} else {
lodop.PRINT()
callback && callback(false)
}
printOrderChain = printOrderChain.then(run, run)
}
let _lodop: LODOPObject | null = null
let _lodopCallback: { [key: string]: (value: string) => void } = {}
......
......@@ -1251,9 +1251,6 @@ const initOrderDetailBox = async (type: 'scan' | 'manual' = 'manual') => {
if (type === 'manual' && boxs.length > 0) {
nextTick(async () => {
// 切换箱子至验货完成的箱子
boxChange.value = true
boxIndex.value = boxs[0] as number
const token = ++pickFinishedAlertToken
if (token > 1) {
ElMessageBox.close()
......@@ -1338,7 +1335,8 @@ const nextStep = async (callback: () => void) => {
callback && callback()
})
} catch (error) {
productionOrderRef.value.focus()
// 取消打单完成时仍允许切换箱子 / 关闭弹窗
callback && callback()
console.error(error)
}
} else {
......@@ -1448,15 +1446,24 @@ const handlePrinterChange = (value: string) => {
emit('set-printer', value)
}
/** 已自动打印过的订单,避免 WS 回写清掉 printResult 后重复打印 */
const autoPrintedIds = new Set<number>()
const print = (data: OrderData, forcePrint = false, callback?: () => void) => {
const _boxIndex = boxIndex.value
const orderId = data.id
if (!forcePrint && data.printResult) {
if (
!forcePrint &&
(data.printResult || (orderId != null && autoPrintedIds.has(orderId)))
) {
callback && callback()
return
}
if (!forcePrint && orderId != null) autoPrintedIds.add(orderId)
props.printOrder(data, (status: boolean) => {
if (!status && orderId != null) autoPrintedIds.delete(orderId)
callback && callback()
const item = podBoxList.value?.find((item) => item.box === _boxIndex)
if (item && item.data) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment