diff --git a/frontend/src/pages/FilesPage.vue b/frontend/src/pages/FilesPage.vue index 918ba030..4b05fc70 100644 --- a/frontend/src/pages/FilesPage.vue +++ b/frontend/src/pages/FilesPage.vue @@ -851,8 +851,12 @@ function openInTerminal() { }) } +// 序号保护:防止并发/重试请求导致旧结果覆盖新结果 +let _browseSeq = 0 + async function browse() { if (!selectedServer.value) return + const seq = ++_browseSeq loading.value = true const path = normalizeRemotePath(currentPath.value) currentPath.value = path @@ -861,6 +865,8 @@ async function browse() { server_id: selectedServer.value, path, }) + // 如果期间启动了更新的 browse(token刷新重试/快速导航),丢弃本次结果 + if (seq !== _browseSeq) return const { items, error } = parseBrowseResponse(res) // Auto-fallback: if path doesn't exist, try parent directories automatically @@ -886,11 +892,14 @@ async function browse() { preloadDirectoryFiles(selectedServer.value, path, items) } } catch { + if (seq !== _browseSeq) return files.value = [] snackbar('浏览目录失败', 'error') } finally { - loading.value = false - syncRouteQuery() + if (seq === _browseSeq) { + loading.value = false + syncRouteQuery() + } } }