|
|
@@ -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>
|
|
|
|