From aca7aa9ce32acc4c8795342f945b027d3bc9f62a Mon Sep 17 00:00:00 2001
From: 曹睿 <360930172@qq.com>
Date: 星期二, 10 六月 2025 17:37:34 +0800
Subject: [PATCH] feat: 添加时效报工,修复扫码内存泄漏

---
 src/components/z-paging-swiper-item/z-paging-swiper-item.vue |  303 ++++++++++++++++++++++++++------------------------
 1 files changed, 157 insertions(+), 146 deletions(-)

diff --git a/src/components/z-paging-swiper-item/z-paging-swiper-item.vue b/src/components/z-paging-swiper-item/z-paging-swiper-item.vue
index bf40f14..5852b81 100644
--- a/src/components/z-paging-swiper-item/z-paging-swiper-item.vue
+++ b/src/components/z-paging-swiper-item/z-paging-swiper-item.vue
@@ -5,156 +5,167 @@
 
 <!-- 婊戝姩鍒囨崲閫夐」鍗wiper-item锛屾缁勪欢鏀寔easycom瑙勮寖锛屽彲浠ュ湪椤圭洰涓洿鎺ュ紩鐢� -->
 <template>
-	<view class="zp-swiper-item-container">
-		<z-paging ref="paging" :fixed="false" 
-			:auto="false" :useVirtualList="useVirtualList" :useInnerList="useInnerList" :cellKeyName="cellKeyName" :innerListStyle="innerListStyle" 
-			:preloadPage="preloadPage" :cellHeightMode="cellHeightMode" :virtualScrollFps="virtualScrollFps" :virtualListCol="virtualListCol"
-			@query="_queryList" @listChange="_updateList">
-			<slot />
-			<template #header>
-				<slot name="header"/>
-			</template>
-			<template #cell="{item,index}">
-				<slot name="cell" :item="item" :index="index"/>
-			</template>
-			<template #footer>
-				<slot name="footer"/>
-			</template>
-		</z-paging>
-	</view>
+  <view class="zp-swiper-item-container">
+    <z-paging
+      ref="paging"
+      :fixed="false"
+      :auto="false"
+      :useVirtualList="useVirtualList"
+      :useInnerList="useInnerList"
+      :cellKeyName="cellKeyName"
+      :innerListStyle="innerListStyle"
+      :preloadPage="preloadPage"
+      :cellHeightMode="cellHeightMode"
+      :virtualScrollFps="virtualScrollFps"
+      :virtualListCol="virtualListCol"
+      @query="_queryList"
+      @listChange="_updateList"
+    >
+      <slot />
+      <template #header>
+        <slot name="header" />
+      </template>
+      <template #cell="{ item, index }">
+        <slot name="cell" :item="item" :index="index" />
+      </template>
+      <template #footer>
+        <slot name="footer" />
+      </template>
+    </z-paging>
+  </view>
 </template>
 
 <script>
-	import zPaging from '../z-paging/z-paging'
-	/**
-	 * z-paging-swiper-item 缁勪欢
-	 * @description swiper+list鏋佺畝鍐欐硶涓娇鐢ㄥ埌锛屽疄闄呬笂灏辨槸瀵规櫘閫氱殑swiper+list涓璼wiper-item鐨勫寘瑁呭皝瑁咃紝鐢ㄤ互绠�鍖栧啓娉曪紝浣嗕釜鎬у寲閰嶇疆灞�闄愯緝澶�
-	 * @tutorial https://z-paging.zxlee.cn/api/sub-components/main.html#z-paging-swiper-item閰嶇疆
-	 * @notice 浠ヤ笅涓� z-paging-swiper-item 鐨勯厤缃」
-	 * @property {Number} tabIndex 褰撳墠缁勪欢鐨� index锛屼篃灏辨槸褰撳墠缁勪欢鏄� swiper 涓殑绗嚑涓紝榛樿涓� 0
-	 * @property {Number} currentIndex 褰撳墠 swiper 鍒囨崲鍒扮鍑犱釜 index锛岄粯璁や负 0
-	 * @property {Boolean} useVirtualList 鏄惁浣跨敤铏氭嫙鍒楄〃锛岄粯璁や负 false
-	 * @property {Boolean} useInnerList 鏄惁鍦� z-paging 鍐呴儴寰幆娓叉煋鍒楄〃锛堝唴缃垪琛級锛岄粯璁や负 false銆傝嫢 useVirtualList 涓� true锛屽垯姝ら」鎭掍负 true
-	 * @property {String} cellKeyName 鍐呯疆鍒楄〃 cell 鐨� key 鍚嶇О锛屼粎 nvue 鏈夋晥锛屽湪 nvue 涓紑鍚� useInnerList 鏃跺繀椤诲~姝ら」锛岄粯璁や负 ''
-	 * @property {Object} innerListStyle innerList 鏍峰紡锛岄粯璁や负 {}
-	 * @property {Number|String} preloadPage 棰勫姞杞界殑鍒楄〃鍙鑼冨洿锛堝垪琛ㄩ珮搴︼級椤垫暟锛岄粯璁や负 12銆傛鏁板�艰秺澶э紝鍒欒櫄鎷熷垪琛ㄤ腑鍔犺浇鐨� dom 瓒婂锛屽唴瀛樻秷鑰楄秺澶э紙浼氱淮鎸佸湪涓�涓ǔ瀹氬�硷級锛屼絾澧炲姞棰勫姞杞介〉闈㈡暟閲忓彲缂撹В蹇�熸粴鍔ㄧ煭鏆傜櫧灞忛棶棰�
-	 * @property {String} cellHeightMode 铏氭嫙鍒楄〃 cell 楂樺害妯″紡锛岄粯璁や负 'fixed'锛屼篃灏辨槸姣忎釜 cell 楂樺害瀹屽叏鐩稿悓锛屽皢浠ョ涓�涓� cell 楂樺害涓哄噯杩涜璁$畻銆傚彲閫夊�笺�恉ynamic銆戯紝鍗充唬琛ㄩ珮搴︽槸鍔ㄦ�侀潪鍥哄畾鐨勶紝銆恉ynamic銆戞�ц兘浣庝簬銆恌ixed銆�
-	 * @property {Number|String} virtualListCol 铏氭嫙鍒楄〃鍒楁暟锛岄粯璁や负 1銆傚父鐢ㄤ簬姣忚鏈夊鍒楃殑鎯呭喌锛屼緥濡傛瘡琛屾湁 2 鍒楁暟鎹紝闇�瑕佸皢姝ゅ�艰缃负 2
-	 * @property {Number|String} virtualScrollFps 铏氭嫙鍒楄〃 scroll 鍙栨牱甯х巼锛岄粯璁や负 60锛岃繃楂樺彲鑳藉嚭鐜板崱椤跨瓑闂
-	 * @example <z-paging-swiper-item ref="swiperItem" :tabIndex="index" :currentIndex="current" @query="queryList" @updateList="updateList"></z-paging-swiper-item>
-	 */
-	export default {
-		name: "z-paging-swiper-item",
-		components: { zPaging },
-		data() {
-			return {
-				firstLoaded: false
-			}
-		},
-		props: {
-			// 褰撳墠缁勪欢鐨刬ndex锛屼篃灏辨槸褰撳墠缁勪欢鏄痵wiper涓殑绗嚑涓�
-			tabIndex: {
-				type: Number,
-				default: function() {
-					return 0
-				}
-			},
-			// 褰撳墠swiper鍒囨崲鍒扮鍑犱釜index
-			currentIndex: {
-				type: Number,
-				default: function() {
-					return 0
-				}
-			},
-			// 鏄惁浣跨敤铏氭嫙鍒楄〃锛岄粯璁や负鍚�
-			useVirtualList: {
-				type: Boolean,
-				default: false
-			},
-			// 鏄惁鍦▃-paging鍐呴儴寰幆娓叉煋鍒楄〃(鍐呯疆鍒楄〃)锛岄粯璁や负鍚︺�傝嫢use-virtual-list涓簍rue锛屽垯姝ら」鎭掍负true
-			useInnerList: {
-				type: Boolean,
-				default: false
-			},
-			// 鍐呯疆鍒楄〃cell鐨刱ey鍚嶇О锛屼粎nvue鏈夋晥锛屽湪nvue涓紑鍚痷se-inner-list鏃跺繀椤诲~姝ら」
-			cellKeyName: {
-				type: String,
-				default: ''
-			},
-			// innerList鏍峰紡
-			innerListStyle: {
-				type: Object,
-				default: function() {
-					return {};
-				}
-			},
-			// 棰勫姞杞界殑鍒楄〃鍙鑼冨洿(鍒楄〃楂樺害)椤垫暟锛岄粯璁や负12锛屽嵆棰勫姞杞藉綋鍓嶉〉鍙婁笂涓嬪悇12椤电殑cell銆傛鏁板�艰秺澶э紝鍒欒櫄鎷熷垪琛ㄤ腑鍔犺浇鐨刣om瓒婂锛屽唴瀛樻秷鑰楄秺澶�(浼氱淮鎸佸湪涓�涓ǔ瀹氬��)锛屼絾澧炲姞棰勫姞杞介〉闈㈡暟閲忓彲缂撹В蹇�熸粴鍔ㄧ煭鏆傜櫧灞忛棶棰�
-			preloadPage: {
-				type: [Number, String],
-				default: 12
-			},
-			// 铏氭嫙鍒楄〃cell楂樺害妯″紡锛岄粯璁や负fixed锛屼篃灏辨槸姣忎釜cell楂樺害瀹屽叏鐩稿悓锛屽皢浠ョ涓�涓猚ell楂樺害涓哄噯杩涜璁$畻銆傚彲閫夊�笺�恉ynamic銆戯紝鍗充唬琛ㄩ珮搴︽槸鍔ㄦ�侀潪鍥哄畾鐨勶紝銆恉ynamic銆戞�ц兘浣庝簬銆恌ixed銆戙��
-			cellHeightMode: {
-				type: String,
-				default: 'fixed'
-			},
-			// 铏氭嫙鍒楄〃鍒楁暟锛岄粯璁や负1銆傚父鐢ㄤ簬姣忚鏈夊鍒楃殑鎯呭喌锛屼緥濡傛瘡琛屾湁2鍒楁暟鎹紝闇�瑕佸皢姝ゅ�艰缃负2
-			virtualListCol: {
-				type: [Number, String],
-				default: 1
-			},
-			// 铏氭嫙鍒楄〃scroll鍙栨牱甯х巼锛岄粯璁や负60锛岃繃楂樺彲鑳藉嚭鐜板崱椤跨瓑闂
-			virtualScrollFps: {
-				type: [Number, String],
-				default: 60
-			},
-		},
-		watch: {
-			currentIndex: {
-				handler(newVal, oldVal) {
-					if (newVal === this.tabIndex) {
-						// 鎳掑姞杞斤紝褰撴粦鍔ㄥ埌褰撳墠鐨刬tem鏃讹紝鎵嶅幓鍔犺浇
-						if (!this.firstLoaded) {
-							this.$nextTick(()=>{
-								let delay = 5;
-								// #ifdef MP-TOUTIAO
-								delay = 100;
-								// #endif
-								setTimeout(() => {
-									this.$refs.paging.reload().catch(() => {});
-								}, delay);
-							})
-						}
-					}
-				},
-				immediate: true
-			}
-		},
-		methods: {
-			reload(data) {
-				return this.$refs.paging.reload(data);
-			},
-			complete(data) {
-				this.firstLoaded = true;
-				return this.$refs.paging.complete(data);
-			},
-			_queryList(pageNo, pageSize, from) {
-				this.$emit('query', pageNo, pageSize, from);
-			},
-			_updateList(list) {
-				this.$emit('updateList', list);
-			}
-		}
-	}
+import zPaging from "../z-paging/z-paging";
+/**
+ * z-paging-swiper-item 缁勪欢
+ * @description swiper+list鏋佺畝鍐欐硶涓娇鐢ㄥ埌锛屽疄闄呬笂灏辨槸瀵规櫘閫氱殑swiper+list涓璼wiper-item鐨勫寘瑁呭皝瑁咃紝鐢ㄤ互绠�鍖栧啓娉曪紝浣嗕釜鎬у寲閰嶇疆灞�闄愯緝澶�
+ * @tutorial https://z-paging.zxlee.cn/api/sub-components/main.html#z-paging-swiper-item閰嶇疆
+ * @notice 浠ヤ笅涓� z-paging-swiper-item 鐨勯厤缃」
+ * @property {Number} tabIndex 褰撳墠缁勪欢鐨� index锛屼篃灏辨槸褰撳墠缁勪欢鏄� swiper 涓殑绗嚑涓紝榛樿涓� 0
+ * @property {Number} currentIndex 褰撳墠 swiper 鍒囨崲鍒扮鍑犱釜 index锛岄粯璁や负 0
+ * @property {Boolean} useVirtualList 鏄惁浣跨敤铏氭嫙鍒楄〃锛岄粯璁や负 false
+ * @property {Boolean} useInnerList 鏄惁鍦� z-paging 鍐呴儴寰幆娓叉煋鍒楄〃锛堝唴缃垪琛級锛岄粯璁や负 false銆傝嫢 useVirtualList 涓� true锛屽垯姝ら」鎭掍负 true
+ * @property {String} cellKeyName 鍐呯疆鍒楄〃 cell 鐨� key 鍚嶇О锛屼粎 nvue 鏈夋晥锛屽湪 nvue 涓紑鍚� useInnerList 鏃跺繀椤诲~姝ら」锛岄粯璁や负 ''
+ * @property {Object} innerListStyle innerList 鏍峰紡锛岄粯璁や负 {}
+ * @property {Number|String} preloadPage 棰勫姞杞界殑鍒楄〃鍙鑼冨洿锛堝垪琛ㄩ珮搴︼級椤垫暟锛岄粯璁や负 12銆傛鏁板�艰秺澶э紝鍒欒櫄鎷熷垪琛ㄤ腑鍔犺浇鐨� dom 瓒婂锛屽唴瀛樻秷鑰楄秺澶э紙浼氱淮鎸佸湪涓�涓ǔ瀹氬�硷級锛屼絾澧炲姞棰勫姞杞介〉闈㈡暟閲忓彲缂撹В蹇�熸粴鍔ㄧ煭鏆傜櫧灞忛棶棰�
+ * @property {String} cellHeightMode 铏氭嫙鍒楄〃 cell 楂樺害妯″紡锛岄粯璁や负 'fixed'锛屼篃灏辨槸姣忎釜 cell 楂樺害瀹屽叏鐩稿悓锛屽皢浠ョ涓�涓� cell 楂樺害涓哄噯杩涜璁$畻銆傚彲閫夊�笺�恉ynamic銆戯紝鍗充唬琛ㄩ珮搴︽槸鍔ㄦ�侀潪鍥哄畾鐨勶紝銆恉ynamic銆戞�ц兘浣庝簬銆恌ixed銆�
+ * @property {Number|String} virtualListCol 铏氭嫙鍒楄〃鍒楁暟锛岄粯璁や负 1銆傚父鐢ㄤ簬姣忚鏈夊鍒楃殑鎯呭喌锛屼緥濡傛瘡琛屾湁 2 鍒楁暟鎹紝闇�瑕佸皢姝ゅ�艰缃负 2
+ * @property {Number|String} virtualScrollFps 铏氭嫙鍒楄〃 scroll 鍙栨牱甯х巼锛岄粯璁や负 60锛岃繃楂樺彲鑳藉嚭鐜板崱椤跨瓑闂
+ * @example <z-paging-swiper-item ref="swiperItem" :tabIndex="index" :currentIndex="current" @query="queryList" @updateList="updateList"></z-paging-swiper-item>
+ */
+export default {
+  name: "z-paging-swiper-item",
+  components: { zPaging },
+  props: {
+    // 褰撳墠缁勪欢鐨刬ndex锛屼篃灏辨槸褰撳墠缁勪欢鏄痵wiper涓殑绗嚑涓�
+    tabIndex: {
+      type: Number,
+      default: function () {
+        return 0;
+      },
+    },
+    // 褰撳墠swiper鍒囨崲鍒扮鍑犱釜index
+    currentIndex: {
+      type: Number,
+      default: function () {
+        return 0;
+      },
+    },
+    // 鏄惁浣跨敤铏氭嫙鍒楄〃锛岄粯璁や负鍚�
+    useVirtualList: {
+      type: Boolean,
+      default: false,
+    },
+    // 鏄惁鍦▃-paging鍐呴儴寰幆娓叉煋鍒楄〃(鍐呯疆鍒楄〃)锛岄粯璁や负鍚︺�傝嫢use-virtual-list涓簍rue锛屽垯姝ら」鎭掍负true
+    useInnerList: {
+      type: Boolean,
+      default: false,
+    },
+    // 鍐呯疆鍒楄〃cell鐨刱ey鍚嶇О锛屼粎nvue鏈夋晥锛屽湪nvue涓紑鍚痷se-inner-list鏃跺繀椤诲~姝ら」
+    cellKeyName: {
+      type: String,
+      default: "",
+    },
+    // innerList鏍峰紡
+    innerListStyle: {
+      type: Object,
+      default: function () {
+        return {};
+      },
+    },
+    // 棰勫姞杞界殑鍒楄〃鍙鑼冨洿(鍒楄〃楂樺害)椤垫暟锛岄粯璁や负12锛屽嵆棰勫姞杞藉綋鍓嶉〉鍙婁笂涓嬪悇12椤电殑cell銆傛鏁板�艰秺澶э紝鍒欒櫄鎷熷垪琛ㄤ腑鍔犺浇鐨刣om瓒婂锛屽唴瀛樻秷鑰楄秺澶�(浼氱淮鎸佸湪涓�涓ǔ瀹氬��)锛屼絾澧炲姞棰勫姞杞介〉闈㈡暟閲忓彲缂撹В蹇�熸粴鍔ㄧ煭鏆傜櫧灞忛棶棰�
+    preloadPage: {
+      type: [Number, String],
+      default: 12,
+    },
+    // 铏氭嫙鍒楄〃cell楂樺害妯″紡锛岄粯璁や负fixed锛屼篃灏辨槸姣忎釜cell楂樺害瀹屽叏鐩稿悓锛屽皢浠ョ涓�涓猚ell楂樺害涓哄噯杩涜璁$畻銆傚彲閫夊�笺�恉ynamic銆戯紝鍗充唬琛ㄩ珮搴︽槸鍔ㄦ�侀潪鍥哄畾鐨勶紝銆恉ynamic銆戞�ц兘浣庝簬銆恌ixed銆戙��
+    cellHeightMode: {
+      type: String,
+      default: "fixed",
+    },
+    // 铏氭嫙鍒楄〃鍒楁暟锛岄粯璁や负1銆傚父鐢ㄤ簬姣忚鏈夊鍒楃殑鎯呭喌锛屼緥濡傛瘡琛屾湁2鍒楁暟鎹紝闇�瑕佸皢姝ゅ�艰缃负2
+    virtualListCol: {
+      type: [Number, String],
+      default: 1,
+    },
+    // 铏氭嫙鍒楄〃scroll鍙栨牱甯х巼锛岄粯璁や负60锛岃繃楂樺彲鑳藉嚭鐜板崱椤跨瓑闂
+    virtualScrollFps: {
+      type: [Number, String],
+      default: 60,
+    },
+  },
+  data() {
+    return {
+      firstLoaded: false,
+    };
+  },
+  watch: {
+    currentIndex: {
+      handler(newVal, oldVal) {
+        if (newVal === this.tabIndex) {
+          // 鎳掑姞杞斤紝褰撴粦鍔ㄥ埌褰撳墠鐨刬tem鏃讹紝鎵嶅幓鍔犺浇
+          if (!this.firstLoaded) {
+            this.$nextTick(() => {
+              let delay = 5;
+              // #ifdef MP-TOUTIAO
+              delay = 100;
+              // #endif
+              setTimeout(() => {
+                this.$refs.paging.reload().catch(() => {});
+              }, delay);
+            });
+          }
+        }
+      },
+      immediate: true,
+    },
+  },
+  methods: {
+    reload(data) {
+      return this.$refs.paging.reload(data);
+    },
+    complete(data) {
+      this.firstLoaded = true;
+      return this.$refs.paging.complete(data);
+    },
+    _queryList(pageNo, pageSize, from) {
+      this.$emit("query", pageNo, pageSize, from);
+    },
+    _updateList(list) {
+      this.$emit("updateList", list);
+    },
+  },
+};
 </script>
 
 <style scoped>
-	.zp-swiper-item-container {
-		/* #ifndef APP-NVUE */
-		height: 100%;
-		/* #endif */
-		/* #ifdef APP-NVUE */
-		flex: 1;
-		/* #endif */
-	}
+.zp-swiper-item-container {
+  /* #ifndef APP-NVUE */
+  height: 100%;
+  /* #endif */
+  /* #ifdef APP-NVUE */
+  flex: 1;
+  /* #endif */
+}
 </style>

--
Gitblit v1.9.3