eleAdmin 生成二维码及前端下载

该篇文章介绍了如何在eleAdmin框架中使用EleQrCode和EleQrCodeSvg组件生成SVG和Canvas格式的二维码,并提供了前端下载功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eleAdmin 生成二维码及前端下载

<template>
  <div class="ele-body">
    <ele-modal
      width="30%"
      top="5%"
      :visible="visible"
      v-if="visible"
      :close-on-click-modal="false"
      :destory-on-close="true"
      :lock-scroll="false"
      @update:visible="updateVisible"
      :title="'应用二维码'"
    >
      <div id="svgDiv" style="text-align: center">
        <!-- svg 渲染 -->
        <ele-qr-code-svg :value="text" :size="size" />
        <!-- canvas 渲染 -->
        <ele-qr-code :value="text" :size="size" />
        <div style="margin-top: 30px; margin-bottom: 40px">
          <el-button type="primary" size="small" @click="downloadQrcode"
            >下载svg</el-button
          >
          <el-button type="primary" size="small" @click="downloadQrcode2"
            >下载canvas</el-button
          >
        </div>
      </div>
    </ele-modal>
  </div>
</template>

<script>
  import EleQrCode from 'ele-admin/es/ele-qr-code';
  import EleQrCodeSvg from 'ele-admin/es/ele-qr-code-svg';

  export default {
    name: 'homeAppQrcode',
    components: { EleQrCode, EleQrCodeSvg },
    props: {
      visible: Boolean,
      data: Object
    },
    data() {
      return {
        size: 240,
        text: ''
      };
    },
    methods: {
      updateVisible(visible) {
        this.$emit('update:visible', visible);
      },
      // 二维码转换函数
      covertSVG2Image(node, name, width, height, type = 'png') {
        let serializer = new XMLSerializer();
        let source =
          '<?xml version="1.0" standalone="no"?>\r\n' +
          serializer.serializeToString(node);
        let image = new Image();
        image.src =
          'data:image/svg+xml;charset=utf-8,' + encodeURIComponent(source);
        let canvas = document.createElement('canvas');
        canvas.width = width;
        canvas.height = height;
        let context = canvas.getContext('2d');
        context.fillStyle = '#fff';
        context.fillRect(0, 0, 10000, 10000);
        image.onload = function () {
          context.drawImage(image, 0, 0);
          let a = document.createElement('a');
          a.download = `${name}.${type}`;
          a.href = canvas.toDataURL(`image/${type}`);
          a.click();
        };
      },
      // 下载svg二维码
      downloadQrcode() {
        console.log(document.getElementsByTagName('svg'));
        console.log(document.getElementsByTagName('svg')[1]);
        this.covertSVG2Image(
          document.getElementsByTagName('svg')[1],
          this.data.name,
          this.size,
          this.size
        );
      },
      // 下载canvas二维码
      downloadQrcode2() {
        console.log(document.getElementsByTagName('canvas')[0]);
        let url = document
          .getElementsByTagName('canvas')[0]
          .toDataURL(`image/png`);
        let a = document.createElement('a');
        a.download = `${this.data.name}.png`;
        a.href = url;
        a.click();
      }
    },
    watch: {
      visible(visible) {
        if (visible) {
          if (this.data) {
            this.text = this.data.url;
            if (!this.text) {
              this.$message.error('无法展示二维码,请检查');
              this.updateVisible(false);
            } else {
              console.log(this.text);
            }
          }
        }
      }
    }
  };
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值