|
|
<template> <view> <view class="flex justify-center lf-m-t-20"> <!-- <image src="../../static/images/bill.png" mode="widthFix" style="height: 1220rpx;width: 686rpx;"></image> --> <image v-if="imagePath" :src="imagePath" mode="widthFix"></image> </view>
<view class="canvas-box"> <canvas style="width: 375px;height: 600px;position:fixed;top:9999px" canvas-id="mycanvas" /> </view>
<view class="btn-bottom" style="bottom: 40rpx;"> <view class="padding-lr-lg"> <button class="cu-btn block bg-orange lg" style="border-radius: 42rpx;" @tap="saveBill()"> <text class="lf-font-32 text-white">保存</text> </button> </view>
<!-- <view class="flex justify-center align-center lf-m-t-30"> <view class="lf-color-gray lf-font-28">https://hbdsufiewhuifusikj.com</view>
<view class="lf-font-24 text-orange lf-m-l-30" @click="copy('https://hbdsufiewhuifusikj.com')">复制</view> </view> --> </view>
</view></template>
<script> export default { data() { return { base64Img: '', checkArea: 'Cannot find module', maskHidden: false, info: { avatar: '', nickname: '', id: '', tel: '', tags: [] }, showLogin: true, imagePath: '',
userToken: '', wxCode: '', onceCode: '', backgroundImg: '' } }, onLoad() { wx.showToast({ title: '生成海报中...', icon: 'loading', duration: 100000 }); this.getWxCode() this.getBackground() }, methods: { getBackground() { let _this = this _this.$http(_this.API.API_BILLBACKGROUND, { type: 'telent_share' }).then(res => { let img = res.data.img_url if (img) { wx.getImageInfo({ src: img, success: function(sres) { _this.backgroundImg = sres.path console.log('临时路径',_this.backgroundImg) } }) } }) }, getWxCode() { let userInfo = uni.getStorageSync('userinfo') || {}; const token = this.$shared.createToken({user_id: userInfo.id}); let options = { route: 'home', pt: 2, id: 2, share_id: userInfo.id, scene_code: this.$scene.V2_INVITE_SHAREPOSTER } this.generateKooken(token, options); // 谁分享了就生成一个token
this.$http(this.API.API_WXBILL, { scene: token, page: 'pages/route/index', width: '2800' }).then(res => { this.wxCode = res.data.base_url if (this.wxCode) { this.getwxCodeImg() } }) }, generateKooken(token, options){ options.version = this.API.VERSION; let values = JSON.stringify(options); values = encodeURIComponent(values); this.$http(this.API.API_WAREHOUSE_SET, { key: token, value: values }).then(res => { console.log("res", token, res); }); }, //保存二维码
getwxCodeImg() { var imgSrc = this.wxCode; //base64编码
var save = wx.getFileSystemManager(); var number = Math.random(); save.writeFile({ filePath: wx.env.USER_DATA_PATH + '/pic' + number + '.jpg', data: imgSrc, encoding: 'base64', success: res => { this.onceCode = wx.env.USER_DATA_PATH + '/pic' + number + '.jpg' console.log(this.onceCode) if (this.onceCode && this.backgroundImg) { this.createNewImg() }else if(!this.onceCode){ this.$msg('小程序码生成失败!') }else if(!this.backgroundImg){ this.$msg('海报背景图生成失败!') } }, fail: err => { console.log(err) } }) }, createNewImg() { var that = this; var context = wx.createCanvasContext('mycanvas'); console.log('画布', that.backgroundImg) var path = that.backgroundImg; context.drawImage(path, 0, 0, 375, 600); //绘制二维码
let wxcode = that.onceCode context.drawImage(wxcode, 18, 460, 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 wx.hideToast() } console.log('海报生成成功,图片链接', that.imagePath) }, fail: function(res) { console.log(res); } }); }, 900); }, 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 } }) } }) }, // 点击复制
copy(text) { uni.setClipboardData({ data: text }); }, } }</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>
|