独墅湖高教创新区危化品智慧管控平台(新危化品)
zhouwx
2025-04-17 a8593f5ca77a934b31bbdd3b919d8e41796cb920
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<template>
  <div class="notice">
    <el-dialog
        v-model="dialogVisible"
        width="400px"
        :before-close="handleClose"
        :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 :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>
</template>
<script setup>
import {reactive, ref, toRefs} from 'vue'
import {ElMessage} from "element-plus";
import VueQr from "vue-qr/src/packages/vue-qr.vue";
 
const dialogVisible = ref(false);
const title = ref("");
const busRef = ref();
const length = ref()
const emit = defineEmits(["getList"]);
 
const state = reactive({
})
 
 
const openDialog = async (type,value) => {
  if(type == 'pro'){
    title.value = value.productBasic.name   + '—'  + value.productBasic.productSn
  }else {
    title.value = value.hazmatBasic.name  + '—' + value.hazmatBasic.productSn
  }
 
  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
});
 
</script>
 
<style scoped lang="scss">
.notice{
  :deep(.el-form .el-form-item__label) {
    font-size: 15px;
  }
  .file {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
  }
}
</style>