ouyj 4 mesiacov pred
rodič
commit
ada4c61366
1 zmenil súbory, kde vykonal 38 pridanie a 6 odobranie
  1. 38 6
      pages/worktime/index.uvue

+ 38 - 6
pages/worktime/index.uvue

@@ -214,6 +214,8 @@ const rank = ref<number | null>(null)
 const totalRankingUsers = ref<number | null>(null)
 // 添加防重复刷新的标志
 const isRefreshing = ref<boolean>(false)
+// 添加刷新时间戳,用于防抖
+const lastRefreshTime = ref<number>(0)
 
 // 弹窗显示状态
 const showDatePickerPopup = ref<boolean>(false)
@@ -457,6 +459,10 @@ function getStatistics() {
 function loadData(isRefresh: boolean, disablePullDown = false) {
   // 防止重复请求的核心机制 - 参考工单页面的简单有效方式
   if (loading.value) {
+    // 确保刷新状态最终被重置,防止卡死
+    if (!isRefresh) {
+      refreshing.value = false;
+    }
     return
   }
 
@@ -507,12 +513,22 @@ function loadData(isRefresh: boolean, disablePullDown = false) {
     hasMore.value = orderList.value.length < responseTotal
   }).catch((error) => {
     console.error('获取工单列表失败:', error);
+    // 出错时也需要重置刷新状态
+    if (shouldRefresh) {
+      refreshing.value = false;
+      isRefreshing.value = false;
+    }
   }).finally(() => {
     // 无论成功还是失败,都重置所有加载状态
     loading.value = false;
     // 确保刷新状态最终被重置
-    refreshing.value = false;
-    isRefreshing.value = false; // 重置刷新标志
+    if (shouldRefresh) {
+      refreshing.value = false;
+      // 使用setTimeout确保状态彻底重置
+      setTimeout(() => {
+        isRefreshing.value = false;
+      }, 50);
+    }
   })
 }
 
@@ -603,13 +619,26 @@ function loadMore() {
 
 function handleRefresh() {
 	console.log("handleRefresh被触发")
+	console.log("loading.value===",loading.value)
+	console.log("isRefreshing.value===",isRefreshing.value)
+	
+	// 防抖处理,避免频繁触发
+	const now = Date.now();
+	if (now - lastRefreshTime.value < 1000) {
+		console.log("刷新操作过于频繁,忽略本次触发");
+		refreshing.value = false;
+		return;
+	}
+	lastRefreshTime.value = now;
+	
   // 添加防重复调用检查
   if (loading.value || isRefreshing.value) {
     // 如果已经在加载或正在刷新,直接重置刷新状态
     refreshing.value = false;
     return;
   }
-  
+  console.log("loading.value1===",loading.value)
+  	console.log("isRefreshing.value1===",isRefreshing.value)
   // 设置刷新标志
   isRefreshing.value = true;
   
@@ -617,8 +646,8 @@ function handleRefresh() {
   
   // 确保在一定时间后重置刷新标志,防止意外情况
   setTimeout(() => {
-    isRefreshing.value = false;
-  }, 5000); // 5秒后自动重置
+    isRefreshing.value = false
+  }, 100) // 延迟重置,确保状态完全更新
 }
 
 function showCustomDatePicker() {
@@ -805,7 +834,10 @@ onLoad((options) => {
 
 // 组件销毁时清除定时器
 onBeforeUnmount(() => {
-
+  // 如果组件销毁前还有未完成的刷新操作,确保状态被重置
+  loading.value = false;
+  refreshing.value = false;
+  isRefreshing.value = false;
 })
 </script>