Vue生成二维码并进行二维码图片下载

news2024/9/17 7:48:49

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}
})
 <!-- 设备二维码 对话框 270px-->
        <el-dialog title="点位二维码" :visible.sync="codeOpen" :before-close="handleClose" width="500px" append-to-body>
            <div id="draggableWin" style="background-color:white">
                <el-container style="height: 300px;">
                    <el-header style="height: 80px;">
                        <div style="font-size:20px;margin-top: 25px;margin-left: -10px;color: black; height:100px">
                            Vue生成二维码并进行二维码图片下载
                        </div>
                    </el-header>
                    <el-container style="background-color:#18409A">
                        <el-aside width="260px" style="background-color:#18409A;color: white; font-size: 15px;">
                            <el-row style="color: white;">
                                <el-col autocomplete="off">
                                    <span style="color: white;">点位名称:{{ codePointName }}</span>
                                </el-col>
                                <el-col autocomplete="off">
                                    <span style="color: white; width: auto;">点位类型:{{ codePointType }}</span>
                                </el-col>
                                <el-col autocomplete="off">
                                    <span style="color: white; width: auto;">负责人:赵虎婷</span>
                                </el-col>
                                <el-col autocomplete="off">
                                    <span style="color: white; width: auto;">启用时间:{{ codeCreateTime }}</span>
                                </el-col>
                            </el-row>
                        </el-aside>
                        <el-main style=" margin-left: 20px; height: 200px; background-color:#18409A; padding: 15px"><vue-qr
                                ref="qrCode" @callback="callback" :text="codeText" :size="150" :correctLevel=3
                                :margin="5"></vue-qr></el-main>
                    </el-container>
                </el-container>
            </div>
            <el-col style=" text-align: center;  font-size: 15px; color: #82848a; margin-top: 10px;">请将该二维码张贴到对应位置</el-col>
            <span slot="footer" class="dialog-footer">
                <el-button @click="codeOpen = false">取 消</el-button>
                <el-button type="primary" @click="downloadQRCode">下 载</el-button>
            </span>
        </el-dialog>
 /**
         * 关闭二维码窗口
         */
        handleClose(done) {
            done();
        },
        callback(res) {
            console.log("正在下载图片", res)
        },
        downloadQRCode(res) {
            var shareContent = document.getElementById('draggableWin');
            html2canvas(shareContent, { scale: 2 }).then(imgUrl => {
                // console.log('转成图片', imgUrl);
                // // 转成图片,生成图片地址(如需将图片转为file 文件,请自行处理)

                var img = document.createElement('img');
                img.style.display = 'none';
                document.body.appendChild(img);
                var codeRemark = this.codeRemark;
                img.onload = function () {
                    var canvas = document.createElement('canvas');
                    canvas.width = img.width;
                    canvas.height = img.height;
                    var context = canvas.getContext('2d');
                    context.drawImage(img, 0, 0, img.width, img.height);
                    var url = canvas.toDataURL('image/png');

                    var a = document.createElement('a');
                    a.download = codeRemark + '二维码';
                    a.href = url;

                    document.body.appendChild(a);
                    a.click();

                    // 清理添加的元素
                    document.body.removeChild(a);
                    document.body.removeChild(img);
                };
                img.src = imgUrl.toDataURL("image/png", 0.8); //可将 canvas 转为 base64 格式

            });
        },

效果图:
在这里插入图片描述

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

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

相关文章

国民新旅游时代,OTA们如何制胜新周期?

文 | 螳螂观察&#xff08;TanglangFin&#xff09; 作者 | 图霖 消费全面复苏的大背景下&#xff0c;旅游业正迎来预期中的拐点。 一个显著表现是&#xff0c;旅游消费正在从可选消费转化成必选消费。 国内消费者旅游需求的不降反增&#xff0c;就是最好的印证。 同程研究…

shell脚本三

目录 一、循环语句 一、循环 二、for循环语句 1.列表循环 2.与c语言循环相似的for循环 3.使用for打印三角形以及乘法表 4.测试172.16.114.0网段存活的主机并将存活的主机IP地址写入文件中&#xff0c;未存活的主机放入另一文件中 三、while循环语句 四、until循环语句…

5.3 Windows驱动开发:内核取应用层模块基址

在上一篇文章《内核取ntoskrnl模块基地址》中我们通过调用内核API函数获取到了内核进程ntoskrnl.exe的基址&#xff0c;当在某些场景中&#xff0c;我们不仅需要得到内核的基地址&#xff0c;也需要得到特定进程内某个模块的基地址&#xff0c;显然上篇文章中的方法是做不到的&…

Java8新特性 ----- Lambda表达式和方法引用/构造器引用详解

前言 在讲一下内容之前,我们需要引入函数式接口的概念 什么是函数式接口呢? 函数式接口&#xff1a;有且仅有一个抽象方法的接口 java中函数式编程的体现就是Lambda表达式,你可以认为函数式接口就是适用于Lambda表达式的接口. 也可以加上注解来在编译层次上限制函数式接口 Fun…

关于2023年11月25日PMI认证考试有关事项的通知

PMP项目管理学习专栏https://blog.csdn.net/xmws_it/category_10954848.html?spm1001.2014.3001.54822023年8月PMP考试成绩出炉|微思通过率95%以上-CSDN博客文章浏览阅读135次。国际注册项目管理师(PMP) 证书是项目管理领域含金量最高的职业资格证书&#xff0c;获得该资质是项…

美团四年、字节三年,我的软件测试之路

前言 时间回到8年前&#xff0c;我人生中的第一份实习工作&#xff0c;是在某互联网公司做一个自动化测试工程师。当时的我可谓意气风发&#xff0c;想要大干一场&#xff0c;结果第一次做测试就出现了事故。由于对某些地方的不了解&#xff0c;把某一个地方侧漏了&#xff0c…

基于C#实现树状数组

有一种数据结构是神奇的&#xff0c;神秘的&#xff0c;它展现了位运算与数组结合的神奇魅力&#xff0c;太牛逼的&#xff0c;它就是树状数组&#xff0c;这种数据结构不是神人是发现不了的。 一、概序 假如我现在有个需求&#xff0c;就是要频繁的求数组的前 n 项和&#x…

2018年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版

文章目录 2018 年考研管理类联考数学真题一、问题求解&#xff08;本大题共 5 小题&#xff0c;每小题 3 分&#xff0c;共 45 分&#xff09;下列每题给出 5 个选项中&#xff0c;只有一个是符合要求的&#xff0c;请在答题卡上将所选择的字母涂黑。真题&#xff08;2018-01&a…

JavaScript实现右键菜单

1、代码实现 window.onload function () {(function () {// 自定义右键菜单内容并插入到body最后一个节点前let dom <div id"rightMenuBars"><div class"rightMenu-group rightMenu-small"><div class"rightMenu-item"><…

C#开发的OpenRA游戏之属性RenderSprites(8)

C#开发的OpenRA游戏之属性RenderSprites(8) 本文开始学习RenderSprites属性,这个属性是跟渲染有关的,因此它就摄及颜色相关的内容,所以我们先来学习一下调色板,这是旧游戏的图片文件保存的格式,如果放在现代来看,不会再采用这种方法,毕竟现在存储空间变大,便宜了,并…

RubbleDB: CPU-Efficient Replication with NVMe-oF

RubbleDB: CPU-Efficient Replication with NVMe-oF 前言 这是ATC2023的文章&#xff0c;作者来自哥伦比亚大学这篇工作在LSM-tree多副本存储的场景下&#xff0c;利用NVMe-oF技术避免了LSM-tree副本上的重复合并&#xff0c;减少了CPU开销。 Introduction 为了提供高可用性…

练习九-利用状态机实现比较复杂的接口设计

练习九-利用状态机实现比较复杂的接口设计 1&#xff0c;任务目的&#xff1a;2&#xff0c;RTL代码3&#xff0c;RTL原理框图4&#xff0c;测试代码5&#xff0c;波形输出 1&#xff0c;任务目的&#xff1a; &#xff08;1&#xff09;学习运用状态机控制的逻辑开关&#xff…

vue history路径编码

记录今天遇到的一个问题&#xff1a; 问题现状 有一个需要前端伪造302进行重定向的需求&#xff0c;我们需要将这样的一个路径&#xff1a;http://xxx.com/system-name/#/index&#xff0c;拼接在跳转地址的后面&#xff0c;进行重定向。拼接的方式是这样的&#xff1a; htt…

暗物质探测器认知教学VR元宇宙平台打破传统束缚

“飞船正在上升&#xff0c;马上就冲出大气层了!”这是一位在1&#xff1a;1还原的神舟飞船返回舱内借助VR设备置身元宇宙世界&#xff0c;沉浸式体验升空全过程的游客兴奋地说道。不仅如此&#xff0c;在载人飞船训练期&#xff0c;元宇宙技术为航天员虚拟一个逼真的太空世界&…

口碑好的猫罐头有哪些?宠物店受欢迎的5款猫罐头推荐!

快到双十二啦&#xff01;铲屎官们是时候给家里猫主子囤猫罐头了。许多铲屎官看大促的各种品牌宣传&#xff0c;看到眼花缭乱&#xff0c;不知道选哪些猫罐头好&#xff0c;胡乱选又怕踩坑。 口碑好的猫罐头有哪些&#xff1f;作为一个经营宠物店7年的老板&#xff0c;活动期间…

Windows平台如何实现RTSP流二次编码并添加动态水印后推送RTMP或轻量级RTSP服务

技术背景 我们在对接RTSP播放器相关的技术诉求的时候&#xff0c;遇到这样的需求&#xff0c;客户做特种设备巡检的&#xff0c;需要把摄像头拍到的RTSP流拉下来&#xff0c;然后添加动态水印后&#xff0c;再生成新的RTSP URL&#xff0c;供平台调用。真个流程需要延迟尽可能…

LL(1)语法分析程序设计与实现

制作一个简单的C语言词法分析程序_用c语言编写词法分析程序-CSDN博客文章浏览阅读322次。C语言的程序中&#xff0c;有很单词多符号和保留字。一些单词符号还有对应的左线性文法。所以我们需要先做出一个单词字符表&#xff0c;给出对应的识别码&#xff0c;然后跟据对应的表格…

FlinkCDC实现主数据与各业务系统数据的一致性(瀚高、TIDB)

文章末尾附有flinkcdc对应瀚高数据库flink-cdc-connector代码下载地址 1、业务需求 目前项目有主数据系统和N个业务系统,为保障“一数一源”,各业务系统表涉及到主数据系统的字段都需用主数据系统表中的字段进行实时覆盖,这里以某个业务系统的一张表举例说明:业务系统表Ta…

社群乱象,社群玩法正解

社群乱象&#xff0c;社群玩法正解 越来越不喜欢混社群了&#xff0c;从原有的好几百社群&#xff0c;精简到剩两三个。就这两三个&#xff0c;也貌似奄奄一息&#xff0c;命不久矣的感觉。 现在的社群&#xff0c;妥妥的已经被各路妖魔鬼怪给玩坏了。童话觉得这里面还有不少…