vue产生二维码并且打包下载

在做一个二开项目,前端使用的vue element-ui. 需求要在列表里面展示二维码,并且可以批量打包下载.
首先我们能确定 在接口里面返回的是二维码链接

展示二维码

1. 在el-table中加入一行来进行二维码的占位

<el-table-column label="二维码" min-width="240px" align="center">
        <template slot-scope="{row}">
          <vue-qr :id="'qr'+row.id" :text="row.code" ></vue-qr>
        </template>
      </el-table-column>

2. 安装vue-qr包,并且引入

  1. 安装

npm i vue-qr

  1. 引入

import VueQr from ‘vue-qr’

  1. 挂载

components:{VueQr},

批量下载二维码

1. 页面加入批量下载按钮

<el-button  class="filter-item" @click="donloadQrcode()">
        批量下载二维码
      </el-button>

2. 加载需要的包

jszip用来进行创建压缩包
HTML2canvas用来进行读取二维码
saveAs 用来进行保存下载

import JSZip from ‘jszip’
import html2canvas from ‘html2canvas’
import saveAs from ‘file-saver’

3. 下载功能实现

// 表格复选框选中状态监听
      selectChange(row){
        this.checkTableData = row;
      },
      // 批量下载二维码
      donloadQrcode(row){
        var zip = new JSZip();
        var CodeDase64 = zip.folder("党员二维码"); //包名称
        if(this.checkTableData == ''){
          this.$message('请选择要下载的二维码');
          return false;
        }
        var loading = this.$loading({
                  lock: true,
                  text: '二维码正在打包',
                  spinner: 'el-icon-loading',
                  background: 'rgba(0, 0, 0, 0.7)'
                });
        this.checkTableData.forEach((e, index) => {
                  this.$nextTick(() => {
                      this.htmls(e, index, zip, CodeDase64, loading);
                  });
        })
      },

进行下载以及数据的读取

htmls(row, index, zip, CodeDase64, loading){
        var that = this;
        var htmlName = document.getElementById("qr"+row.id);
        setTimeout(() => {
            html2canvas(htmlName).then((resolve) => {
              let imgUrl = resolve.toDataURL("image/png"); //此时就得到了dom元素转成了base64的图片
              const basePic = imgUrl.replace(/^data:image\/(png|jpg);base64,/, "");
              CodeDase64.file(row.name + ".png", basePic, {
                base64: true,
              });
              if(that.checkTableData.length-1 == index){
                loading.close();
                zip
                  .generateAsync({ type: "blob" }) // zip下载
                  .then((content) => {
                    saveAs(content, "党员二维码.zip"); // zip下载后的名字
                  });
              }
            });
         }, 500);
      },
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苏范霖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值