修复作品返回页面不刷新的问题

This commit is contained in:
2025-09-08 07:31:18 +08:00
parent 6268406a11
commit d44111320b
3 changed files with 56 additions and 513 deletions
+53 -10
View File
@@ -439,7 +439,7 @@ const goToPage = (page: number) => {
}
});
fetchArtworks(page);
// 由于路由监听器会自动处理页面变化,这里不需要手动调用fetchArtworks
};
// 关注/取消关注
@@ -559,11 +559,10 @@ const handleJumpToPage = async () => {
}
});
try {
await fetchArtworks(page, true);
} finally {
// 等待页面变化处理完成
setTimeout(() => {
jumping.value = false;
}
}, 500);
};
// 监听路由变化
@@ -594,13 +593,45 @@ watch(() => route.params.id, async (newId, oldId) => {
}
}, { immediate: false });
// 防止重复处理的标志
const isProcessingPageChange = ref(false);
// 统一的页面变化处理函数
const handlePageChange = async (page: number, isJumpToPage = false) => {
if (isProcessingPageChange.value || page === currentPage.value) return;
isProcessingPageChange.value = true;
try {
// 如果artist还没加载完成,等待加载完成
if (!artist.value) {
const waitForArtist = () => {
return new Promise<void>((resolve) => {
const unwatch = watch(() => artist.value, (newArtist) => {
if (newArtist) {
unwatch();
resolve();
}
}, { immediate: true });
});
};
await waitForArtist();
}
if (artist.value) {
currentPage.value = page;
await fetchArtworks(page, isJumpToPage);
}
} finally {
isProcessingPageChange.value = false;
}
};
// 监听URL查询参数变化
watch(() => route.query.page, (newPage) => {
watch(() => route.query.page, async (newPage) => {
if (newPage && artist.value) {
const page = parseInt(newPage as string);
if (page > 0 && page !== currentPage.value) {
currentPage.value = page;
fetchArtworks(page, true);
if (page > 0) {
await handlePageChange(page, true);
}
}
});
@@ -612,7 +643,19 @@ watch(() => artist.value?.id, (newArtistId, oldArtistId) => {
artworks.value = [];
currentPage.value = 1;
totalPages.value = 0;
fetchArtworks(1);
// 检查是否有页面参数
const pageParam = route.query.page;
if (pageParam) {
const page = parseInt(pageParam as string);
if (page > 0) {
handlePageChange(page, true);
} else {
fetchArtworks(1);
}
} else {
fetchArtworks(1);
}
}
}, { immediate: false });