js脚本实现vue批量下载(二维码)

声明一下我这个批量下载是无接口实现的

哥们也是翻烂了CSDN和NPM插件库,效果呢虽说大差不差,但是都是接口实现的;废话说不多说上教程:

首先template,定义qrcode元素,v-show是我不想让这个二维码展现出来,所以才加的。

 <el-button type="primary" @click="createQRCode">批量下载</el-button>
 <div v-show="false" class="QRcode" ref="qrCodeDiv" id="QRcode"></div>
 
<div style="height:15%;display: flex;align-items: center;justify-content: center;">
          <el-pagination background layout="prev, pager, next,jumper" :total="page.total"
            :current-page.sync="to_get_list_data.page" :hide-on-single-page="page.total < 11" :page-size="page.limit"
            @current-change="get_list(false)" />
        </div>

script,引入qrcode2,前提是你得安装npm i qrcode2,

<script>
import QRCode from 'qrcodejs2'
var qrcode
var time
export default{
	data() {
    	return {
    		 tableData_index: 0, //定义索引
      		tableData_num: 0, //总数
      		QRCode_box:"",
      		tableData:[], //这个是el-table 属性ref的值,你获取到的数据赋值给他,我的是后端返回里面有qrcode值
      		to_get_list_data: {
        		page: 1,
       			 pageSize: 10
     		 },
		}
	},
	
}
</script>

下面是生成二维码的方法和下载的方法,遇到异步不会就用定时器

medthods:{
	createQRCode() {
      var _this = this;
      document.getElementById('QRcode').innerHTML = '' //如果想要批量下载就得把上一个生成的清空掉
      // console.log(JSON.stringify(document.getElementById('QRcode')));
      this.QRCode_box = ''
      this.QRCode_box = new QRCode(this.$refs['qrCodeDiv'], {
        text: _this.tableData[_this.tableData_index].qrcode, //这里就可以省去for或者forEach循环,把索引值拿到后面跟二维码的参数
        width: 188, //生成的二维码的宽度
        height: 188, //生成的二维码的高度
        correctLevel: QRCode.CorrectLevel.H
      })
      //想要单个下载的把settimeout和if判断去掉
      setTimeout(() => {
        var qrcode = document.getElementById('QRcode');
        var img = qrcode.getElementsByTagName('img')[0];
        
        setTimeout(() => {
          _this.imgUrl = img.getAttribute("src");
          var link = document.createElement("a");
          link.setAttribute("href", _this.imgUrl);
          link.setAttribute("download", “文件名字” + ".png")
          link.click(); //如果只是单个下载到这里就结束了,批量下载跟一个异步判断下一页如果有就会自动跳转下一页,继续下载,直到停止
          
          time = setTimeout(() => {
            if (_this.tableData_index >= _this.tableData_num - 1) {
              //判断下一页
              if (_this.to_get_list_data.page >= _this.page.total) {
                return _this.page.total //如果没有就返回 或者停止
              } else {
                _this.to_get_list_data.page++
                _this.get_list(function () {  
                  _this.tableData_index = 0
                  _this.createQRCode() //再次执行下载
                })
              }

            } else {
              _this.tableData_index++
              _this.createQRCode() 
            }
          }, 10)
        }, 500)
      }, 100)

    },
	}

这里是我请求数据体,getlist是我请求表里的数据,执行回调callback,这里面没必要的我删除了,最主要的还是callback回调函数

get_list(callback) {
      var _this = this
      seeList(_this.to_get_list_data).then(e => {
        console.log(e);
        _this.isDisabled = false
        if (e.code == 0) {
          _this.$message({
            message: '获取成功',
            type: 'success'
          })
          _this.to_get_list_data.page = Number(e.data.page)
          _this.page.total = Number(e.data.count)
			
          _this.tableData = e.data.data
          _this.tableData_num = _this.tableData.length
          if (callback) {
            callback()
          }
        } 
      })
    },

源码:
二维码我不需要展示,随便找个地方放了
在这里插入图片描述
这是分页
在这里插入图片描述
参数值
在这里插入图片描述
在这里插入图片描述

总结就到这里,不明白的可以评论@我,反正原理都是下载

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值