代码人»首页 技术广场 Vue 查看内容

vue 标签打印,打印二维码弹框前端代码

245

主题

2

回帖

888

积分

管理员

积分
888

  1. <script lang="ts" setup>
  2. import { ref } from 'vue'
  3. import { printElement } from '@/utils/printUtils'

  4. interface IDialogProps {
  5.   type?: string
  6.   title?: string
  7.   row?: networkDeviceApi.NetworkDeviceVO[]
  8. }
  9. const dialogVisible = ref(false) // 弹窗的是否展示

  10. const dialogProps = ref<IDialogProps>({})

  11. /** 打开弹窗 */
  12. const open = async (value) => {
  13.   dialogVisible.value = true
  14.   dialogProps.value = value
  15. }

  16. defineExpose({ open }) // 提供 open 方法,用于打开弹窗
  17. </script>

  18. <template>
  19.   <div>
  20.     <Dialog
  21.       v-model="dialogVisible"
  22.       width="60%"
  23.       top="4vh"
  24.       custom-class="custom-dialog"
  25.       title="标签打印"
  26.     >
  27.       <div class="px-[0px]">
  28.         <div class="flex justify-center mb-8">
  29.           <el-button type="primary" class="font-bold text-lg" @click="printElement('printMe')"
  30.             >标签打印</el-button
  31.           >
  32.         </div>

  33.         <div id="printMe">
  34.           <!-- 需要打印的内容 -->
  35.           <div
  36.             v-for="(item, index) in dialogProps.row"
  37.             :key="index"
  38.             style="border-top: 1px solid #f2f2f2;"
  39.           >
  40.             <table class="printTable" style="width: 100%">
  41.               <tr>
  42.                 <td>
  43.                   <div style="width: 76mm;float: left;display: inline-block;padding-top: 3px;">
  44.                   <div class="printTable_left" style="width: 44mm;float: left;">
  45.                     <table class="table_text" style="width: 44mm!important;">
  46.                       <tbody>
  47.                       <tr>
  48.                         <th style="width: 10mm!important;">类型:</th>
  49.                         <td>{{ item.ciidDesc == null ? '--' : item.ciidDesc }}</td>
  50.                       </tr>
  51.                       <tr>
  52.                         <th style="width: 10mm!important;">位置:</th>
  53.                         <td>{{ item.location == null ? '--' : item.location }}</td>
  54.                       </tr>
  55.                       <tr>
  56.                         <th style="width: 10mm!important;">名称:</th>
  57.                         <td>{{ item.name == null ? '--' : item.name }}</td>
  58.                       </tr>
  59.                       <tr>
  60.                         <th style="width: 10mm!important;">型号:</th>
  61.                         <td>{{ item.modelName == null ? '--' : item.modelName }}</td
  62.                         >
  63.                       </tr>
  64.                       <tr>
  65.                         <th style="width: 10mm!important;">SN:</th>
  66.                         <td>{{ item.serialNumber == null ? '--' : item.serialNumber }}</td>
  67.                       </tr>
  68.                       </tbody>
  69.                     </table>
  70.                   </div>
  71.                   <div class="printTable_right" style="width: 32mm;float: left;">
  72.                     <div style="width: 100%;text-align: center;font-weight: bold;">
  73.                       {{
  74.                         item.floorCode.slice(
  75.                           item.floorCode.lastIndexOf('-') + 1,
  76.                           item.floorCode.length
  77.                         )
  78.                       }}
  79.                     </div>
  80.                     <div style="width: 100%;text-align: center;">
  81.                       <img :src="item.base64Img" alt="" width="100%" height="100%" />
  82.                     </div>
  83.                   </div>
  84.                   </div>
  85.                 </td>
  86.               </tr>
  87.             </table>
  88.           </div>
  89.         </div>
  90.       </div>
  91.     </Dialog>
  92.   </div>
  93. </template>

  94. <style lang="scss" scoped>
  95. .label {
  96.   width: 50px;
  97.   font-weight: bold;
  98.   text-align: right;
  99.   padding-right: 10px;
  100.   white-space: nowrap;
  101. }

  102. :deep(.custom-dialog .el-dialog__body) {
  103.   height: 650px;
  104.   overflow-y: auto;
  105. }
  106. #printMe {
  107.   display: block;
  108. }
  109. .printTable {
  110.   display: table;
  111.   height: 33mm;
  112.   font-size: 13px;
  113.   margin: 0;
  114. }
  115. .printTable_left {
  116.   float: left;
  117.   padding: 0;
  118.   vertical-align: bottom;
  119. }
  120. .printTable_right {
  121.   float: left;
  122.   padding: 0;
  123.   vertical-align: bottom;
  124.   font-size: 12px;
  125.   font-weight: bold;
  126.   width: 32mm;
  127.   text-align: center;
  128. }
  129. .table_text {
  130.   border: none;
  131.   line-height: 3.6mm;
  132.   table-layout: fixed;
  133. }
  134. .table_text th {
  135.   font-weight: normal;
  136.   font-size: 12px;
  137.   text-align: right;
  138.   vertical-align: top;
  139.   padding: 0;
  140.   white-space:nowrap!important;
  141. }
  142. .table_text td {
  143.   word-break: break-all;
  144.   font-size: 12px;
  145.   padding: 0;
  146.   width: 34mm;
  147. }
  148. .codeNuber {
  149.   width: 100%;
  150.   text-align: center;
  151. }
  152. .codeImg {
  153.   text-align: left;
  154.   width: 33mm;
  155.   height: 28mm;
  156.   vertical-align: middle !important;
  157. }
  158. </style>

复制代码

微信扫一扫,分享更方便

举报 回复