From 241d7531a0d5d6702e6c254c72a1b6feed86794f Mon Sep 17 00:00:00 2001
From: xuxueyang <xuxy@fengyuntec.com>
Date: 星期四, 10 十月 2024 16:30:47 +0800
Subject: [PATCH] update

---
 pages.json                                                |    8 -
 sub_pages/partner/partner-info/partner-code-v2.vue        |    2 
 sub_pages/partner/partner-info/hj-placard/shareImages.vue |  292 ++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 293 insertions(+), 9 deletions(-)

diff --git a/pages.json b/pages.json
index f716fba..99ba70c 100644
--- a/pages.json
+++ b/pages.json
@@ -308,14 +308,6 @@
 					}
 				},
 				{
-					"path": "partner-info/partner-code-v2",
-					"style": {
-						"navigationBarTitleText": "合伙人推广二维码",
-						"enablePullDownRefresh": false
-					}
-				},
-
-				{
 					"path": "order-manage/order-manage",
 					"style": {
 						"navigationBarTitleText": "订单管理",
diff --git a/sub_pages/partner/partner-info/hj-placard/shareImages.vue b/sub_pages/partner/partner-info/hj-placard/shareImages.vue
new file mode 100644
index 0000000..6f84159
--- /dev/null
+++ b/sub_pages/partner/partner-info/hj-placard/shareImages.vue
@@ -0,0 +1,292 @@
+<template>
+	<view style="position: fixed;z-index: -9999;">
+		<canvas id="myQrcode" :canvas-id="canvasID" :style="{width:canvasWidth+'px',height:canvasHeight+'px'}"></canvas>
+		<view v-if="qrCode == ''">
+			<QRCode ref="qrcode" />
+		</view>
+	</view>
+</template>
+
+<script>
+	import QRCode from "../qr_code/qrcode.vue"
+	var _this;
+	export default {
+		name: 'canvas-images',
+		props: {
+			// canvasID 等同于 canvas-id
+			canvasID: {
+				Type: String,
+				default: 'myQrcode'
+			},
+			canvasWidth: { // 画布宽度
+				Type: 'int',
+				default: 375
+			},
+			canvasHeight: { // 画布高度
+				Type: 'int',
+				default: 650
+			},
+			shareTitle: { // 分享标题
+				Type: 'String',
+				default: '我是这张图片的标题'
+			},
+			goodsTitle: { // 商品宣传标题
+				Type: 'String',
+				default: ''
+			},
+			goodsTitle2: { // 商品宣传标题
+				Type: 'String',
+				default: ''
+			},
+
+			shareImage: { // 分享图片
+				Type: 'String',
+				default: ''
+			},
+			qrSize: { // 二维码大小
+				Type: 'int',
+				default: 100
+			},
+			qrUrl: { // 生成二维码的链接
+				Type: 'String',
+				default: 'https://ext.dcloud.net.cn/plugin?id=5747'
+			}
+		},
+		components: {
+			QRCode
+		},
+		data() {
+			return {
+				qrCode: '', // 二维码
+				localImgPath: '',
+				canvas: undefined
+			}
+		},
+		mounted() {
+			_this = this;
+		},
+		methods: {
+			// downloadImg() {
+			// 	let that = this
+			// 	const query = uni.createSelectorQuery()
+			// 	console.log('canvasID',this.canvasID)
+			// 	query.select('#myQrcode')
+			// 		.fields({
+			// 			node: true,
+			// 			size: true
+			// 		})
+			// 		.exec((res) => {
+			// 			console.log('query',res)
+			// 			var canvas = res[0].node
+			// 			uni.canvasToTempFilePath({
+			// 				canvasId: this.canvasID,
+			// 				canvas: canvas,
+			// 				x: 0,
+			// 				y: 0,
+			// 				width: this.canvasWidth,
+			// 				height: this.canvasHeight,
+			// 				destWidth: this.canvasWidth,
+			// 				destHeight: this.canvasHeight,
+			// 				success(res) {
+			// 					console.log('二维码临时路径:', res.tempFilePath)
+			// 					uni.saveImageToPhotosAlbum({
+			// 						filePath: res.tempFilePath,
+			// 						success: function() {
+			// 							console.log('save success');
+			// 							uni.showToast({
+			// 								title: '保存成功'
+			// 							})
+			// 						},
+			// 						fail(res) {
+			// 							console.error(res)
+			// 							uni.showToast({
+			// 								title: '保存失败。',
+			// 								icon: 'error'
+			// 							})
+			// 						}
+			// 					})
+			// 				},
+			// 				fail(res) {
+			// 					console.error('fail', res)
+
+			// 					uni.showToast({
+			// 						title: '保存失败',
+			// 						icon: 'error'
+			// 					})
+			// 				}
+			// 			})
+
+			// 		})
+
+			// },
+
+			// 创建二维码
+			canvasCreate() {
+				this.localImgPath = this.shareImage
+				console.log('this.shareImage', this.shareImage)
+				if (this.shareImage && this.shareImage.startsWith('https://')) {
+					uni.getImageInfo({
+						src: _this.shareImage,
+						success(res) {
+							console.log('getImageInfo res', res)
+							_this.localImgPath = res.path
+							_this.$refs.qrcode.make({
+									size: _this.qrSize,
+									text: _this.qrUrl
+								})
+								.then(res => {
+									// 返回的res与uni.canvasToTempFilePath返回一致
+									// console.log(res)
+									_this.qrCode = res.tempFilePath;
+									_this.onCanvas();
+								});
+						},
+						fail(error) {
+							this.$message.showToast('加载图片错误')
+						}
+					})
+				} else {
+					_this.$refs.qrcode.make({
+							size: _this.qrSize,
+							text: _this.qrUrl
+						})
+						.then(res => {
+							// 返回的res与uni.canvasToTempFilePath返回一致
+							// console.log(res)
+							_this.qrCode = res.tempFilePath;
+							_this.onCanvas();
+						});
+				}
+
+
+			},
+			// 画图
+			async onCanvas() {
+				uni.showLoading({
+					title: "分享图片生成中..."
+				});
+				const ctx = uni.createCanvasContext(_this.canvasID, _this);
+				// 设置 canvas 背景色
+				ctx.setFillStyle('#FFFFFF');
+				ctx.fillRect(0, 0, _this.canvasWidth, _this.canvasHeight);
+				ctx.setFillStyle('#000000');
+				// 背景图片
+				//需要下载图片
+
+				if (_this.localImgPath) {
+					console.log('localImgPath', _this.localImgPath)
+					ctx.drawImage(_this.localImgPath, 20, 20, 335, 500);
+				}
+				// ctx.setFontSize(18);
+				// ctx.setTextAlign('center');
+				// ctx.fillText(_this.shareTitle, _this.canvasWidth / 2, 30);
+				// 左边标题
+				ctx.setTextAlign('left')
+				ctx.setFontSize(22)
+				_this.writeTextOnCanvas(ctx, 20, 21, _this.goodsTitle, 20, 560);
+				ctx.setTextAlign('left')
+				ctx.setFontSize(16)
+				_this.writeTextOnCanvas(ctx, 20, 21, _this.goodsTitle2, 20, 585);
+				// 设置虚线
+				// ctx.setStrokeStyle('#333333');
+				// ctx.setLineDash([5, 10], 2);
+				// ctx.beginPath();
+				// ctx.moveTo(220, 340);
+				// ctx.lineTo(220, 420);
+				// ctx.stroke();
+				// 二维码
+				ctx.drawImage(_this.qrCode, 250, 520, 100, 100);
+				// ctx.draw();
+
+				// 延迟后渲染至canvas上
+				let pic = await _this.setTime(ctx)
+				_this.$emit('success', pic);
+			},
+			/**
+			 * @param {Object} ctx_2d	getContext("2d") 对象
+			 * @param {int} lineheight	段落文本行高
+			 * @param {int} bytelength	设置单字节文字一行内的数量
+			 * @param {string} text		写入画面的段落文本
+			 * @param {int} startleft	开始绘制文本的 x 坐标位置(相对于画布)
+			 * @param {int} starttop	开始绘制文本的 y 坐标位置(相对于画布)
+			 */
+			writeTextOnCanvas(ctx_2d, lineheight, bytelength, text, startleft, starttop) {
+				// 获取字符串的真实长度(字节长度)
+				function getTrueLength(str) {
+					var len = str.length,
+						truelen = 0;
+					for (var x = 0; x < len; x++) {
+						if (str.charCodeAt(x) > 128) {
+							truelen += 2;
+						} else {
+							truelen += 1;
+						}
+					}
+					return truelen;
+				}
+				// 按字节长度截取字符串,返回substr截取位置
+				function cutString(str, leng) {
+					var len = str.length,
+						tlen = len,
+						nlen = 0;
+					for (var x = 0; x < len; x++) {
+						if (str.charCodeAt(x) > 128) {
+							if (nlen + 2 < leng) {
+								nlen += 2;
+							} else {
+								tlen = x;
+								break;
+							}
+						} else {
+							if (nlen + 1 < leng) {
+								nlen += 1;
+							} else {
+								tlen = x;
+								break;
+							}
+						}
+					}
+					return tlen;
+				}
+				for (var i = 1; getTrueLength(text) > 0; i++) {
+					var tl = cutString(text, bytelength);
+					ctx_2d.fillText(text.substr(0, tl).replace(/^\s+|\s+$/, ""), startleft, (i - 1) * lineheight +
+						starttop);
+					text = text.substr(tl);
+				}
+			},
+			// 彻底改成同步 防止拿到的图片地址为空
+			setTime(ctx) {
+				return new Promise((resole, err) => {
+					setTimeout(() => {
+						ctx.draw(false, async () => {
+							let pic = await _this.getNewPic();
+							resole(pic)
+						});
+					}, 600)
+				})
+			},
+			// 获取新的图片地址
+			getNewPic() {
+				return new Promise((resolve, errs) => {
+					setTimeout(() => {
+						uni.canvasToTempFilePath({
+							canvasId: _this.canvasID,
+							quality: 1,
+							complete: (res) => {
+								// 在H5平台下,tempFilePath 为 base64
+								// 关闭showLoading
+								uni.hideLoading();
+								//  储存海报地址  也是分享的地址
+								resolve(res.tempFilePath)
+							}
+						}, _this);
+					}, 200)
+				})
+			},
+		},
+		mounted() {
+			_this = this;
+		}
+	}
+</script>
\ No newline at end of file
diff --git a/sub_pages/partner/partner-info/partner-code-v2.vue b/sub_pages/partner/partner-info/partner-code-v2.vue
index efb3659..a469eb3 100644
--- a/sub_pages/partner/partner-info/partner-code-v2.vue
+++ b/sub_pages/partner/partner-info/partner-code-v2.vue
@@ -15,7 +15,7 @@
 </template>
 
 <script>
-	import shareImages from '@/components/hj-placard/shareImages.vue'
+	import shareImages from './hj-placard/shareImages.vue'
 	export default {
 		components: {
 			shareImages

--
Gitblit v1.9.3