xxx.vue

  1. <template>
  2. <a-modal
  3. class="dialogRecharge"
  4. title="活动链接及二维码"
  5. v-model="visible"
  6. width="520px"
  7. :destroyOnClose="true"
  8. :footer="null"
  9. @cancel="$emit('close')"
  10. >
  11. <a-tabs type="card" v-model="tabKey" @change="getUrl">
  12. <a-tab-pane tab="H5页面" key=""></a-tab-pane>
  13. <a-tab-pane tab="微信小程序" key=""></a-tab-pane>
  14. <a-tab-pane tab="抽奖大屏" key=""></a-tab-pane>
  15. </a-tabs>
  16.  
  17. <div class="codeBox">
  18. <div class="img">
  19. <qriously :id="'mycanvas' + tabKey" :value="dataObj.url" :size="" />
  20. </div>
  21. <a-button class="download" @click="downqriousl('mycanvas' + tabKey)">下载二维码</a-button>
  22. <div class="copyLink">
  23. <a-input-search v-model="dataObj.url" placeholder="51hejia.com....">
  24. <a-button slot="enterButton">复制链接</a-button>
  25. </a-input-search>
  26. <div class="btn" @click="Clip($event, dataObj.url)"></div>
  27. </div>
  28. </div>
  29.  
  30. </a-modal>
  31. </template>
  32.  
  33. <script>
  34. import serviceMarketing from "@/service/marketing.js";
  35. import Clipboard from 'clipboard';
  36. export default {
  37. data() {
  38. return {
  39. // visible: true,
  40. visible: false,
  41. itemData: {},
  42. tabKey: '',
  43. dataObj: {
  44. url: ''
  45. },
  46. };
  47. },
  48. created() {
  49. },
  50. methods: {
  51. Clip (event, text) {
  52. let self = this
  53. const clipboard = new Clipboard(event.target, {
  54. text: () => text
  55. });
  56. clipboard.on('success', () => {
  57. self.$message.success('复制成功')
  58. clipboard.off('error');
  59. clipboard.off('success');
  60. clipboard.destroy();
  61. });
  62. clipboard.on('error', () => {
  63. self.$message.error('复制失败,请刷新试试')
  64. clipboard.off('error')
  65. clipboard.off('success')
  66. clipboard.destroy()
  67. });
  68. clipboard.onClick(event);
  69. },
  70. downqriousl(id){
  71. console.log(id)
  72. const type = 'png'
  73. let canvas = document.getElementById(id).querySelector('canvas');
  74. let imgdata=canvas.toDataURL(type);
  75. //将mime-type改为image/octet-stream,强制让浏览器下载
  76. let fixtype=function(type){
  77. type=type.toLocaleLowerCase().replace(/jpg/i,'jpeg');
  78. let r=type.match(/png|jpeg|bmp|gif/)[];
  79. return 'image/'+r;
  80. };
  81. imgdata=imgdata.replace(fixtype(type),'image/octet-stream');
  82. //将图片保存到本地
  83. let savaFile=function(data,filename)
  84. {
  85. let save_link=document.createElementNS('http://www.w3.org/1999/xhtml', 'a');
  86. save_link.href=data;
  87. save_link.download=filename;
  88. let event=document.createEvent('MouseEvents');
  89. event.initMouseEvent('click',true,false,window,,,,,,false,false,false,false,,null);
  90. save_link.dispatchEvent(event);
  91. };
  92. let filename=''+new Date().getSeconds()+'.'+type;
  93. //用当前秒是解决重名的问题 不行就换成毫秒
  94. savaFile(imgdata,filename);
  95. },
  96. getUrl () {
  97. let self = this
  98. self.$get(serviceMarketing.lotteryUrl.apiUrl, {
  99. id: this.itemData.id,
  100. type: this.tabKey
  101. },(res => {
  102. if(res.statusCode && res.statusCode == ""){
  103. this.dataObj = res.data
  104. } else {
  105. self.$message.error(res.reason,);
  106. }
  107. }),serviceMarketing.lotteryUrl.domain);
  108. },
  109. modalOpen(itemData) {
  110. console.log(itemData)
  111. this.visible = true;
  112. this.itemData = itemData
  113. this.getUrl()
  114. }
  115. }
  116. };
  117. </script>
  118.  
  119. <style lang="less" scoped>
  120. .codeBox {
  121. text-align: center;
  122. .img{
  123. width: 180px;
  124. height: 180px;
  125. margin: 35px auto 15px;
  126. // border:1px solid red;
  127. background: #f4f4f4;
  128. border-radius: 5px;
  129. canvas {
  130. width: %;
  131. height: %;
  132. }
  133. }
  134. .download {
  135. width: 180px;
  136. margin-bottom: 10px;
  137. }
  138. .copyLink {
  139. margin:35px 20px 15px;
  140. position: relative;
  141. .btn{
  142. width: 90px;
  143. position: absolute;
  144. top: ;
  145. right: ;
  146. bottom: ;
  147. z-index: ;
  148. cursor: pointer;
  149. }
  150. }
  151. }
  152. </style>

https://www.cnblogs.com/ruthless/p/9970133.html

https://segmentfault.com/a/1190000014875645

.

vue-qriously 生成二维码并下载、cliploard复制粘贴的更多相关文章

  1. vue 中生成二维码之爬坑之路

    最近在做vue中项目,有个需求是在你提交信息后把后台返给你的链接生成二维码. 一共使用了两种生成二维码的方法 1.vue-qr 这个是在一进入页面直接生成二维码,具体介绍见文档:https://www ...

  2. Springboot生成二维码并下载图片png支持打包成zip

    pom.xml <!--二维码--> <dependency> <groupId>com.google.zxing</groupId> <arti ...

  3. 详细QRCode生成二维码和下载实现案例

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using ThoughtWo ...

  4. Vue——前端生成二维码

    与后端生成二维码相比,前端生成二维码更具有灵活性,下面就介绍两种前端生成二维码的方式,两种方式相比之下,vue-qr比qrcode多了一个再中间添加logo的功能. 方式一:qrcode npm np ...

  5. vue中生成二维码

    <template> <div id="qrcode" ></div> </template> <script> imp ...

  6. iOS开发——高级技术&生成二维码

      生成二维码 因为项目里需要新增个功能,该功能用到了二维码技术.于是我便查阅了资料,先学习了二维码的生成. 我们使用libqrencode库来生成二维码.下载地址http://download.cs ...

  7. 链接生成二维码-PHP

    原文:http://www.upwqy.com/details/20.html 链接生成二维码 首先下载phpqrcode phpqrcode.zip 我这里使用的是TP5,把下载好的类库 放入到ex ...

  8. phporjquery生成二维码

    一.php生成二维码 下载文章末尾链接中phpcode文件 include "./phpqrcode/qrlib.php"; //QRcode::png('http://www.b ...

  9. vue2.0生成二维码图片并且下载图片到本地兼容写法

    vue生成二维码图片,这里使用的是qrcode.js 这个插件(亲测写法,兼容没有问题) 第一步,下载插件 需要注意,这里下载的是qrcodejs2 cnpm install --save qrcod ...

随机推荐

  1. 利用ansible书写playbook搭建HAProxy+Keepalived+PXC负载均衡和高可用的PXC环境续

    ansible.playbook.haproxy.keepalived.PXC haproxy+keepalived双主模式调度pxc集群 HAProxy介绍 反向代理服务器,支持双机热备支持虚拟主机 ...

  2. mysql考生号后三位对出密号

    select mihao,substring(t1.kaohao, -3)  from t_zhaosheng_zhiyuan as t1 where substring(t1.kaohao, -3) ...

  3. Python爬虫入门——使用requests爬取python岗位招聘数据

    爬虫目的 使用requests库和BeautifulSoup4库来爬取拉勾网Python相关岗位数据 爬虫工具 使用Requests库发送http请求,然后用BeautifulSoup库解析HTML文 ...

  4. centos7部署postgresql集群高可用 patroni + etcd 之patroni篇

    实验环境:centos7.4纯净版 postgres版本: 9.6.15 etcd版本:3.3.11 patroni版本:1.6.0 patroni介绍可参考:https://github.com/z ...

  5. 关于AndroidStudio项目app在手机上运行遇到登录网络问题的解决

    又得提到我熟悉的12月份末尾,依旧想着把自己遇到的问题给大家看看,顺便分享我的解决办法. 看过我第一个发的随笔就知道,我遇到过给项目app打包成apk的问题啊,虽然解决了,但是运行到手机上 就又出现了 ...

  6. oracle 按每天,每周,每月,每季度,每年查询统计数据

    oracle 按每天,每周,每月,每季度,每年查询统计数据 //按天统计 select count(dataid) as 每天操作数量, sum() from tablename group by t ...

  7. 【洛谷P5158】 【模板】多项式快速插值

    卡常严重,可有采用如下优化方案: 1.预处理单位根 2.少取几次模 3.复制数组时用 memcpy 4.进行多项式乘法项数少的时候直接暴力乘 5.进行多项式多点求值时如果项数小于500的话直接秦九昭展 ...

  8. CTF入门(一)

    ctf入门指南 如何入门?如何组队? capture the flag 夺旗比赛 类型: Web密码学pwn 程序的逻辑分析,漏洞利用windows.linux.小型机等misc 杂项,隐写,数据还原 ...

  9. requestLayout() improperly called by xxxxxxxxxxxxxxxxxxx ScrollViewContainer 问题

    当scrollview内的内容更改大小时,Scrollview不会自行调整大小.效果是,当内容变小时,内容将留在原来的位置,当内容变大时,无法看到.仅当ScrollView位于作为MasterDeta ...

  10. 1-开发共享版APP(源码介绍)-BUG修复

    这一系列文章将介绍APP的源码,这一节作为所有BUG问题修复! https://www.cnblogs.com/yangfengwu/category/1512162.html    //开发共享版A ...