【Vue】二维码生成
按组长提供的样例,功能比较相符合的是这个博客:
https://www.jianshu.com/p/8d59107e1992
这个博客引用的是这篇文章:
https://blog.csdn.net/wwqqqq123/article/details/90261994
如何使用和参数说明很清楚,这里我就直接贴我写的DEMO
东西还没要求要弄上去,但是我自己先弄出来,怕后面需求变动又说需要了
首先主界面会放一个对话框:
<el-dialog
v-if="qrCodeVisible"
title="二维码生成"
:append-to-body="true"
:visible.sync="qrCodeVisible"
width="450px"
class="roll-dialog"
>
<qr-code-page :rooms="changedList" />
</el-dialog>
会传递选中的房间列表数据
二维码对话框页面:
logo随便引用一个小图标
大小200像素
text属性就是存储的参数,因为不确定传什么,先放上场所编号和房间号
因为是房间列表,所以传递若干个房间,用div包裹组件再遍历
<template>
<div> <div
class="qrCode-border"
v-for="(room, idx) in rooms"
:key="idx"
align="center"
>
<h3>房号:{{room.roomNo}}</h3>
<vue-qr
:logo-src="logoSrc"
:size="200"
:auto-color="true"
:dot-scale="1"
:text="room.placeCode + '-' + room.roomNo"
/>
</div> </div>
</template> <script> import VueQr from 'vue-qr'
export default {
name: 'QrCodePage',
components: {
VueQr
},
props: {
rooms: {
type: Array,
default() {
return []
}
}
},
data() {
return {
logoSrc: '/favicon.ico'
}
}
}
</script> <style scoped>
.qrCode-border {
margin: 20px 0px;
}
</style>
解决对话框过长的问题,设置对话框的滚动条
https://blog.csdn.net/qq_32837111/article/details/121248211
效果:

在确定这个功能之后,发现是一个小程序的二维码生成
则这样vue-qr组件没啥用了,二维码的生成是在后台完成的
拿到微信接口的Token之后再请求二维码接口获取图片
/**
* 获取小程序码,数量暂无限制
*/
public final static String APPLET_QRCORE_UNLIMIT = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN"; /**
* 获取小程序码,数量限制
*/
public final static String APPLET_QRCORE_GET = "https://api.weixin.qq.com/wxa/getwxacode?access_token=ACCESS_TOKEN"; /**
* 封装小程序二维码相关信息
*
* @param placeCode 场所编号
* @param roomNo 房间号
* @param dataMap 返回结果map信息
* @param redisTemplate redis工具类
* @return
* @author wangkun
* @createTime 2022/3/14 16:15
*/
public final static void packageAppletQrcodeInfo(String placeCode, String roomNo, Map<String, Object> dataMap, RedisTemplate<String, Object> redisTemplate) {
//step1 获取小程序token信息
String accessToken = redisTemplate.opsForValue().get(ApiConstants.CACHE_KEY_AISW_WX_APPLET_TOKEN_PREFIX).toString();
String requestUrl = APPLET_QRCORE_GET.replace("ACCESS_TOKEN", accessToken);
//封装小程序二维码参数值
JSONObject paramJson = new JSONObject();
paramJson.put("width", "280");
StringBuffer sceneData = new StringBuffer();
//sceneData.append(placeCode).append("##").append(roomNo);
sceneData.append("pages/index/index").append("?c=").append(placeCode).append("&r=").append(roomNo);
paramJson.put("path", sceneData.toString());
RSClient rsClient = new RSClient(requestUrl);
AppletDataQueryApi qrCodeQueryApi = rsClient.createObject(AppletDataQueryApi.class, 60000, 60000);
byte[] qrCodeByte = qrCodeQueryApi.sendQrcodeData(paramJson.toString());
if (!ChkUtil.isEmpty(qrCodeByte)) {
String qrCodeBaseImg64 = "data:image/png;base64," + Base64.getEncoder().encodeToString(qrCodeByte).replaceAll("\r\n", "");
dataMap.put("imagBase", qrCodeBaseImg64);
}
}
接口响应结果:

返回Base64图片编码,直接传给img的src属性上面
前端接口获取数据:
created() {
this.getRoomQrcodePics()
},
methods: {
async getRoomQrcodePics() {
const rooms = this.rooms.map(room => room.roomNo).toString()
const { data: res } = await getRoomQrCodes({
placeCode: this.rooms[0].placeCode,
rooms: rooms
})
console.log(res)
this.qrCodeInfoList = res
this.loadingFlag = false
},
}
标签渲染:
<div v-if="!loadingFlag" ref="qrCodeZone" class="container">
<div
v-for="(qrCode, idx) in qrCodeInfoList"
:key="idx"
class="qrCode-border"
align="center"
>
<!--<img :src="qrCode.imagBase">-->
<!--<img src="./../../../assets/images/test-qrCode.png" alt="">-->
<div class="qrCode-info">
<img :src="qrCode.imagBase">
<div class="room">房间号:{{ qrCode.roomNo }}</div>
<div class="placeName">{{ qrCode.placeName }}</div>
</div>
</div>
</div>
设置样式渲染,因为这个二维码需要被打印出来贴在房间里面直接用:
所以对div元素嵌套了一个背景图,然后再把二维码摆在上面
.qrCode-border {
width: 500px;
height: 1000px;
margin: 10px 0px;
background-image: url('./../../../assets/images/qrCode-bg.png');
background-size: 100%;
position: relative;
float: left;
border-radius: 15px;
}
.qrCode-border:nth-child(odd) {
margin-right: 20px;
}
.qrCode-info {
position: absolute;
left: 50%;
top: 21%;
transform: translate(-50%, -21%);
height: 285px;
}
.qrCode-info .room {
font-size: 30px;
font-weight: bolder;
color: black;
margin: 5px;
}
.qrCode-info .placeName {
font-size: 20px;
font-weight: bolder;
color: black;
}
上面只能让二维码直接浏览,为了方便用户打印,还需要让预览界面生成图片下载下来
这里参考了两篇博客来实现:
把元素转换成图片参考博客
https://blog.csdn.net/Mr__proto__/article/details/124481187
https://www.jianshu.com/p/eb963fc867b8
抓取选中的元素,然后转成BASE64编码来下载
生成逻辑和下载逻辑:
spawnPicture() {
html2canvas(this.$refs.qrCodeZone).then((canvas) => {
const dataURL = canvas.toDataURL('image/png')
// 这里是转换成base64格式的
this.picData = dataURL
console.log(dataURL)
// 生成下载资源
const link = document.createElement('a')
// 去掉此标签的所有样式避免展示出a标签
link.style.display = 'none'
// 把获取到的流文件放到href属性里
link.href = dataURL
// 调用download属性,并添加名字
link.setAttribute('download', '二维码.png')
// 添加这个a标签到body上
document.body.appendChild(link)
// 触发click事件
link.click()
})
}
【Vue】二维码生成的更多相关文章
- Vue 二维码生成插件
1. 安装 qrcode.vue 仓库地址 // vue2 安装1.x版本.vue3 安装3.x版本 npm install --save qrcode.vue // 或 yarn add qrcod ...
- [开源]C#二维码生成解析工具,可添加自定义Logo
二维码又称 QR Code,QR 全称 Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的 Bar Code 条形码能存更多的信息,也能表示更多的数据类型:比如:字 ...
- 聊聊 Web 项目二维码生成的最佳姿势
在设计和实现的过程之后,你永远不知道部署上去的程序会已什么样的姿势运行. 本篇借一次生成二维码逻辑的不同实现,阐述 Web 项目中二维码生成的正确姿势. 文中如有批量,欢迎各位看客老爷拍砖.试运行前5 ...
- .NET 二维码生成(ThoughtWorks.QRCode)
引用ThoughtWorks.QRCode.dll (源代码里有) 1.简单二维码生成及解码代码: //生成二维码方法一 private void CreateCode_Simple(string n ...
- iOS开发 二维码生成
基于libqrencode的二维码生成 + (void)drawQRCode:(QRcode *)code context:(CGContextRef)ctx size:(CGFloat)size { ...
- PHP二维码生成的方法(google APi,PHP类库,libqrencode等)
原文地址: http://blog.csdn.net/liuxinmingcode/article/details/7910975 ================================== ...
- Android 二维码 生成和识别(附Demo源码)
今天讲一下目前移动领域很常用的技术——二维码.现在大街小巷.各大网站都有二维码的踪迹,不管是IOS. Android.WP都有相关支持的软件.之前我就想了解二维码是如何工作,最近因为工作需要使用相关技 ...
- Chrome浏览器二维码生成插件
猛击就可以使用啦->>>猛击使用 源码如下: 源码打包 源码: jquery-2.1.3.min.js jquery.qrcode.min.js https://gith ...
- Android 二维码 生成和识别(转)
原博客地址 :http://www.cnblogs.com/weixing/archive/2013/08/28/3287120.html 还有几个写的也可以参考一下:http://www.itnos ...
- wex5 实战 二维码生成,扫描,蓝牙打印
给人设计了一个小模块,要求是,把一个单号生成二维码,实现扫描查询单号具体信息,并能通过蓝牙把二维码打印出来.功能实现并不复杂,今天一口气把它搞定.来看效果. 一 效果演示: 二.二维码生成 1 在 ...
随机推荐
- Grafana监控系统的构建与实践
本文深入探讨了Grafana的核心技术.数据源集成.仪表盘与可视化构建以及监控与告警配置,旨在为专业从业者提供全面的Grafana技术指南. 关注[TechLeadCloud],分享互联网架构.云服务 ...
- INFINI Labs 产品更新 | Easysearch 1.8.2 发布优化 CCR 性能
INFINI Labs 产品又更新啦~,包括 Easysearch v1.8.0.Gateway.Console.Agent.Loadgen v1.25.0.本次各产品更新了很多亮点功能,如 Easy ...
- Unity3D 内存管理非代码技巧
在场景管理器新建 gameobjct 使用代码在类初始化时 NEW 普肉fai包(包)然后将相同的类NEW够挂载到 gameobjct子节点上 在操控列表中类的时候用for循环遍历操作移动还是怎么样( ...
- SpringBoot启动报错:Parameter 0 of method hmset in com.qcby.rbac.util.RedisUtils required a bean of type
SpringBoot启动报错,报错信息如下: 报错是由于A类中定义了含参数的构造函数,Spring自动构造和注入时未为该Bean传入参数,引起报错. 查了很多资料,最后发现,我是因为注释的时候没有把@ ...
- 各种语言的OEP大全
Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 各种语言的OEP大全 日期:2017-5-19 阿珏 教程 ...
- Android程序获取鸿蒙手机设备信息(是否鸿蒙手机、版本号、小版本号等)
1.效果图 鸿蒙手机 --> 关于手机的截图: Android程序获取鸿蒙手机设备信息的截图: 2.实现 本案例DEMO的实现主要借鉴了网上现有的资料: https://blog.csdn.ne ...
- Linux下挂载NTFS格式的U盘
NTFS是Windows下的格式,在Linux下是识别不了的,要想在Linux上挂载NTFS格式的U盘需要安装软件以提供支持.软件名为ntfs-3g. 1.下载安装包 https://tuxera.c ...
- .NET 高效灵活的API速率限制解决方案
前言 FireflySoft.RateLimit是基于.NET Core和.NET Standard构建,支持多种速率限制算法和策略,包括固定窗口.滑动窗口.漏桶.令牌桶等.通过简单的配置和集成,开发 ...
- Java的运行机制和JDK,JRE,JVM的区别
源文件(Java文件) > 编译器 > 字节码(class文件) > JVM(java虚拟机) > 操作系统 1.java首先利用文本编辑器写java源程序, ...
- 张高兴的 MicroPython 入门指南:(一)环境配置、Blink、部署
目录 什么是 MicroPython 环境配置 硬件部分 软件部分 Hello World! Blink Pico 的引脚 常见电子元件 面包板 跳线 开关 发光二极管 电阻 使你的 Pico 闪烁 ...