vue批量生成二维码,打印生成的二维码,并批量下载生成的二维码,qrcode

通过使用 qrcode 生成二维码,
使用 jszip 打包批量二维码文件,
使用 file-saver 下载打包好的zip文件,
使用 vue-print-nb 打印生成的二维码

生成二维码:

请添加图片描述

打印二维码

请添加图片描述

下载二维码

请添加图片描述

1. 批量生成二维码—安装依赖

![请添加图片描述](https://img-blog.csdnimg.cn/0d1ecbc8674e4c77b01988e79f7b2733.png

npm i qrcode --save
或
yarn add qrcode --save

2. 批量生成二维码—引入依赖

import QRCode from 'qrcode'

3. 批量生成二维码

<div class="qrcode-box" id="printMe">
  <div class="qrcode-item" v-for="item in ids" :key="item.id">
    <canvas :ref="'canvas' + item"></canvas>
    <div class="device-info">设备名称:{
    
    {
    
     checkDeviceMsg(item).deviceName }}</div>
    <div class="device-info">设备编号:{
    
    {
    
     checkDeviceMsg(item).lordDeviceNo }}</div>
  </div>
</div>
      
	// 循环选中要生成二维码的内容  ids[1,2,3...] 设备id
   handleCreateQR() {
    
    
     this.$nextTick(() => {
    
    
       for (let i = 0; i < this.ids.length; i++) {
    
    
         this.useqrcode(this.ids[i])
       }
     })
   },
   // 生成二维码
   useqrcode(e) {
    
    
     let canvas = this.$refs[`canvas${
      
      e}`][0] // 获取当前循环的dom
     if (!canvas) return // 没有拿到dom直接返回
     const _this = this 
     // 调用函数去生成二维码,参数依次为:二维码的容器、要生成的内容、配置项、回调函数 
     QRCode.toCanvas(canvas, `https://xxxxx?uid=${
      
      e}`, this.qrcodeForm, function (error) {
    
    
       if (error) {
    
    
         console.log(error);
       } else {
    
    
         canvas.toBlob(e => {
    
    
         // 把生成的二维码放到数组中
           _this.fileList.push({
    
     deviceName: deviceInfo.deviceName, lordDeviceNo: deviceInfo.lordDeviceNo, file: e })
         })
       }
     });
   },

配置项:

  • width 二维码宽度

  • height 二维码高度

  • errorCorrectionLevel 二维码纠错级别,指二维码被遮挡可以扫出结果的区域比例

      L  7%
      M  15%
      Q  25%
      H  30%
    
  • color:

      dark     前景色
      light    背景色
    

4. 批量下载二维码—安装依赖

// 安装依赖
npm i jszip --save
npm i file-saver --save
或
yarn add jszip --save
yarn add file-saver -- save

5. 批量下载二维码—引入依赖

// 引入依赖
import JSZip from 'jszip'
import FileSaver from "file-saver";

6. 批量下载二维码

// 下载二维码
downLoadQrcode() {
    
    
  const zip = new JSZip() // 创建一个zip实例
  for (const key in this.fileList) {
    
    
    const item = this.fileList[key]
    // 把生成的二维码文件添加到zip中
    zip.file(`${
      
      key}二维码名称.png`, item.file, {
    
     binary: true })
  }
  Promise.all(this.fileList).then(res => {
    
    
  	// 打包文件
    zip.generateAsync({
    
     type: 'blob' }).then(content => {
    
    
    	// 下载zip文件
      FileSaver.saveAs(content, "压缩文件.zip")
    })
  })
},

7. 打印生成的二维码—安装依赖

// 安装依赖
npm i vue-print-nb --save
或
yarn add vue-print-nb --save

8. 打印生成的二维码


<el-button v-print="print">打印</el-button>

data(){
    
    
	return {
    
    
		print: {
    
    
	        id: 'printMe',
	        popTitle: '设备二维码', // 打印配置页上方标题
	        extraHead: '', //最上方的头部文字,附加在head标签上的额外标签,使用逗号分隔
	        preview: false, // 是否启动预览模式,默认是false(开启预览模式,可以先预览后打印)
	        previewTitle: '', // 打印预览的标题(开启预览模式后出现),
	        previewPrintBtnLabel: '', // 打印预览的标题的下方按钮文本,点击可进入打印(开启预览模式后出现)
	        zIndex: '', // 预览的窗口的z-index,默认是 20002(此值要高一些,这涉及到预览模式是否显示在最上面)   
	        previewBeforeOpenCallback() {
    
     }, //预览窗口打开之前的callback(开启预览模式调用)
	        previewOpenCallback() {
    
     }, // 预览窗口打开之后的callback(开启预览模式调用)
	        beforeOpenCallback() {
    
     }, // 开启打印前的回调事件
	        openCallback() {
    
     }, // 调用打印之后的回调事件
	        closeCallback() {
    
     }, //关闭打印的回调事件(无法确定点击的是确认还是取消)
	        url: '',
	        standard: '',
	        extraCss: '',
	    },
	}
}

猜你喜欢

转载自blog.csdn.net/qq_45142260/article/details/130406941