From 16213c0f85aa3ac8317797bf4a05fd12940e16d3 Mon Sep 17 00:00:00 2001
From: zhangwei <1504152376@qq.com>
Date: 星期三, 05 三月 2025 17:29:42 +0800
Subject: [PATCH] -

---
 src/uni_modules/uview-plus/components/u-qrcode/u-qrcode.vue |  149 ++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 127 insertions(+), 22 deletions(-)

diff --git a/src/uni_modules/uview-plus/components/u-qrcode/u-qrcode.vue b/src/uni_modules/uview-plus/components/u-qrcode/u-qrcode.vue
index 802a6de..dc9574b 100644
--- a/src/uni_modules/uview-plus/components/u-qrcode/u-qrcode.vue
+++ b/src/uni_modules/uview-plus/components/u-qrcode/u-qrcode.vue
@@ -1,12 +1,36 @@
 <template>
-	<view class="u-qrcode">
-		<canvas class="u-qrcode__canvas" :id="cid" :canvas-id="cid" :style="{ width: size + unit, height: size + unit }" />
-		<image v-show="show" :src="result" :style="{ width: size + unit, height: size + unit }" />
+	<view class="u-qrcode" @longpress="longpress">
+		<view class="u-qrcode__content" @click="preview">
+			<!-- #ifndef APP-NVUE -->
+			<canvas class="u-qrcode__canvas"
+				:id="cid" :canvas-id="cid" :style="{ width: size + unit, height: size + unit }" />
+			<!-- #endif -->
+			<!-- #ifdef APP-NVUE -->
+			<gcanvas class="u-qrcode__canvas" ref="gcanvess"
+				:style="{ width: size + unit, height: size + unit }">
+			</gcanvas>
+			<!-- #endif -->
+			<view v-if="showLoading && loading" class="u-qrcode__loading"
+				:style="{ width: size + unit, height: size + unit }">
+				<up-loading-icon vertical :text="loadingText" textSize="14px"></up-loading-icon>
+			</view>
+			<!-- <image v-show="show" :src="result" :style="{ width: size + unit, height: size + unit }" /> -->
+		</view>
+		<!-- <up-action-sheet :actions="list" cancelText="鍙栨秷"
+			v-model:show="popupShow" @select="selectClick">
+		</up-action-sheet> -->
 	</view>
 </template>
 
 <script>
 import QRCode from "./qrcode.js"
+// #ifdef APP-NVUE
+// https://github.com/dcloudio/NvueCanvasDemo/blob/master/README.md
+import {
+	enable,
+	WeexBridge
+} from '../../libs/util/gcanvas/index.js';
+// #endif
 let qrcode
 export default {
 	name: "u-qrcode",
@@ -73,23 +97,62 @@
 		},
 		loadingText: {
 			type: String,
-			default: '浜岀淮鐮佺敓鎴愪腑'
+			default: '鐢熸垚涓�'
+		},
+		allowPreview: {
+			type: Boolean,
+			default: false
 		},
 	},
+	emits: ['result', 'longpress'],
 	data() {
 		return {
+			loading: false,
 			result: '',
+			popupShow: false,
+			list: [
+				{
+					name: '淇濆瓨浜岀淮鐮�',
+				}
+			],
+			ganvas: null,
+			context: '',
+			canvasObj: {}
+		}
+	},
+	mounted: function () {
+		// #ifdef APP-NVUE
+		/*鑾峰彇鍏冪礌寮曠敤*/
+		this.ganvas = this.$refs["gcanvess"]
+		/*閫氳繃鍏冪礌寮曠敤鑾峰彇canvas瀵硅薄*/
+		this.canvasObj = enable(this.ganvas, {
+			bridge: WeexBridge
+		})
+		/*鑾峰彇缁樺浘鎵�闇�鐨勪笂涓嬫枃锛岀洰鍓嶄笉鏀寔3d*/
+		this.context = this.canvasObj.getContext('2d')
+		// #endif
+
+		if (this.loadMake) {
+			if (!this._empty(this.val)) {
+				setTimeout(() => {
+					this._makeCode()
+				}, 0);
+			}
 		}
 	},
 	methods: {
 		_makeCode() {
 			let that = this
 			if (!this._empty(this.val)) {
+				// #ifndef APP-NVUE
+				this.loading = true
+				// #endif
 				qrcode = new QRCode({
 					context: that, // 涓婁笅鏂囩幆澧�
 					canvasId: that.cid, // canvas-id
+					nvueContext: that.context,
 					usingComponents: that.usingComponents, // 鏄惁鏄嚜瀹氫箟缁勪欢
-					showLoading: that.showLoading, // 鏄惁鏄剧ずloading
+					showLoading: false, // 鏄惁鏄剧ずloading
 					loadingText: that.loadingText, // loading鏂囧瓧
 					text: that.val, // 鐢熸垚鍐呭
 					size: that.size, // 浜岀淮鐮佸ぇ灏�
@@ -130,9 +193,47 @@
 				});
 			}
 		},
+		preview(e) {
+			// 棰勮鍥剧墖
+			// console.log(this.result)
+			if (this.allowPreview) {
+				uni.previewImage({
+					urls: [this.result],
+					longPressActions: {
+						itemList: ['淇濆瓨浜岀淮鐮佸浘鐗�'],
+						success: function(data) {
+							// console.log('閫変腑浜嗙' + (data.tapIndex + 1) + '涓寜閽�,绗�' + (data.index + 1) + '寮犲浘鐗�');
+							switch (data.tapIndex) {
+								case 0:
+									that._saveCode();
+									break;
+							}
+						},
+						fail: function(err) {
+							console.log(err.errMsg);
+						}
+					}
+				});
+			}
+			this.$emit('preview', {
+				url: this.result
+			}, e)
+		},
+		longpress() {
+			this.$emit('longpress', this.result)
+		},
+		selectClick(index) {
+			switch (index) {
+				case 0:
+					alert('淇濆瓨浜岀淮鐮�')
+					this._saveCode();
+					break;
+			}
+		},
 		_result(res) {
+			this.loading = false;
 			this.result = res;
-			this.$emit('result', res)
+			this.$emit('result', res);
 		},
 		_empty(v) {
 			let tp = typeof v,
@@ -173,27 +274,31 @@
 		}
 	},
 	computed: {
-	},
-	mounted: function () {
-		if (this.loadMake) {
-			if (!this._empty(this.val)) {
-				setTimeout(() => {
-					this._makeCode()
-				}, 0);
-			}
-		}
-	},
+	}
 }
 </script>
 <style lang="scss" scoped>
 .u-qrcode {
-	position: relative;
+	&__loading {
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		background-color: #f7f7f7;
+		position: absolute;
+		top: 0;
+		bottom: 0;
+		left: 0;
+		right: 0;
+	}
+	&__content {
+		position: relative;
 
-	&__canvas {
-		position: fixed;
-		top: -99999rpx;
-		left: -99999rpx;
-		z-index: -99999;
+		&__canvas {
+			position: fixed;
+			top: -99999rpx;
+			left: -99999rpx;
+			z-index: -99999;
+		}
 	}
 }
 </style>

--
Gitblit v1.9.1