> {
+ return apiService.delete<{ message: string }>('/api/proxy/cache/expired');
+ }
+}
+
+export const cacheService = new CacheService();
+export default cacheService;
\ No newline at end of file
diff --git a/ui/src/views/ArtistView.vue b/ui/src/views/ArtistView.vue
index e15dc3b..4926540 100644
--- a/ui/src/views/ArtistView.vue
+++ b/ui/src/views/ArtistView.vue
@@ -100,7 +100,7 @@
@@ -324,7 +324,7 @@ const fetchArtworks = async (page = 1, isJumpToPage = false) => {
}
} catch (err) {
console.error('获取作品列表失败:', err);
-
+
// 只有在跳转到指定页面失败时才显示错误
if (isJumpToPage) {
error.value = `跳转失败:无法跳转到第 ${page} 页`;
diff --git a/ui/src/views/ArtworkView.vue b/ui/src/views/ArtworkView.vue
index fc97a92..f3ef136 100644
--- a/ui/src/views/ArtworkView.vue
+++ b/ui/src/views/ArtworkView.vue
@@ -253,8 +253,9 @@ const fetchArtworkDetail = async () => {
loading.value = true;
error.value = null;
- // 清理之前的任务状态
+ // 立即清理所有下载相关状态
currentTask.value = null;
+ downloading.value = false;
stopTaskStreaming();
const response = await artworkService.getArtworkDetail(artworkId);
@@ -307,7 +308,10 @@ const handleDownload = async () => {
if (!artwork.value) return;
try {
+ // 清理之前的任务状态
+ currentTask.value = null;
downloading.value = true;
+
// 如果已经下载过,则强制重新下载(跳过现有文件检查)
const skipExisting = !isDownloaded.value;
const response = await downloadService.downloadArtwork(artwork.value.id, {
@@ -383,9 +387,12 @@ const startTaskStreaming = (taskId: string) => {
// 延迟检查下载状态,确保文件写入完成
setTimeout(async () => {
- await checkDownloadStatus(artwork.value!.id);
- // 清理任务状态,显示下载完成状态
- currentTask.value = null;
+ // 检查当前页面是否还是同一个作品,避免页面切换后的状态更新
+ if (artwork.value && artwork.value.id === task.artwork_id) {
+ await checkDownloadStatus(artwork.value.id);
+ // 清理任务状态,显示下载完成状态
+ currentTask.value = null;
+ }
}, 1000);
}
},
@@ -404,6 +411,9 @@ const stopTaskStreaming = () => {
sseConnection.value();
sseConnection.value = null;
}
+ // 确保清理任务状态
+ currentTask.value = null;
+ downloading.value = false;
};
// 更新任务状态
@@ -501,6 +511,11 @@ const fetchArtistArtworks = async () => {
// 导航到上一个作品
const navigateToPrevious = () => {
if (previousArtwork.value && !loading.value) {
+ // 立即清理下载任务状态
+ currentTask.value = null;
+ downloading.value = false;
+ stopTaskStreaming();
+
// 立即设置加载状态
loading.value = true;
@@ -519,6 +534,11 @@ const navigateToPrevious = () => {
// 导航到下一个作品
const navigateToNext = () => {
if (nextArtwork.value && !loading.value) {
+ // 立即清理下载任务状态
+ currentTask.value = null;
+ downloading.value = false;
+ stopTaskStreaming();
+
// 立即设置加载状态
loading.value = true;
@@ -630,8 +650,12 @@ watch(() => route.params.id, (newId, oldId) => {
// 如果是同一个ID,不重复加载
if (newId === oldId) return;
- // 清理之前的任务状态
+ // 确保页面滚动到顶部
+ window.scrollTo(0, 0);
+
+ // 立即清理所有下载相关状态
currentTask.value = null;
+ downloading.value = false;
stopTaskStreaming();
// 重新获取作品详情
@@ -660,6 +684,9 @@ const handleKeydown = (event: KeyboardEvent) => {
};
onMounted(() => {
+ // 确保页面滚动到顶部
+ window.scrollTo(0, 0);
+
fetchArtworkDetail();
if (showNavigation.value) {
fetchArtistArtworks();
diff --git a/ui/src/views/RankingView.vue b/ui/src/views/RankingView.vue
index a803446..d357ced 100644
--- a/ui/src/views/RankingView.vue
+++ b/ui/src/views/RankingView.vue
@@ -46,6 +46,18 @@
+
+
+
+
+
+
+
+
+
第 {{ currentPage }} 页,共 {{ totalPages }} 页
@@ -89,6 +101,10 @@ const pageSize = ref(30);
const totalCount = ref(0);
const totalPages = ref(0);
+// 跳转到指定页面相关
+const jumpPageInput = ref('');
+const jumping = ref(false);
+
// 缓存相关
const cache = ref