<template>
	<view class="page">
		<u-navbar title="设备二维码" :border-bottom="false" :background="bgc" title-color='#000'
			title-size='36' height='45'></u-navbar>
		<view class="ewm" style="margin-top: 300rpx;width: 750rpx;display: flex;justify-content: center;">
			<canvas id="qrcode" canvas-id="qrcode" style="width: 600rpx;height:700rpx;" />
		</view>
		<view class="saveQr" @click="saveQrcode()">
			保存二维码
		</view>
	</view>
</template>

<script>
	import UQRCode from 'uqrcodejs';
	export default {
		data() {
			return {
				sn:'',
				deptId:null
			}
		},
		onLoad(e) {
			this.sn = e.sn;
			this.deptId = uni.getStorageSync('deptId');
			this.generateQrcode();
		},
		methods: {
			generateQrcode() {
				const qr = new UQRCode();
				const qrSizeRpx = 600; // 二维码大小为600rpx
				const qrSizePx = uni.upx2px(qrSizeRpx); // 将rpx转换为px

				if (this.deptId == 100) {
					qr.data = 'https://dche.ccttiot.com?sn=' + this.sn;
				} else if (this.deptId == 101) {
					qr.data = 'https://dianche.chuantewulian.cn?sn=' + this.sn;
				}
				qr.size = qrSizePx; // 设置二维码大小为像素值

				// 创建 canvas 上下文
				const ctx = uni.createCanvasContext('qrcode', this);

				// 设置 qr 的 canvas 上下文
				qr.canvasContext = ctx;
				qr.make(); // 生成二维码数据

				// 绘制二维码
				qr.drawCanvas();

				// 手动绘制二维码的同时添加设备序列号(sn)
				const sn = this.sn ? 'SN: ' + this.sn : 'SN未知';

				// 延迟绘制,确保二维码绘制完成后再绘制文字
				setTimeout(() => {
					// 添加sn到二维码下面
					ctx.setFontSize(24); // 设置字体大小
					ctx.setFillStyle('black'); // 设置字体颜色
					ctx.setTextAlign('center'); // 设置文本居中
					
					// 在二维码下方绘制sn,调整y坐标确保sn显示在二维码下方且不被裁剪
					ctx.fillText(sn, qrSizePx / 2, qrSizePx + 40); 

					// 传入 true,保留之前绘制的内容
					ctx.draw(true);
				}, 100); // 延迟100毫秒确保二维码绘制完成
				this.showqr = true;
			},
			saveQrcode() {
				uni.canvasToTempFilePath({
					canvasId: 'qrcode',
					x: 0, 
					y: 0, 
					width: uni.upx2px(600),
					height: uni.upx2px(700), 
					success: (res) => {
						uni.saveImageToPhotosAlbum({
							filePath: res.tempFilePath,
							success: () => {
								uni.showToast({
									title: '保存成功',
									icon: 'success'
								});
								this.showqr = false;
							},
							fail: (err) => {
								uni.showToast({
									title: '保存失败',
									icon: 'none'
								});
							}
						});
					},
					fail: (err) => {
						uni.showToast({
							title: '生成二维码失败',
							icon: 'none'
						});
					}
				});
			},
		}
	}
</script>

<style lang="scss">
.page{
	.saveQr{
		margin: 0 auto;
		margin-top: 100rpx;
		display: flex;
		align-items: center;
		justify-content: center;
		width: 502rpx;
		height: 68rpx;
		background: #4C97E7;
		border-radius: 10rpx 10rpx 10rpx 10rpx;
		font-weight: 500;
		font-size: 36rpx;
		color: #FFFFFF;
	}
}
</style>