From 2afe9d56dcba279d048a16c772f14b9660b14416 Mon Sep 17 00:00:00 2001 From: xuhuajiao <13476289682@163.com> Date: Wed, 4 Jun 2025 17:12:32 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=A6=E6=9E=B6=E9=A1=B5=E9=9D=A2=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env.development | 4 +- src/assets/images/refresh.png | Bin 0 -> 5814 bytes src/assets/images/refresh2.png | Bin 0 -> 6808 bytes src/views/bookRackList-dxh.vue | 26 ++++++- src/views/bookRackList.vue | 129 ++++++++++++++++++++++++++++++- src/views/module/bookDetails.vue | 12 ++- 6 files changed, 163 insertions(+), 8 deletions(-) create mode 100644 src/assets/images/refresh.png create mode 100644 src/assets/images/refresh2.png diff --git a/.env.development b/.env.development index a5806b2..878b634 100644 --- a/.env.development +++ b/.env.development @@ -7,8 +7,8 @@ ENV = 'development' #VUE_APP_WS_API = 'ws://120.76.47.59:8080' # 许镇-本地服地址 -VUE_APP_BASE_API = 'http://192.168.99.67:8080' -VUE_APP_WS_API = 'ws://192.168.99.67:8081' +VUE_APP_BASE_API = 'http://192.168.99.72:8080' +VUE_APP_WS_API = 'ws://192.168.99.72:8081' # 是否启用 babel-plugin-dynamic-import-node插件 VUE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/src/assets/images/refresh.png b/src/assets/images/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..177e91e07d83a32b3051a8f77cd82897c8c7f961 GIT binary patch literal 5814 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 BmdpSE literal 0 HcmV?d00001 diff --git a/src/assets/images/refresh2.png b/src/assets/images/refresh2.png new file mode 100644 index 0000000000000000000000000000000000000000..6c61d231daff9bc0e989712f1bc987228b975938 GIT binary patch literal 6808 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 z zup=kbY>)uIh3t)euF76Ds+ELF{(ANOq!jA9dD+w4!n==T+G_C;CLM2Mdr%Mwuf zL?_YM)d!Vy3N5nhC=Js5dwC??-Qg~`>Gd0aiH+wL#rQApGGi|B^?i`*6GMMVoU$mA7rzat4G!|K|0yFb(ktHv=0JO_F zSRcs>T|Bpf8BsZrZ&=dyV5RTgeQCTa3qf$!{9)`6v}DqP630~aK~9CC-YjMG4w`9w z;?1`^fU199)MDSQ-Er0`W3y|f@$(fLAN3+Kc%`rWep9+eNTP4a)I7NB3(OSzE49RB z;`x5wg@7$9kPT1BDRUv?-#N{0iZ`H`+yZWXHQLmNk-vcdFafWD(S*tA8sZsREbvBA*CHw`xsivC-92 zX5H3anFBWy;l1FN;nSkJ-UiC%Ruo&MWYT=s{7f57%d8x?^*nbyHR{fXxv*PXm*FQTI{>A6@}rQxH>RDhv+kOmO_ zWe;3OK;eAar#3~TW|Ez1U*mqto*8$eOlM8$YspM4CtjHQ*)Dx+Z8Dw6+p#3PrSJbM z4~~GJo>Xyk#pOf~S9BG;y)QjhGnxsKYP%sFziA$m2T$oq86#xy=S*eH|NEI@knyF#Tx84Q#DsEz(s@#~j=_t&Tv-4)@(1B$AWC6#TNVSr>z zzP>ofh>ZHGQ=Ss$3fD`%)E~|LAb4}twS9l~WGi2{;JN@oZ}#7hlc22=wGYOuK)BGI f)Dtz4h!Ym+at#l$hs>h%Urhi;+Xz*2)0y-?1c7w4 literal 0 HcmV?d00001 diff --git a/src/views/bookRackList-dxh.vue b/src/views/bookRackList-dxh.vue index 6162f7e..af573f3 100644 --- a/src/views/bookRackList-dxh.vue +++ b/src/views/bookRackList-dxh.vue @@ -5,6 +5,7 @@ --> +

本架图书

@@ -51,15 +52,38 @@ export default { listData: [], bookList: {}, classnameL: 'rack-direct-active', - classnameR: null + classnameR: null, + timer: null, + refreshtime: 30000 } }, created() { this.initBookshelfDetails(-1) }, mounted() { + const _this = this + this.timer = setInterval(() => { + if (_this.classnameL !== null) { + _this.initBookshelfDetails(-1) + } else { + _this.initBookshelfDetails(1) + } + }, this.refreshtime) + }, + beforeDestroy() { + if (this.timer) { + clearInterval(this.timer) + this.timer = null + } }, methods: { + handleRefresh() { + if (this.classnameL !== null) { + this.initBookshelfDetails(-1) + } else { + this.initBookshelfDetails(1) + } + }, initSwiper() { this.$nextTick(() => { for (const key in this.bookList) { diff --git a/src/views/bookRackList.vue b/src/views/bookRackList.vue index a809302..ffe18c6 100644 --- a/src/views/bookRackList.vue +++ b/src/views/bookRackList.vue @@ -5,14 +5,24 @@ --> +

本架图书

-
-
+ +
+
@@ -30,7 +40,7 @@
- +
@@ -51,15 +61,114 @@ export default { listData: [], bookList: {}, classnameL: 'rack-direct-active', - classnameR: null + classnameR: null, + timer: null, + refreshtime: 10000, + isDetailOpen: false, // 新增:标记图书详情弹窗是否打开 + isOperating: false, // 操作锁(避免重复触发) + timerResetDelay: 3000, // 操作结束后延迟重启定时器的时间(5秒) + isMouseOverSwiper: false + } + }, + computed: { + isMouseOverAnySwiper() { + return this.isMouseOverSwiper // 或通过DOM查询判断是否在任意Swiper元素内 } }, created() { this.initBookshelfDetails(-1) }, mounted() { + this.startTimer() + // const _this = this + // this.timer = setInterval(() => { + // if (_this.classnameL !== null) { + // _this.initBookshelfDetails(-1) + // } else { + // _this.initBookshelfDetails(1) + // } + // }, this.refreshtime) + }, + beforeDestroy() { + this.stopTimer() // 销毁时彻底停止定时器 }, methods: { + // 鼠标进入Swiper区域 + handleSwiperEnter() { + this.isMouseOverSwiper = true + this.stopTimer() // 暂停自动刷新 + }, + + // 鼠标离开Swiper区域 + handleSwiperLeave() { + this.isMouseOverSwiper = false + this.restartTimer() // 恢复自动刷新 + }, + + // 触摸开始(移动端) + handleSwiperTouchStart() { + this.isMouseOverSwiper = true + this.stopTimer() // 暂停自动刷新 + }, + + // 触摸结束(移动端) + handleSwiperTouchEnd() { + // 延迟200ms判断是否离开(避免短时间触摸误判) + setTimeout(() => { + this.isMouseOverSwiper = false + this.restartTimer() // 恢复自动刷新 + }, 200) + }, + // 所有用户操作统一调用此方法 + handleUserAction() { + if (this.isOperating) return // 操作锁防止重复触发 + this.isOperating = true // 标记开始操作 + + // 清除现有定时器 + if (this.timer) { + clearInterval(this.timer) + this.timer = null + } + + // 延迟重置操作状态和重启定时器 + setTimeout(() => { + this.isOperating = false // 操作结束 + this.restartTimer() // 重启定时器 + }, this.timerResetDelay) + }, + // 启动定时器(仅在非操作状态下运行) + startTimer() { + if (this.isDetailOpen || this.isOperating || this.isMouseOverAnySwiper) return // 详情打开或操作中不启动定时器 + this.timer = setInterval(() => { + if (!this.isMouseOverSwiper) { // 确保鼠标不在Swiper区域内时刷新 + this.initBookshelfDetails(this.classnameL ? -1 : 1) + } + }, this.refreshtime) + }, + + // 重启定时器(操作结束后调用) + restartTimer() { + if (!this.isDetailOpen) { + this.stopTimer() + this.startTimer() + } + }, + + // 停止定时器 + stopTimer() { + if (this.timer) { + clearInterval(this.timer) + this.timer = null + } + }, + handleRefresh() { + this.handleUserAction() + if (this.classnameL !== null) { + this.initBookshelfDetails(-1) + } else { + this.initBookshelfDetails(1) + } + }, initSwiper() { this.$nextTick(() => { for (const key in this.bookList) { @@ -85,13 +194,21 @@ export default { }) }, 50) }, + // 详情弹窗关闭时触发 + handleDetailClose() { + this.isDetailOpen = false + this.restartTimer() // 关闭弹窗后重启定时器 + }, handleDetails(itemData) { + this.handleUserAction() // const linkSrc = process.env.NODE_ENV === 'production' ? window.g.ApiUrl : process.env.VUE_APP_BASE_API const params = { isbn: itemData.isbn.replace(/\-/g, '') } getBookDetailsByISBN(params).then(res => { this.$refs.detailDom.dialogVisible = true + this.isDetailOpen = true + this.stopTimer() // 打开弹窗时停止定时器 if (res) { this.$refs.detailDom.bookData = res // console.log('res', res) @@ -118,6 +235,7 @@ export default { }, // 翻页 handlePage(page) { + this.handleUserAction() if (page === 1) { // 下一页 } else { @@ -126,6 +244,7 @@ export default { }, // 控制左右 handleDirect(n) { + this.handleUserAction() if (n === -1) { // 左 this.classnameR = null this.classnameL = 'rack-direct-active' @@ -139,6 +258,7 @@ export default { this.$router.go(-1) }, initBookshelfDetails(n) { + if (this.isDetailOpen) return this.loading = true const params = {} if (n === -1) { // 左 @@ -169,6 +289,7 @@ export default { setTimeout(() => { this.loading = false }, 1000) + this.isOperating = false // 数据加载完成,允许定时器重启 }) } } diff --git a/src/views/module/bookDetails.vue b/src/views/module/bookDetails.vue index 30d8435..280e20e 100644 --- a/src/views/module/bookDetails.vue +++ b/src/views/module/bookDetails.vue @@ -1,6 +1,11 @@