Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
F
factory_front
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
1
Merge Requests
1
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
qinjianhui
factory_front
Commits
294fc864
Commit
294fc864
authored
Jul 23, 2026
by
wusiyi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix: 尝试修复打印机任务并发导致打印内容错乱问题 #1001679
parent
95e79b9a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
105 additions
and
89 deletions
+105
-89
src/views/order/factoryOrderNew/index.vue
+95
-88
src/views/order/podUs/PodMakeOrder.vue
+10
-1
No files found.
src/views/order/factoryOrderNew/index.vue
View file @
294fc864
...
...
@@ -2864,101 +2864,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
}
=
{
}
...
...
src/views/order/podUs/PodMakeOrder.vue
View file @
294fc864
...
...
@@ -1442,15 +1442,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
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment