SpringBoot+Vue 实现扫描二维码跳转H5页面

15 篇文章 0 订阅
1 篇文章 0 订阅


需求

扫描二维码跳转员工录入界面进行添加员工信息

  1. 批量下载二维码:选择多个企业进行打包下载
  2. 查看二维码:在线预览

代码

引入组件

import QRCode from 'qrcodejs2'

一、批量下载二维码

1. 前端

	// 批量下载二维码
    hanleBatchDown () {
      let fileName = '二维码'
      this.axios({
        method: 'get',
        url: 'http://localhost:8080/qrcode/zip',
        params: '',
        responseType: 'blob'
      }).then(data => {
        if (data) {
          let url = window.URL.createObjectURL(data)
          let link = document.createElement('a')
          link.style.display = 'none'
          link.href = url
          link.setAttribute('download', fileName + '.zip')
          document.body.appendChild(link)
          link.click()
          document.body.removeChild(link) // 下载完成移除元素
          window.URL.revokeObjectURL(url) // 释放掉blob对象
          this.$message.success('批量下载成功!')
        } else {
          this.$message.error('下载失败' + data.message)
        }
        this.loading = false
      })
    }

2. 后端

	@GetMapping("/qrcode/zip")
    public void downloadZip(HttpServletRequest request, HttpServletResponse response) throws IOException {
        List<BCompany> bCompanyList = bCompanyService.list();
        if (bCompanyList != null) {
            OutputStream outputStream = response.getOutputStream();
            ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
            for (int i = 0; i < bCompanyList.size(); i++) {
                String url = "http://localhost:8080/test.html" + "?" + "companyName=" + URLEncoder.encode(bCompanyList.get(i).getCompanyName(), "utf-8") + "&companyId=" + bCompanyList.get(i).getId();
                BufferedImage buffImg = QRcodeUntil.getBufferedImage(null, url);
                ZipEntry entry = new ZipEntry(bCompanyList.get(i).getCompanyName() + ".png");
                zipOutputStream.putNextEntry(entry);
                ImageIO.write(buffImg, "png", zipOutputStream);
            }
            zipOutputStream.flush();
            zipOutputStream.close();
            outputStream.flush();
            outputStream.close();
        }
    }

二、预览二维码

1. 前端 antd-vue

<a @click="scewm(record.companyName,record.id)">预览二维码</a>

    <a-modal :centered="true"
             :maskClosable="false"
             :width="460"
             @cancel="handleCancel"
             destroyOnClose
             title="查看二维码"
             v-model="show">
      <a-row :gutter="24"
             id="printContainer">
        <div id="qrcode" ref="qrcode"></div>
      </a-row>
      <template slot="footer">
        <a-button @click="hanleDown(companyName,companyId)"
                  type="primary">下载
        </a-button>
        <a-button @click="handleCancel"
                  key="back">关闭
        </a-button>
      </template>
    </a-modal>

2. JS

  computed: {
    show: {
      get: function () {
        return true
      },
      set: function () {
      }
    }
  },

  //@TODO 监听visible变化
  watch: {
    // 生成二维码js必须在 this.$nextTick(function(){调用})或setTimeout(() => { 调用 }, 100),是为了确保二维码容器DOM已经存在
    visible(newVisible) {
      if (newVisible) {
        this.$nextTick(function () {
          this.init(this.companyName, this.companyId)
        })
      }
    }
  }
  methods: {
  	//@TODO 前端展示二维码
    scewm(companyName, id) {
      //显示二维码
      this.visible = true
      this.newVisible = true
      this.companyName = companyName
      this.companyId = id
    },
    init(companyName, id) {
      // 为了防止重复生成二维码,使用置空进行控制
      document.getElementById('qrcode').innerHTML = ''
      // 设置二维码内容  显示内容(text所指向内容)必须是UTF-8编码格式。
      const content = companyName + "@" + id
      this.qrcode = new QRCode('qrcode', {
        width: 260,
        height: 260,
        colorDark: '#000',
        colorLight: '#fff',
        correctLevel: QRCode.CorrectLevel.L, // 容错率,L/M/H
        text: content
      });
    }
 }
在 UniApp 开发的 H5 项目中,生成二维码并链接到特定页面的过程通常涉及以下几个步骤: 1. **获取当前页面地址**: 首先,在你需要生成二维码页面中,你可以通过 JavaScript 获取当前页面的完整 URL,例如: ```javascript var url = window.location.href; ``` 2. **使用 QRCode 库生成二维码**: UniApp 提供了第三方库(如 qrcode-js 或者 echarts 的 QR 生成组件)来生成二维码图片。安装所需的库后,创建二维码对象并设置URL作为内容: ```javascript var qrCode = new QRCode('qrcode', { text: url, width: 200, height: 200 }); ``` 这里`'qrcode'`是你在 HTML 中为二维码容器指定的 id。 3. **保存二维码图片**: 生成二维码后,将其转换为图片格式(通常是 PNG),然后保存到服务器或本地文件系统以便下载或展示。 4. **提供扫描二维码入口**: 可以将二维码图片显示给用户,他们可以直接保存到相册,或者在浏览器内通过右键选择“保存图像”选项。另外,也可以提供一个按钮,点击后直接下载二维码图片。 5. **设置扫码后的页面跳转**: 二维码中包含的是 H5 页面的 URL,所以用户扫描后默认会打开这个 URL。如果需要后续页面跳转,可以在 H5 的入口页面(首页)中处理。例如,使用 Vue.js 的 `router.push` 或者原生的 `window.history.pushState` 来导航。 ```javascript // 当扫描跳转至首页 router.push('/home'); // 或者(无刷新跳转) history.pushState({}, '', '/home'); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值