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-upload/u-upload.vue |   73 ++++++++++++++++++++++--------------
 1 files changed, 45 insertions(+), 28 deletions(-)

diff --git a/src/uni_modules/uview-plus/components/u-upload/u-upload.vue b/src/uni_modules/uview-plus/components/u-upload/u-upload.vue
index d68b29e..c7706c2 100644
--- a/src/uni_modules/uview-plus/components/u-upload/u-upload.vue
+++ b/src/uni_modules/uview-plus/components/u-upload/u-upload.vue
@@ -12,7 +12,7 @@
 					    :src="item.thumb || item.url"
 					    :mode="imageMode"
 					    class="u-upload__wrap__preview__image"
-					    @tap="onPreviewImage(item)"
+					    @tap="onPreviewImage(item, index)"
 						:style="[{
 							width: addUnit(width),
 							height: addUnit(height)
@@ -21,7 +21,7 @@
 					<view
 					    v-else
 					    class="u-upload__wrap__preview__other"
-						@tap="onClickPreview($event, item)"
+						@tap="onClickPreview(item, index)"
 					>
 						<u-icon
 						    color="#80CBF9"
@@ -334,50 +334,67 @@
 				);
 			},
 			// 棰勮鍥剧墖
-			onPreviewImage(item) {
-				if (!item.isImage || !this.previewFullImage) return
+			onPreviewImage(previewItem, index) {
+				if (!previewItem.isImage || !this.previewFullImage) return
+                let current = 0;
+                const urls = [];
+                let imageIndex = 0;
+                for (var i = 0; i < this.lists.length; i++) {
+                    const item = this.lists[i];
+                    if (item.isImage || (item.type && item.type === 'image')) {
+                        urls.push(item.url || item.thumb);
+                        if (i === index) {
+                            current = imageIndex;
+                        }
+                        imageIndex += 1;
+                    }
+                }
+                if (urls.length < 1) {
+                    return;
+                }
 				uni.previewImage({
-					// 鍏坒ilter鎵惧嚭涓哄浘鐗囩殑item锛屽啀杩斿洖filter缁撴灉涓殑鍥剧墖url
-					urls: this.lists.filter((item) => this.accept === 'image' || test.image(item.url || item.thumb)).map((item) => item.url || item.thumb),
-					current: item.url || item.thumb,
+                    urls: urls,
+                    current: current,
 					fail() {
 						toast('棰勮鍥剧墖澶辫触')
 					},
 				});
 			},
-			onPreviewVideo(event) {
+			onPreviewVideo(index) {
 				if (!this.previewFullImage) return;
-				const {
-					index
-				} = event.currentTarget.dataset;
-				const {
-					lists
-				} = this.data;
+                let current = 0;
+                const sources = [];
+                let videoIndex = 0;
+                for (var i = 0; i < this.lists.length; i++) {
+                    const item = this.lists[i];
+                    if (item.isVideo || (item.type && item.type === 'video')) {
+                        sources.push(Object.assign(Object.assign({}, item), {
+                            type: 'video'
+                        }));
+                        if (i === index) {
+                            current = videoIndex;
+                        }
+                        videoIndex += 1;
+                    }
+                }
+                if (sources.length < 1) {
+                    return;
+                }
 				// #ifdef MP-WEIXIN
 				wx.previewMedia({
-					sources: lists
-						.filter((item) => isVideoFile(item))
-						.map((item) =>
-							Object.assign(Object.assign({}, item), {
-								type: 'video'
-							})
-						),
-					current: index,
+					sources: sources,
+					current: current,
 					fail() {
 						toast('棰勮瑙嗛澶辫触')
 					},
 				});
 				// #endif
 			},
-			onClickPreview(event) {
-				const {
-					index
-				} = event.currentTarget.dataset;
-				const item = this.data.lists[index];
+			onClickPreview(item, index) {
 				if (!this.previewFullImage) return;
 				switch (item.type) {
 					case 'video':
-						this.onPreviewVideo(event);
+						this.onPreviewVideo(index);
 						break;
 					default:
 						break;

--
Gitblit v1.9.1