打印代码
< ! -- 打印 -- >
< template>
< el- dialog
title= "打印"
: visible. sync= "dialogVisible"
width= "50%"
top= "7vh"
append- to- body
@close= "handleClose"
>
< div ref= "printContainer" class = "container" >
< div v- for = "(item, index) in bloodList" : key= "index" class = "blood_num_item" >
< el- image : src= "item.src" : preview- src- list= "[item.src]" / >
< ! -- < img : src= "item.src" / > -- >
< div class = "num" > { { item. num } } < / div>
< / div>
< / div>
< template slot= "footer" >
< div class = "btns" >
< el- button size= "mini" @click= "handleClose" > 取消< / el- button>
< el- button size= "mini" type= "primary" @click= "printHandler" > 打印< / el- button>
< / div>
< / template>
< / el- dialog>
< / template>
< script>
import { getStore } from '@/utils/tool.js'
export default {
name : 'PrintBloodUseDialog' ,
components : { } ,
data ( ) {
return {
dialogVisible : false ,
bloodList : [ ] ,
vuex : JSON . parse ( getStore ( 'vuex' ) || '{}' )
}
} ,
computed : {
sysConfigData ( ) {
return ( this . vuex && this . vuex. app && this . vuex. app. sysConfigData) || { }
}
} ,
watch : { } ,
created ( ) {
this . open ( )
} ,
methods : {
open (
bloodList = [
'0000000038' ,
'0000000039' ,
'0000000040' ,
'0000000041' ,
'0000000042' ,
'0000000043' ,
'0000000044' ,
'0000000045' ,
'0000000046'
]
) {
this . bloodList = bloodList. map ( ( item ) => {
return {
src : 'https://fc1tn.baidu.com/it/u=1935894774,4092430670&fm=202&src=780&ernie_sim_online&mola=new&crop=v1' ,
num : item
}
} )
this . dialogVisible = true
} ,
printHandler ( ) {
console. log ( '"打印"----' , '打印' )
const el = this . $refs. printContainer
this . iframe = document. createElement ( 'iframe' )
this . iframe. setAttribute (
'style' ,
'position:absolute;width:0;height:0;left:-500px;top:-500px;'
)
document. body. appendChild ( this . iframe)
const doc = this . iframe. contentWindow. document
doc. write ( '<div class="print-iframe">' + el. innerHTML + '</div>' )
doc. write ( '<style>@page{size:auto;margin: 0.5cm 1cm 0cm 1cm;}</style>' )
doc. write (
` <style>
.blood_num_item {
page-break-before:always !important;
page-break-after:always !important;
}
img,
.el-image {
width:100%
}
.num {
text-align:center;
}
</style> `
)
doc. close ( )
this . iframe. contentWindow. onafterprint = this . afterPrint
this . iframe. contentWindow. focus ( )
this . iframe. onload = ( ) => {
this . iframe. contentWindow. print ( )
}
if ( navigator. userAgent. indexOf ( 'MSIE' ) > 0 ) {
document. body. removeChild ( this . iframe)
}
} ,
handleClose ( ) {
this . dialogVisible = false
}
}
}
< / script>
< style lang= 'scss' scoped>
@import '@/styles/dialog-style.scss' ;
: : v- deep . el- dialog {
. el- dialog__body {
max- height: 500px;
overflow : auto;
}
}
. container {
display : flex;
flex- wrap: wrap;
. blood_num_item {
width : calc ( 20 % - 5px) ;
margin- right: 5px;
. el- image {
width : 100 % ;
}
img {
width : 100 % ;
}
. num {
text- align: center;
}
}
}
. btns {
text- align: right;
}
< / style>
对话框预览
打印预览