<template>
							 | 
						|
									<view class="promotion">
							 | 
						|
										
							 | 
						|
										
							 | 
						|
										<navbar title="二维码" leftClick @leftClick="$utils.navigateBack" />
							 | 
						|
										
							 | 
						|
										<view class="promotion-card">
							 | 
						|
											<!-- <view class="user-info"> -->
							 | 
						|
											<!-- <image class="image" :src="userInfo.headImage" mode="widthFix"></image> -->
							 | 
						|
											<!-- <image class="image" src="../../static/logo.png" mode="widthFix"></image> -->
							 | 
						|
											<!-- <view class="user-name">{{ userInfo.nickName }}</view> -->
							 | 
						|
											<!-- <view class="user-name">湖南第一深情</view> -->
							 | 
						|
											<!-- </view> -->
							 | 
						|
											<!-- <view class="invitation-code-img">
							 | 
						|
												<image 
							 | 
						|
												style="width: 400rpx;"
							 | 
						|
												:src="imagePath" mode="widthFix"></image>
							 | 
						|
											</view> -->
							 | 
						|
								
							 | 
						|
											<image style="width: 100%;" :src="imagePath" mode="widthFix"></image>
							 | 
						|
								
							 | 
						|
											<!-- <view class="invitation-code">加油站: {{ title }}</view> -->
							 | 
						|
											<canvas id="myCanvas" type="2d" canvas-id="firstCanvas1"></canvas>
							 | 
						|
										</view>
							 | 
						|
										<view class="btns">
							 | 
						|
											<view class="btn"
							 | 
						|
											@click="preservationImg(imagePath)">保存</view>
							 | 
						|
											<!-- <view class="btn">立即邀请</view> -->
							 | 
						|
										</view>
							 | 
						|
									</view>
							 | 
						|
								</template>
							 | 
						|
								
							 | 
						|
								<script>
							 | 
						|
									import {
							 | 
						|
										mapState
							 | 
						|
									} from 'vuex'
							 | 
						|
									export default {
							 | 
						|
										name: 'Promotion',
							 | 
						|
										computed: {
							 | 
						|
											...mapState(['userInfo']),
							 | 
						|
										},
							 | 
						|
										data() {
							 | 
						|
											return {
							 | 
						|
												url: '',
							 | 
						|
												title: '123123',
							 | 
						|
												baseUrl: '',
							 | 
						|
												canvas: {},
							 | 
						|
												imagePath: '',
							 | 
						|
											}
							 | 
						|
										},
							 | 
						|
										onShow() {
							 | 
						|
											this.getQrCode()
							 | 
						|
											this.$store.commit('getUserInfo')
							 | 
						|
										},
							 | 
						|
										methods: {
							 | 
						|
											getQrCode() {
							 | 
						|
												this.$api('getQrCode', res => {
							 | 
						|
													if (res.code == 200) {
							 | 
						|
														this.url = res.result.url
							 | 
						|
														this.title = res.result.name
							 | 
						|
														this.draw()
							 | 
						|
													}
							 | 
						|
												})
							 | 
						|
											},
							 | 
						|
											draw() {
							 | 
						|
								
							 | 
						|
												uni.showLoading({
							 | 
						|
													title: "拼命绘画中..."
							 | 
						|
												})
							 | 
						|
								
							 | 
						|
												wx.createSelectorQuery()
							 | 
						|
													.select('#myCanvas') // 绘制的canvas的id
							 | 
						|
													.fields({
							 | 
						|
														node: true,
							 | 
						|
														size: true
							 | 
						|
													})
							 | 
						|
													.exec((res) => {
							 | 
						|
														const canvas = res[0].node
							 | 
						|
														// 渲染上下文
							 | 
						|
														const ctx = canvas.getContext('2d')
							 | 
						|
														// Canvas 画布的实际绘制宽高
							 | 
						|
														const width = res[0].width
							 | 
						|
														const height = res[0].height
							 | 
						|
														// 初始化画布大小
							 | 
						|
														const dpr = wx.getWindowInfo().pixelRatio
							 | 
						|
								
							 | 
						|
														//根据dpr调整
							 | 
						|
														// dpr  2 4
							 | 
						|
														//      3 6
							 | 
						|
														let Ratio = dpr * 2
							 | 
						|
														console.log("bug", dpr)
							 | 
						|
														canvas.width = width * dpr
							 | 
						|
														canvas.height = height * dpr
							 | 
						|
								
							 | 
						|
														this.canvas = canvas
							 | 
						|
														ctx.scale(dpr, dpr)
							 | 
						|
														ctx.clearRect(0, 0, width, height)
							 | 
						|
														
							 | 
						|
														ctx.fillStyle = '#fff'
							 | 
						|
														ctx.fillRect(0, 0, canvas.width, canvas.height)
							 | 
						|
								
							 | 
						|
														//用户图片
							 | 
						|
														// const image = canvas.createImage()
							 | 
						|
														// image.onload = () => {
							 | 
						|
														// 	ctx.drawImage(image, 30, 18, 40, 40)
							 | 
						|
														// }
							 | 
						|
														// image.src = '/public/img/wechar_1.png'
							 | 
						|
														// image.src = this.userInfo.headImage
							 | 
						|
														ctx.fillStyle = 'black'
							 | 
						|
														ctx.font = '22px PingFangSC-regular';
							 | 
						|
								
							 | 
						|
														let s = this.title || '加油站'
							 | 
						|
								
							 | 
						|
														ctx.fillText(s, canvas.width / Ratio - s.length * 11, 50);
							 | 
						|
								
							 | 
						|
														//二维码图片
							 | 
						|
														const coderImage = canvas.createImage()
							 | 
						|
														coderImage.src = this.baseUrl + this.url
							 | 
						|
														coderImage.onload = () => {
							 | 
						|
															ctx.drawImage(coderImage,
							 | 
						|
																canvas.width / Ratio - 240 / 2, 100, 240, 240)
							 | 
						|
														}
							 | 
						|
								
							 | 
						|
								
							 | 
						|
														// 绘制完成后存储路径
							 | 
						|
								
							 | 
						|
														setTimeout(() => {
							 | 
						|
															wx.canvasToTempFilePath({
							 | 
						|
																x: 0,
							 | 
						|
																y: 0,
							 | 
						|
																width: this.canvas.width,
							 | 
						|
																height: this.canvas.height,
							 | 
						|
																canvas,
							 | 
						|
																success: (res) => {
							 | 
						|
																	var tempFilePath = res.tempFilePath;
							 | 
						|
																	this.imagePath = tempFilePath
							 | 
						|
																	uni.hideLoading()
							 | 
						|
																}
							 | 
						|
															});
							 | 
						|
														}, 600);
							 | 
						|
								
							 | 
						|
													})
							 | 
						|
								
							 | 
						|
											},
							 | 
						|
											back() {
							 | 
						|
												uni.navigateBack(-1)
							 | 
						|
											},
							 | 
						|
											preservationImg(img) {
							 | 
						|
												let that = this
							 | 
						|
												uni.authorize({
							 | 
						|
													/* scope.writePhotosAlbum 类型是保存到相册 */
							 | 
						|
													scope: 'scope.writePhotosAlbum',
							 | 
						|
													success() {
							 | 
						|
														/* 已授权进入 */
							 | 
						|
														/* 保存图片到相册方法方法 */
							 | 
						|
														that.imgApi(img);
							 | 
						|
													},
							 | 
						|
													complete(res) {
							 | 
						|
														/* 判断如果没有授权就打开设置选项让用户重新授权 */
							 | 
						|
														uni.getSetting({
							 | 
						|
															success(res) {
							 | 
						|
																if (!res.authSetting['scope.writePhotosAlbum']) {
							 | 
						|
																	/* 打开设置的方法 */
							 | 
						|
																	that.openInstall();
							 | 
						|
																}
							 | 
						|
															}
							 | 
						|
														});
							 | 
						|
													}
							 | 
						|
												});
							 | 
						|
											},
							 | 
						|
											imgApi(image) {
							 | 
						|
												/* 获取图片的信息 */
							 | 
						|
												uni.getImageInfo({
							 | 
						|
													src: image,
							 | 
						|
													success: function(image) {
							 | 
						|
														/* 保存图片到手机相册 */
							 | 
						|
														uni.saveImageToPhotosAlbum({
							 | 
						|
															filePath: image.path,
							 | 
						|
															success: function() {
							 | 
						|
																uni.showModal({
							 | 
						|
																	title: '保存成功',
							 | 
						|
																	content: '图片已成功保存到相册',
							 | 
						|
																	showCancel: false
							 | 
						|
																});
							 | 
						|
															},
							 | 
						|
															complete(res) {
							 | 
						|
																console.log(res);
							 | 
						|
															}
							 | 
						|
														});
							 | 
						|
													}
							 | 
						|
												});
							 | 
						|
											},
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								</script>
							 | 
						|
								
							 | 
						|
								<style lang="scss" scoped>
							 | 
						|
									.promotion {
							 | 
						|
										.promotion-card {
							 | 
						|
											width: 90%;
							 | 
						|
											margin: 100rpx auto 0rpx auto;
							 | 
						|
											box-shadow: 0rpx 0rpx 15rpx rgba(0, 0, 0, .2);
							 | 
						|
											border-radius: 15rpx;
							 | 
						|
											padding: 40rpx 30rpx;
							 | 
						|
											box-sizing: border-box;
							 | 
						|
								
							 | 
						|
											.user-info {
							 | 
						|
												display: flex;
							 | 
						|
												align-items: center;
							 | 
						|
								
							 | 
						|
												.image {
							 | 
						|
													width: 80rpx;
							 | 
						|
													height: 80rpx;
							 | 
						|
													border-radius: 50%;
							 | 
						|
													margin-right: 10rpx;
							 | 
						|
												}
							 | 
						|
								
							 | 
						|
												.user-name {
							 | 
						|
													font-size: 30rpx;
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											.invitation-code-img {
							 | 
						|
												display: flex;
							 | 
						|
												align-items: center;
							 | 
						|
												justify-content: center;
							 | 
						|
												margin: 100rpx 0rpx;
							 | 
						|
								
							 | 
						|
												.image {
							 | 
						|
													width: 30%;
							 | 
						|
													border-radius: 50%;
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
								
							 | 
						|
											.invitation-code {
							 | 
						|
												text-align: center;
							 | 
						|
												color: #818181;
							 | 
						|
												font-size: 28rpx;
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
								
							 | 
						|
										.btns {
							 | 
						|
											position: fixed;
							 | 
						|
											left: 0;
							 | 
						|
											bottom: 0;
							 | 
						|
											width: 100%;
							 | 
						|
											height: 120rpx;
							 | 
						|
											display: flex;
							 | 
						|
											background: #00aaff;
							 | 
						|
											color: white;
							 | 
						|
											font-size: 28rpx;
							 | 
						|
								
							 | 
						|
											.btn {
							 | 
						|
												flex: 1;
							 | 
						|
												display: flex;
							 | 
						|
												align-items: center;
							 | 
						|
												justify-content: center;
							 | 
						|
								
							 | 
						|
												&:nth-child(2) {
							 | 
						|
													background: orange;
							 | 
						|
												}
							 | 
						|
											}
							 | 
						|
										}
							 | 
						|
									}
							 | 
						|
								
							 | 
						|
									#myCanvas {
							 | 
						|
										position: fixed;
							 | 
						|
										left: 100%;
							 | 
						|
										/* visibility: hidden */
							 | 
						|
										/* visibility: hidden; */
							 | 
						|
										/* margin-top: 100rpx; */
							 | 
						|
										margin: 68rpx auto;
							 | 
						|
										width: 750rpx;
							 | 
						|
										height: 750rpx;
							 | 
						|
										/* line-height: 20px; */
							 | 
						|
										background-color: rgba(255, 255, 255, 1);
							 | 
						|
										text-align: center;
							 | 
						|
									}
							 | 
						|
								</style>
							 |