zhouwx
2024-09-06 d098e2e3a16837ad0a61c1a2df93b27c7d16bfd2
src/views/hazardousChemicals/electronicWarehouse/components/viewQR.vue
@@ -7,12 +7,24 @@
        :close-on-press-escape="false"
        :close-on-click-modal="false"
    >
      <div style="display: flex;flex-direction: column;align-items: flex-end">
        <el-button type="primary" style="margin-bottom: 5px" @click="printCode">打印</el-button>
      </div>
      <el-card style="max-width: 480px">
        <div style="display: flex;flex-direction: column;align-items: center;font-size: 20px;font-weight: 600">
          <span>{{title}}</span>
          <vue-qr :size="150" :margin="0" :auto-color="true" :dot-scale="1" :text="state.form.code" style="margin: 10px 0 10px 0"></vue-qr>
          <span>{{state.form.code}}</span>
        <div :id="state.form.code">
          <div style="display: flex;flex-direction: column;align-items: center;justify-content: center;">
            <div style="font-size:14px;margin-bottom: 2px" id="codeTitle">{{title}}</div>
            <vue-qr :size="100" :correctLevel="3" colorDark="black" :margin="0" :auto-color="true"  :text="state.form.code"></vue-qr>
            <div style="font-size:10px;margin-top: 2px">{{state.form.code}}</div>
          </div>
        </div>
<!--        <div :id="state.form.code">-->
<!--          <div style="display: flex;flex-direction: column;align-items: center;justify-content: center">-->
<!--            <span style="font-size:14px;margin-bottom: 2px">{{title}}</span>-->
<!--            <vue-qr :size="100" :correctLevel="3" colorDark="black" :margin="0" :auto-color="true"  :text="state.form.code" ></vue-qr>-->
<!--            <span style="font-size:10px;margin-top: 2px">{{state.form.code}}</span>-->
<!--          </div>-->
<!--        </div>-->
      </el-card>
    </el-dialog>
  </div>
@@ -34,18 +46,71 @@
const openDialog = async (type,value) => {
  if(type == 'pro'){
    title.value = value.productBasic.name + ' ' + '—' + ' '+ value.productBasic.productSn
    title.value = value.productBasic.name   + '—'  + value.productBasic.productSn
  }else {
    title.value = value.hazmatBasic.name + ' ' + '—' + ' '+ value.hazmatBasic.productSn
    title.value = value.hazmatBasic.name  + '—' + value.hazmatBasic.productSn
  }
  state.form = value;
  state.form = JSON.parse(JSON.stringify(value));
  dialogVisible.value = true;
}
const handleClose = () => {
  dialogVisible.value = false;
  emit("getList")
}
const printCode = () => {
  let data = []
  data = [state.form]
  let qrCodes=''
  for(let index in data){
    console.log(index,'index')
    qrCodes+=`<div class="my-list-col"><div class="centered-content changeFont">${document.getElementById(data[index].code).innerHTML}</div></div>`
  }
  const printContent=document.createElement('div')
  printContent.innerHTML=qrCodes
  //创建一个新的隐藏的iframe元素
  const printFrame =document.createElement('iframe')
  printFrame.style.display='none'
  document.body.appendChild(printFrame)
  const printDocument=printFrame.contentWindow.document
  printDocument.open()
  printDocument.write(`
  <html>
  <head>
    <title>Print</title>
    <style>
      @media print {
        .page-break { page-break-after:always;} /* 定义分页符格式*/
        .centered-content { display: flex;justify-content: center; align-items: center;height: 90vh;} /* 居中对齐内容*/
        @page { size:50mm 40mm;margin:0mm; }
         .changeFont{font-size:12px;transform: scale(0.8);-webkit-transform: scale(0.85);}
      }
    </style>
  </head>
  <body style='margin:0;padding:0;'>${printContent.innerHTML}</body>
  </html>
  `)
  printDocument.close()
  let ct = document.getElementById('codeTitle').offsetWidth
  console.log('ct',ct)
  //在打印窗口中调用打印功能
  // debugger
  // if(ct >= 180) {
  // }else {
  //
  //   printFrame.contentWindow.document.body.style.zoom = '100%'
  // }
  printFrame.contentWindow.print()
  //移除隐藏的iframe元素
  document.body.removeChild(printFrame)
  // handleClose()
}
defineExpose({
  openDialog
});