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