技术实践

vue-qr生成下载二维码

二维码的识别原理:维条码/二维码(2-dimensional bar code)是用某种特定的几何图形按一定规律在平面(二维方向上)分布的黑白相间的图形记录数据符号信息的;在代码编制上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息,通过图象输入设备或光电扫描设备自动识读以实现信息自动处理:它具有条码技术的一些共性:每种码制有其特定的字符集;每个字符占有一定的宽度;具有一定的校验功能等。同时还具有对不同行的信息自动识别功能、及处理图形旋转变化点。

羊先生的头像
羊先生2019.11.05 · 3 分钟阅读 · 152 阅读
vue-qr生成下载二维码封面
文章正文还需 3 分钟

安装vue-qr

javascript 复制代码
npm install vue-qr --save

生成二维码实列

javascript 复制代码
<vue-qr  ref="Qrcode" 
    :text="qrCodeConfig.text" 
    :download="downloadFilename" 
    :margin="10" 
    :size="200" 
    :dotScale="qrCodeConfig.dotScale" 
    :colorDark="qrCodeConfig.colorDark"
>
</vue-qr>
data(){
    return {
        qrCodeConfig: {
            text: 'http://121.40.121.142:8080/register?parent_id='+id,
            dotScale: 0.9,
            colorDark: '#663300'
        },
        downloadFilename:''
    }
}

属性介绍

属性 描述 举列
text 要生成二维码的内容 https://segmentfault.com/write
size 设置二维码大小,宽高相等 200
margin 二维码与边框的距离,可以设置白边 20
colorDark 实点的颜色 #333
colorLight 空白区的颜色 #999
bgSrc 欲嵌入的背景图地址 https://www.vipbic.com/****.jpg
gifBgSrc 欲嵌入的背景图 gif 地址,设置后普通的背景图将失效。设置此选项会影响性能 200
backgroundColor 背景色 #666
backgroundDimming 叠加在背景图上的颜色, 在解码有难度的时有一定帮助 #444
logoSrc 中央图片或logo的路径 https://www.vipbic.com/****.jpg
logoMargin LOGO 标识周围的空白边框 1
logoBackgroundColor Logo 背景色,需要设置 logo margin #888
logoCornerRadius LOGO 标识及其边框的圆角半径 3

下载二维码

javascript 复制代码
downloadImg () {
      const iconUrl = this.$refs.Qrcode.$el.src
      let a = document.createElement('a')
      let event = new MouseEvent('click')
      a.download = '二维码'
      a.href = iconUrl
      a.dispatchEvent(event)
}

最终效果

image

最终代码

html 复制代码
<template>
  <div class="full-screen-btn-con">
    <Button type="warning" @click="showImage">获取二维码</Button>
    <Modal
        v-model="modal"
        title="经济人二维码"
        >
        <div class="code-img">
          <vue-qr  ref="Qrcode" :text="qrCodeConfig.text" :download="downloadFilename" :margin="10" :size="200" :dotScale="qrCodeConfig.dotScale" :colorDark="qrCodeConfig.colorDark"></vue-qr>
        </div>
        <div slot="footer">
          <Button type="primary" @click="downloadImg">下载二维码</Button>
          <Button type="primary" @click="modal = !modal">关闭</Button>
        </div>
    </Modal>
  </div>
</template>

<script>
import VueQr from 'vue-qr'
export default {
  name: 'Fullscreen',
  components: {
    VueQr
  },
  data(){
    let id = this.$store.state.user.userId;
    return {
      modal : false,
      qrCodeConfig: {
        text: 'http://121.40.122.152:8080/register?parent_id='+id,
        dotScale: 0.9,
        colorDark: '#663300'
      },
      downloadFilename:''
    }
  },
  methods: {
    showImage (sid, key, index) {
        this.modal = true
    },
    downloadImg () {
          const iconUrl = this.$refs.Qrcode.$el.src
          let a = document.createElement('a')
          let event = new MouseEvent('click')
          a.download = '二维码'
          a.href = iconUrl
          a.dispatchEvent(event)
    }
  },
  mounted () {
    
  }
}
</script>

<style lang="less" scoped>
  .code-img{
    text-align: center;
  }
</style>