【工具】Vue中生成二维码组件——vue-qr

news2025/1/24 14:57:32

【工具】Vue中生成二维码组件——vue-qr

npm地址——https://www.npmjs.com/package/vue-qr

注:不支持IE浏览器

效果

在这里插入图片描述

1、安包

npm install vue-qr --save

2、引入

// vue2.0
import VueQr from 'vue-qr'
// vue3.0
import VueQr from 'vue-qr/src/packages/vue-qr.vue'
new Vue({
    components: {VueQr}
})

3、使用

<vue-qr :bgSrc='src' :logoSrc="src2" text="Hello world!" :size="200"></vue-qr>
<vue-qr text="Hello world!" :callback="test" qid="testid"></vue-qr>

<script>
export default {
    methods:{
        test(dataUrl,id){
            console.log(url, id)
        }
    }
}
</script>

4、相关配置属性

属性名含义
text编码内容
correctLevel容错级别
size尺寸, 长宽一致, 包含外边距
margin二维码图像的外边距, 默认 20px
colorDark实点的颜色
colorLight空白区的颜色
bgSrc欲嵌入的背景图地址
gifBgSrc欲嵌入的背景图 gif 地址,设置后普通的背景图将失效。设置此选项会影响性能
backgroundColor背景色
backgroundDimming叠加在背景图上的颜色, 在解码有难度的时有一定帮助
logoSrc嵌入至二维码中心的 LOGO 地址
logoScale用于计算 LOGO 大小的值, 过大将导致解码失败, LOGO 尺寸计算公式 logoScale*(size-2*margin), 默认 0.2
logoMarginLOGO 标识周围的空白边框, 默认为0
logoBackgroundColorLogo 背景色,需要设置 logo margin
logoCornerRadiusLOGO 标识及其边框的圆角半径, 默认为0
whiteMargin若设为 true, 背景图外将绘制白色边框
dotScale数据区域点缩小比例,默认为0.35
autoColor若为 true, 图像将被二值化处理, 未指定阈值则使用默认值
binarizeThreshold(0 < threshold < 255) 二值化处理的阈值
callback生成的二维码 Data URI 可以在回调中取得,第一个参数为二维码 data URL, 第二个参数为 props 传过来的 qid(因为二维码生成是异步的,所以加个 id 用于排序)
bindElement指定是否需要自动将生成的二维码绑定到HTML上, 默认是TRUE

5、实例

index.vue

<!--
 * @Author: user
 * @Date: 2022-03-22 14:06:12
 * @LastEditTime: 2022-03-22 14:06:12
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath:/src/views/downApp.vue
-->
<template>
  <div class="all">
    <div class='top'></div>
    <div class='center_down_app'>
      <div class='bg' :style='{backgroundImage:"url(" + bg.src +")"}'></div>
      <div class='qrcode_sp'>
        <div class='qrcode_bg'>
           <!-- <vue-qr :text="downloadData.url" :logoSrc="downloadData.icon + '?cache'" :margin="0" colorDark="#f67b29" colorLight="#fff"  :logoScale="0.3" :size="200"></vue-qr> -->
          <vue-qr :text="downloadData.url" :logoSrc="downloadData.icon" :size="145" :logoScale="0.2" :logoMargin='3' :margin="10" colorDark="#585E67" colorLight="#fff"></vue-qr>
        </div>
        <p>用手机扫描二维码安装</p>
      </div>
      <div class='download_sp'>
        <a :href= latestAppData.appUrl >
          <div class='download_btn' @mousemove="isMask = true" @mouseout="isMask = false">
            <img src="@/img/android.svg" class="imgMiddle" />
            <div class='btn_w'>下载</div>
            <div class="mask" v-show="isMask"></div>
          </div>
        </a>
        <p class='versions_sp'>最新版本:{{latestAppData.appVersion}}(build {{latestAppData.upgradeLevel}}) | 大小:{{latestAppData.appSize}}MB | 更新时间:{{latestAppData.updateTime}}</p>
      </div>
    </div>
  </div>
</template>
<script type="text/ecmascript-6">
import vueQr from 'vue-qr'
import {queryLatestApp} from '@/api/request';
export default {
  components: {
    vueQr
  },
  data () {
    return {
      bg: { src: require('@/img/logo_download.png') },
      downloadData: {
        url: '',
        icon: require('@/img/qr_logo.svg')
      },
      latestAppData: {},
      isMask:false
    }
  },
  created () {
    queryLatestApp({appType: '安卓'}).then(res => {
      this.latestAppData = res;
      this.latestAppData.updateTime = res.updateTime.split(' ')[0];
      this.downloadData.url = res.appUrl;
    })
  }
}
</script>
<style lang="scss" scope>
.all{
  width: 100%;
  height: 100%;
  background: #131623;
  overflow: hidden;
  .top{
    width: 100%;
    height: 46px;
    background: linear-gradient(90deg, #75C6FE, #B256F9);
  }

  .center_down_app{
    width: 1366px;
    height: 646px;
    margin-left: calc(50% - 683px);
    position: relative;
    margin-top: 70px;
    .bg{
      width: 610px;
      height: 670px;
      margin-left: calc(50% - 305px);
      background-size: contain;
    }
    .qrcode_sp{
      width: 188px;
      height: 220px;
      position: absolute;
      top: 136px;
      left: 28%;
      .qrcode_bg{
        width: 188px;
        height: 188px;
        padding: 20px;
        background: #141723;
        border-radius: 30px;
        border:solid 1px rgba(101, 103, 107, 0.22);
        box-shadow: 0px 12px 68px 19px rgba(0, 0, 0, 0.59);
      }
      p{
        width: 188px;
        height: 16px;
        font-size: 16px;
        line-height: 32px;
        font-weight: 400;
        color: #848390;
        text-align: center;
      }
    }
    .download_sp{
      width: 461px;
      height: 110px;
      position: absolute;
      right: 22%;
      bottom: 0px;
      .download_btn{
        width: 434px;
        height: 62px;
        line-height: 58px;
        background: #4E55AF;
        border-radius: 30px;
        position: relative;
        .mask{
          position: absolute;
          width: 100%;
          height: 100%;
          top: 0;
          left: 0;
          border-radius: 30px;
          background-color: rgba(0, 0, 0, 0.2);
        }
        .imgMiddle{
          width: 36px;
          height: 36px;
          display: block;
          float: left;
          margin: 13px 0px 0px 166px;
        }
        .btn_w{
          margin-left: 10px;
          margin-top: 2px;
          font-size: 20px;
          letter-spacing: 10px;
          font-family: Microsoft YaHei;
          font-weight: bold;
          color: #FFFFFF;
          float: left;
        }
      }
      .versions_sp{
          height: 14px;
          font-size: 14px;
          font-family: PingFang SC;
          font-weight: 400;
          color: #C6CAD5;
          line-height: 24px;
          margin-top: 34px;
        }
    }
  }
  @media only screen and (max-height: 770px){
    .center_down_app{
      margin-top: 40px !important;
    }
    .bg{
      margin-left: calc(50% - 244px) !important;
      width: 427px !important;
      height: 469px !important;
    }
    .qrcode_sp{
      top: 80px !important;
    }
    .download_sp{
      bottom: 170px !important;
    }
  }
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/407908.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3分钟搞懂阿里云服务器安装Nginx并配置静态访问页面

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【Bug 终结者】 &#xff0c;【CSDN新星创作者】&#x1f3c6;&#xff0c;阿里云技术博主&#x1f3c6;&#xff0c;51CTO人气博主&#x1f3c6;&…

怎么让 echarts 图表动起来?定时器解决它 —— 大屏展示案例(动态仪表盘、动态柱状图)

该案例为了实现效果采用的是随机生成数据&#xff0c;比较适用于偏向展示效果的静态页面如门户网站的首页、登录页等等。颜色样式自调。 需要注意在有些项目中仪表盘可能无法正常显示&#xff0c;这是因为你在项目中引入的 echarts 版本太低&#xff0c;需要引入新版本 echarts…

一个简单的springboot+Vue前后端框架搭建

前言 根据网上的一些教程试着搭建了一个简单的前后端分离的用户管理系统。该系统使用Vue框架编写前端代码&#xff0c;Springboot编写后端代码&#xff0c;Mysql作为数据库存储系统的数据。本文着重介绍整个项目的搭建流程以及附加一些在搭建过程的想法和注意事项。 一、Vue及…

【vue+router】解决路由重复警告:[vue-router] Duplicate named routes definition

vue页面动态添加路由&#xff0c;但加载页面会报警告&#xff1a; [vue-router] Duplicate named routes definition: { name: "xxx", path: "xxx" }这个问题解释为&#xff1a;路由命名重复 网上有一些大神剔除原有路由的做法&#xff1a; 1、古墩古墩 …

vue中computed的详细讲解

vue中computed的详细讲解1.定义2.用法3.computed的响应式依赖(缓存)4.应用场景1.定义 computed是vue的计算属性&#xff0c;是根据依赖关系进行缓存的计算&#xff0c;只有在它的相关依赖发生改变时才会进行更新 2.用法 一般情况下&#xff0c;computed默认使用的是getter属性…

Vue组件传值(props属性,父到子,子到父,兄弟传值)

文章目录[TOC](文章目录)前言一、props是什么&#xff1f;使用规则二、父传子 props实现步骤代码实现效果展示二.子传父 $emit实现步骤代码实现效果展示三.兄弟传值 EventBus实现步骤代码实现效果展示总结前言 Vue是数据驱动视图更新的框架, 平时写业务时,都会把页面不同模块拆…

CSS - 浮动布局(float)

目录 标准布局 标准流 浮动与浮动流&#xff0c;及元素脱标概念 浮动元素 浮动的特点 浮动带来的问题&#xff1a;标准流父级容器高度塌陷 清除浮动 浮动布局 margin负值 标准布局 CSS将所有的元素都当成盒子&#xff0c;CSS布局其实就是如何堆放盒子。 在说浮动布局…

【玩转CSS】学成在线(文末素材源码自取)

&#x1f525;一个人走得远了&#xff0c;就会忘记自己为了什么而出发&#xff0c;希望你可以不忘初心&#xff0c;不要随波逐流&#xff0c;一直走下去&#x1f3b6; &#x1f98b; 欢迎关注&#x1f5b1;点赞&#x1f44d;收藏&#x1f31f;留言&#x1f43e; &#x1f984; …

vue监听缓存数据(localStorage) 中值的更新

2个vue组件之间数据同步&#xff0c;可以通过监听localStorage数据变化&#xff0c;来改变数据的值。 方法&#xff1a;可以重写localStorage的setItem方法&#xff0c;当调用setItem方法设置新值的时候&#xff0c;会new Event(setItemEvent) 用window.dispatchEvent()这个…

vue 项目兼容 IE 浏览器

前言 : 网上 找了很多关于 vue项目兼容 IE 浏览器的 教程步骤 , 写的 非常详细 , 但根据我自己的项目,怎么找 都没有找到 webpack.base.conf.js 这个文件 ,就没办法配置 因为 vue-cli最新版本原因 , 隐藏了配置文件, 所有的 都在 vue.config.js中配置 可以根据自己的 vue-cli 版…

手摸手带你玩转Vue3——Vue2升级Vue3

今年年初&#xff0c;尤大大公布了一个重磅消息&#xff0c;将Vue3作为Vue的默认版本。 这无疑不是对我们开发人员的内卷煽风点火&#xff01; vue默认版本改动意味着&#xff0c;官方将会把Vue研发重心放到vue3上&#xff0c;vue2也开始走下坡路&#xff0c;至于淘汰过时只是…

前端插件库之vue3使用element-plus实现登录、注册页面和忘记密码弹窗,以及已有样式的覆盖

vue3使用element-plus实现登录/注册页面登录/注册页面组件预览添加忘记密码弹窗预览已有样式的修改1.字体大小2.router-link默认样式登录/注册页面组件 vue3 的登录和注册页面 目前只有框架和函数框架, 根据具体需要填充, 已有功能: 1.没有勾选同意使用手册, 登录和注册按钮是…

后端返回各种图片形式在前端的转换及展示

一、 接口返回的图片显示如下所示&#xff1a;&#xff08;在控制台看的&#xff09;返回的是这个图片&#xff08;二进制&#xff09; 可是&#xff0c;在 打印的时候&#xff0c;返回的却是 出现问题的原因的axios 默认返回的是 json 文本形式&#xff0c;二进制图片数据被强…

TS复习-----TS中的函数

目录 一、ts函数的定义 二、ts中定义函数传参 1.函数传参方法 2.可选参数 3.默认参数 4.剩余参数 函数重载 一、ts函数的定义 函数是一种特殊的对象&#xff0c;可以被调用。TS 里的函数和原生&#xff0c;ES 6 里的函数差不太多&#xff0c;只是多了一些其他功能。 //…

HTML入门学习笔记+详细案例

✨HTML入门学习笔记详细案例 作者介绍: &#x1f393;作者:偷偷敲代码的青花瓷&#x1f431;‍&#x1f680; &#x1f440;作者的Gitee:代码仓库 ✨✨我和大家一样都是热爱编程✨,很高兴能在此和大家分享知识,希望在分享知识的同时,能和大家一起共同进步,取得好成绩&#x1f9…

实现H5和小程序之间相互跳转

功能描述&#xff1a; 1、 当点击理赔服务的时候&#xff0c;跳转到小程序页面 2、 当点击返回的时候&#xff0c;从小程序跳回H5页面&#xff08;内嵌H5以及关闭小程序&#xff09; 功能1&#xff1a;H5跳转小程序 vue中实现步骤 在 template 标签中写html <wx-open-lau…

【Maven】maven安装、IDEA创建maven的web项目、添加依赖、集成Tomcat

学习目录前言maven简介maven的下载与安装优化配置参数1.修改本地仓库路径2.设置阿里云私服镜像3.指定JDK版本IDEA创建第一个maven的web项目IDEA集成TomcatHello java&#xff01;前言 朋友们在写后端的过程中&#xff0c;遇到功能复杂的业务时需要导入不同的jar包&#xff0c;…

Logging system failed to initialize using configuration from ‘classpathlogbacklogback-spring.xml‘

2021-12-31&#xff1a; 项目在Windows系统上可以正常运行,然而移到Mac系统上运行出现一下报错!! 据报错信息显示,初始化“logback-spring.xml”失败,监测到“Logback”配置出错,非法的声明异常, 创建“[/apps/logs/sns_error.log]”的父目录失败… 主要原因是初始化配置文…

[暑假]Vue生命周期-笔记

什么是生命周期? 生命周期: 又名: 生命周期回调函数, 生命周期函数, 生命周期钩子. 所谓的生命周期函数, 就是Vue在关键时刻帮我们调用的一些特殊名称的函数 生命周期函数的名字不可更改, 但是函数的具体内容是程序员根据需求编写的 生命周期函数中的 this 指向是 vm 或 组件…

CSS样式:渐变色圆角边框

目录预期效果解决方法1.两层元素&#xff1a;外层渐变背景圆角内边距&#xff0c;里层圆角背景色2.伪元素&#xff1a;background-clip属性伪元素定位元素本身背景&#xff08;以伪元素背景色做边框&#xff09;3.单层元素&#xff1a; background-clipbackground-iamgebackgro…