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(() => {