index.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <view class="container" @click="handleDownloadQrIMg()">
  3. <img v-if="posterDataUrl" :src="posterDataUrl" class="poster-bg" width="100%" height="auto"/>
  4. <view v-else class="item-box" id="poster" >
  5. <img class="poster-bg" src="../../static/img/img38.jpg"/>
  6. <!-- <canvas
  7. :style="{ left: `${(canWeidth - 134) / 2}px`}"
  8. class="qr" canvas-id="qrCode-canvas" id="qrCode-canvas"></canvas> -->
  9. <canvas
  10. :style="{ left: `${(canWeidth - 134) / 2}px`}"
  11. class="qr" canvas-id="qrCode-canvas" id="qrCode-canvas"></canvas>
  12. </view>
  13. </view>
  14. </template>
  15. <script>
  16. import { mapState } from 'vuex';
  17. import html2canvas from 'html2canvas'
  18. import QRCode from 'qrcode'
  19. import { shareLoad } from '@/utils/wxAuthorized';
  20. export default {
  21. data() {
  22. return {
  23. url: '',
  24. src:'',
  25. posterDataUrl:'',
  26. poster: '',// 合成图片
  27. canHeight: 0,
  28. canWeidth: 0,
  29. size: 180,
  30. ratio: 1, //页面比例用于计算
  31. };
  32. },
  33. onLoad() {
  34. this.loadData();
  35. this.shareDate()
  36. this.$nextTick(() => {
  37. const query = uni.createSelectorQuery().in(this);
  38. query.select('.container').boundingClientRect(data => {
  39. this.ratio = data.width / 750;
  40. }).exec();
  41. // 获取画布宽高信息
  42. query.select('#qrCode-canvas').fields(
  43. {size: true},e => {
  44. console.log('获取画布宽高信息',e)
  45. this.canHeight = e.height;
  46. this.canWeidth = e.width;
  47. // this.ratio
  48. }).exec();
  49. });
  50. },
  51. computed: {
  52. ...mapState(['userInfo']),
  53. },
  54. methods: {
  55. // 请求载入数据
  56. async loadData() {
  57. let obj = this;
  58. obj.url = 'http://doctortest.igxys.com/index/#/pages/index/home' + '?spread=' + obj.userInfo.uid;
  59. obj.createQRCode();
  60. // obj.shareDate()
  61. },
  62. shareDate() {
  63. let obj = this;
  64. let url = 'http://doctortest.igxys.com/index/#/pages/index/home?spread=' + obj.userInfo.uid;
  65. let bool = uni.getStorageSync('weichatBrowser') || '';
  66. let data = {
  67. link: url, // 分享链接
  68. imgUrl: obj.userInfo.avatar, // 分享图标
  69. desc:obj.userInfo.nickname,
  70. title: obj.userInfo.nickname+'邀请您进入共享预约平台',
  71. success: function() {},
  72. };
  73. console.log(data,'datadatadata')
  74. console.log(shareLoad);
  75. shareLoad(data);
  76. },
  77. createQRCode () {
  78. let obj = this;
  79. //先用 QRCode 生成二维码 canvas,然后用 html2canvas 合成整张海报并转成 base64 显示出来
  80. this.$nextTick(() => {
  81.      setTimeout(function(){
  82. let canvas = document.getElementById('qrCode-canvas').children[0];
  83. // console.log(canvas,'canvas')
  84. // console.log(obj.url)
  85. QRCode.toCanvas(canvas,obj.url,(error) => {
  86. if (error) {
  87. console.log(error,'error')
  88. } else {
  89. //qrcode 生成的二维码会带有一些默认样式,需要调整下
  90. canvas.style.width = '140px'
  91. canvas.style.height = '140px'
  92. canvas.style.padding = '0px'
  93. let poster = document.getElementById('poster')
  94. html2canvas(poster).then(canvas => {
  95. // console.log(canvas.toDataURL("image/png").replace("image/png", "image/octet-stream"))
  96. obj.posterDataUrl = canvas.toDataURL();
  97. });
  98. }
  99. })
  100. },500);
  101.      });
  102. },
  103. handleDownloadQrIMg() {
  104. console.log('sssbb')
  105. const imgUrl = this.posterDataUrl
  106. // 如果浏览器支持msSaveOrOpenBlob方法(也就是使用IE浏览器的时候),那么调用该方法去下载图片
  107. if (window.navigator.msSaveOrOpenBlob) {
  108. var bstr = atob(imgUrl.split(',')[1])
  109. var n = bstr.length
  110. var u8arr = new Uint8Array(n)
  111. while (n--) {
  112. u8arr[n] = bstr.charCodeAt(n)
  113. }
  114. var blob = new Blob([u8arr])
  115. window.navigator.msSaveOrOpenBlob(blob, '分享二维码' + '.' + 'png')
  116. } else {
  117. // 这里就按照chrome等新版浏览器来处理
  118. const a = document.createElement('a')
  119. a.href = imgUrl
  120. a.setAttribute('download', '分享二维码')
  121. a.click()
  122. }
  123. },
  124. },
  125. };
  126. </script>
  127. <style lang="scss">
  128. page{
  129. height: 100%;
  130. }
  131. .container{
  132. width: 100%;
  133. height: 1400rpx;
  134. .item-box{
  135. width: 100%;
  136. height: 100%;
  137. margin: 0rpx auto;
  138. background-size: 100% 100%;
  139. .poster-bg{
  140. position: relative;
  141. height: 100%;
  142. width: 100%;
  143. margin: 0rpx auto;
  144. }
  145. .qr{
  146. width: 100%;
  147. height: 100%;
  148. position: absolute;
  149. top:9.6rem;
  150. // right: 0;
  151. // bottom: 0;
  152. // top:9.6rem;
  153. // left:6.5rem;
  154. }
  155. }
  156. }
  157. </style>