<template>
	<view class="promotion">
		
		<navbar title="二维码" 
		bgColor="#E3441A"
		color="#fff"
		leftClick @leftClick="$utils.navigateBack" />
		
		<view class="promotion-card">
			
			<image :src="userInfo.headImage" mode="aspectFill"
			class="headImage"></image>

			<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 class="uni-color-btn"
			@click="preservationImg(imagePath)">保存二维码</view>
		</view>
	</view>
</template>

<script>
	import { mapState } from 'vuex'
	export default {
		name: 'Promotion',
		computed: {
			...mapState(['userInfo']),
		},
		data() {
			return {
				url: '',
				title: '',
				baseUrl: 'https://image.hhlm1688.com/',
				canvas: {},
				imagePath: '',
			}
		},
		onShow() {
			this.getQrCode()
			this.$store.commit('getUserInfo')
		},
		methods: {
			getQrCode() {
				this.$api('getInviteCode', 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 nickName = this.userInfo.nickName || '绘制用户姓名'
						// ctx.fillText(nickName, canvas.width / Ratio - nickName.length * 11, 40);

						// ctx.font = '18px 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 {
		width: 100%;
		height: 100vh;
		background-color: $uni-color;
		.promotion-card {
			width: 90%;
			margin: 140rpx auto 0rpx auto;
			box-shadow: 0rpx 0rpx 15rpx rgba(0, 0, 0, .2);
			border-radius: 40rpx;
			padding: 40rpx 30rpx;
			box-sizing: border-box;
			background-color: #fff;
			position: relative;
			padding-top: 100rpx;
			.headImage{
				position: absolute;
				height: 180rpx;
				width: 180rpx;
				border-radius: 50%;
				top: -80rpx;
				left: 50%;
				transform: translate(-50%);
				border: 10rpx solid #fff;
				box-shadow: 0 0 10rpx 10rpx #00000013;
			}
		}
	}

	#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>