From 9829771dbd13ac2b387d571d394f5c74c2af3d56 Mon Sep 17 00:00:00 2001 From: Darren Yu Date: Thu, 4 Sep 2025 11:05:16 +0800 Subject: [PATCH] fix(archive view): archive file view without dir info display abnormally --- .../Viewers/ArchivePreview/ArchivePreview.tsx | 36 ++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/component/Viewers/ArchivePreview/ArchivePreview.tsx b/src/component/Viewers/ArchivePreview/ArchivePreview.tsx index e93ac5c..8ec8fff 100644 --- a/src/component/Viewers/ArchivePreview/ArchivePreview.tsx +++ b/src/component/Viewers/ArchivePreview/ArchivePreview.tsx @@ -105,7 +105,41 @@ const ArchivePreview = () => { ) .then((res) => { if (res.files) { - setFiles(res.files); + // 补齐目录 + const allItems: ArchivedFile[] = []; + const allDirs = new Set(); + + res.files.forEach((item) => { + allItems.push(item); + + if (item.is_directory) { + allDirs.add(item.name); + } else { + const dirElements = item.name.split("/"); + for (let i = 1; i < dirElements.length; i++) { + const dirName = dirElements.slice(0, i).join("/"); + if (!allDirs.has(dirName)) { + allDirs.add(dirName); + allItems.push({ + name: dirName, + size: 0, + updated_at: "1970-01-01T00:00:00Z", + is_directory: true, + }); + } + } + } + }); + + // 排序文件 + // 先目录,后文件,分别按名称排序 + allItems.sort((a, b) => { + if (a.is_directory && !b.is_directory) return -1; + if (!a.is_directory && b.is_directory) return 1; + return a.name.localeCompare(b.name); + }); + + setFiles(allItems); } }) .catch(() => {