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