|
|
<template> <view> <button class='zfbtn m_l' @tap='formSubmit()'> 分享 </button> <button class='zfbtn m_l' @tap='saveAvatar()'> 保存头像 </button> <image :src="info.avatar" mode="aspectFill"></image> <tki-qrcode v-if="info.avatar" ref="qrcode" @result="qrR" :val="checkArea" :size="115" unit="px" background="#fff" foreground="#000" pdground="#000" :onval="true" :loadMake="true" :icon="info.avatar" />
<tki-qrcode v-else ref="qrcode" @result="qrR" :val="checkArea" :size="115" unit="px" background="#fff" foreground="#000" pdground="#000" :onval="true" :loadMake="true" :icon="require('@/static/images/system/payfail.png')" />
<view class="canvas-box"> <canvas style="width: 375px;height: 667px;position:fixed;top:9999px" canvas-id="mycanvas" /> </view>
<view class='imagePathBox' v-if="maskHidden == true && imagePath" @click="maskHidden = false "> <image :src="imagePath" class='shengcheng' mode="aspectFill"></image> <button class='baocun' @click.stop="saveBill()">保存相册,分享到朋友圈</button> </view> </view></template>
<script> const app = getApp() import tkiQrcode from "tki-qrcode"; // 二维码生成器
export default { components: { tkiQrcode }, data() { return { base64Img: '', checkArea: 'Cannot find module', inputValue: "", maskHidden: false, name: "kk", info: { avatar: '', nickname: '', id: '', tel: '', tags: [] }, showLogin: true, imagePath: '', userToken: '' } }, methods: { saveAvatar() { var that = this wx.saveImageToPhotosAlbum({ filePath: that.info.avatar, success(res) { wx.showModal({ content: '图片已保存到相册,赶紧晒一下吧~', showCancel: false, confirmText: '好的', confirmColor: '#333', success: function(res) { if (res.confirm) { console.log('用户点击确定'); that.maskHidden = false } }, fail: function(res) { that.maskHidden = false console.log(res) } }) }, fail(err) { console.log(err) } }) }, qrR(data) { this.base64Img = data; console.log('base64',this.base64Img) },
verifyUserInfo() { let userInfo = uni.getStorageSync('userinfo') || {}; if (!userInfo.id || !userInfo.nickname || !userInfo.avatar) { if (this.showLogin) { this.showLogin = false; this.$url('/pages/login/index?type=userinfo'); } else { this.showLogin = true; this.$url('/pages/index/index', { type: 'switch' }); } } }, getData() { let userinfo = uni.getStorageSync('userinfo') || {}; if (userinfo) { this.info = userinfo console.log('用户数据缓存',this.info) } else { this.$http(this.API.API_USER_CENTER).then(res => { this.info = res.data; console.log('用户数据接口',this.info) }) } },
createNewImg() { var that = this; var context = wx.createCanvasContext('mycanvas'); var path = "../../static/images/poster-1.jpg"; context.drawImage(path, 0, 0, 375, 667); //绘制二维码
context.drawImage(that.base64Img, 24, 530,120, 120); //绘制名字
// context.setFontSize(24);
// context.setFillStyle('#fff');
// context.setTextAlign('center');
// context.fillText(name, 34, 620);
context.stroke(); context.draw(); //将生成好的图片保存到本地,需要延迟一会,绘制期间耗时
setTimeout(function() { wx.canvasToTempFilePath({ canvasId: 'mycanvas', success: function(res) { that.imagePath = res.tempFilePath; if(that.imagePath) { that.canvasHidden = true that.maskHidden = true } console.log('海报生成成功') console.log(res) console.log('图片链接', that.imagePath) }, fail: function(res) { console.log(res); } }); }, 200); }, saveBill() { var that = this wx.saveImageToPhotosAlbum({ filePath: that.imagePath, success(res) { wx.showModal({ content: '图片已保存到相册,赶紧晒一下吧~', showCancel: false, confirmText: '好的', confirmColor: '#333', success: function(res) { if (res.confirm) { console.log('用户点击确定'); that.maskHidden = false } }, fail: function(res) { that.maskHidden = false } }) } }) }, formSubmit() { var that = this; wx.showToast({ title: '生成海报中...', icon: 'loading', duration: 1000 }); wx.hideToast() that.createNewImg() // if(that.imagePath) {
// that.maskHidden = true
// }
} }, onLoad(options) { this.qrcode = 'dadaa'
this.verifyUserInfo(); this.getData(); }
}</script>
<style> .bgImg { display: block; width: 100%; height: 366rpx; }
.mine { display: block; text-align: center; color: #333; margin-top: 44rpx; }
.code { display: block; text-align: center; color: #333; font-size: 76rpx; font-weight: bold; margin-top: 30rpx; }
.who { display: block; margin-top: 80rpx; font-size: 32rpx; color: #333; text-align: center; }
.inputBox { text-align: center; margin-top: 44rpx; }
.input { text-align: center; width: 440rpx; height: 88rpx; border-radius: 44rpx; background: #f5f5f5; font-size: 32rpx; display: inline-block; }
.btn { width: 160rpx; height: 88rpx; border-radius: 44rpx; background: linear-gradient(90deg, rgba(255, 226, 0, 1), rgba(255, 200, 11, 1)); box-shadow: 0px 4px 8px 0px rgba(255, 200, 11, 0.5); color: #333; font-size: 32rpx; display: inline-block; line-height: 88rpx; margin-left: 40rpx; }
button[class="btn"]::after { border: 0; }
.tishi { display: block; text-align: center; color: #999; margin-top: 30rpx; }
.shareText { display: block; text-align: center; color: #333; font-size: 28rpx; margin-top: 100rpx; }
.imgBox { text-align: center; width: 100%; margin-top: 60rpx; padding-bottom: 120rpx; }
.img { display: inline-block; width: 100%; height: 100%; }
.m_l { margin-left: 180rpx; }
.zfbtn { display: inline-block; width: 120rpx; height: 120rpx; border-radius: 50%; background: transparent; outline: none; border: 0; padding: 0; }
button[class="zfbtn"]::after { border: 0; }
button[class="zfbtn m_l"]::after { border: 0; }
.imagePathBox { width: 100%; height: 100%; background: rgba(0, 0, 0, 0.7); position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: 10; }
.shengcheng { width: 80%; height: 80%; position: fixed; top: 50rpx; left: 50%; margin-left: -40%; z-index: 10; }
.baocun { display: block; width: 80%; height: 80rpx; padding: 0; line-height: 80rpx; text-align: center; position: fixed; bottom: 50rpx; left: 10%; background: #ffe200; color: #333; font-size: 32rpx; border-radius: 44rpx; }
button[class="baocun"]::after { border: 0; }</style>}</style>
|