From f2ff05f4e354833cdf7a46333049d4d51fff0593 Mon Sep 17 00:00:00 2001 From: Miao_Spring <539943419@qq.com> Date: Thu, 12 Sep 2024 03:31:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9D=E6=AD=A5=E5=AE=9E=E7=8E=B0?= =?UTF-8?q?=E5=9F=BA=E4=BA=8Eiframe=E7=9A=84=E6=8F=92=E4=BB=B6=E7=9A=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E9=80=BB=E8=BE=91=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/App.vue | 133 ++++++++++---------------- src/class/VirtualDirectory.ts | 35 ++++++- src/hooks/buildFromTree.ts | 15 +++ src/plugins/miaoIframe/miaoIframe.vue | 21 +++- 4 files changed, 120 insertions(+), 84 deletions(-) create mode 100644 src/hooks/buildFromTree.ts diff --git a/src/App.vue b/src/App.vue index e6916de..f2ea87a 100644 --- a/src/App.vue +++ b/src/App.vue @@ -113,109 +113,79 @@ onMounted(async () => { await init(messageProviderRef.value?.alertTip) pluginCenter = usePluginCenter() pluginCenter.usePlugin('miaoDirectory', [rootDirectory], []) + console.log(rootDirectory.tree) }) // @ts-ignore provide('globalAlertTip', messageProviderRef.value?.alertTip) +provide('rootDirectory', rootDirectory) @@ -379,6 +349,7 @@ $tag-width: 170px; .view { .view-controller { .tabs-container { + .tab-move, .tab-enter-active { transition: all 0.2s ease; diff --git a/src/class/VirtualDirectory.ts b/src/class/VirtualDirectory.ts index 58745dd..890a730 100644 --- a/src/class/VirtualDirectory.ts +++ b/src/class/VirtualDirectory.ts @@ -6,6 +6,21 @@ import type { stats, file, directory } from "@/types/type.ts"; const miaoFetchApi = useMiaoFetchApi(); +export interface Tree { + name: string; + type: 'directory'; + path: string; + stats: stats; + files?: { + name: string; + type: 'file'; + size: number; + stats: stats; + url: string; + }[]; + directories?: Tree[]; +} + export class VirtualFile { constructor(info: file, parent: VirtualDirectory) { this.name = info.name; @@ -26,7 +41,7 @@ export class VirtualFile { } get url() { - return `${config.api.get}${this.parent.path}${this.name}` + return `${config.api.get}${this.parent.path}${this.name}`; } } @@ -96,6 +111,24 @@ class VirtualDirectory { return this.parent.getParent(layer - 1); } + get tree(): Tree { + return { + name: this.name, + type: this.type, + path: this.path, + stats: this.stats, + files: + this.files?.map(v => ({ + name: v.name, + type: v.type, + size: v.size, + stats: v.stats, + url: v.url + })) ?? [], + directories: this.directories?.map(v => v.tree) ?? [] + }; + } + updateContent(content: (file | directory)[]) { this.files = this.files ?? []; this.directories = this.directories ?? []; diff --git a/src/hooks/buildFromTree.ts b/src/hooks/buildFromTree.ts new file mode 100644 index 0000000..4f9d06a --- /dev/null +++ b/src/hooks/buildFromTree.ts @@ -0,0 +1,15 @@ +import VirtualDirectory, { Tree, VirtualFile } from "@/class/VirtualDirectory"; + +/** + * 通过VirtualDirectory的.tree重建文件夹树 + * @param {any} data:Tree + * @returns {any} + */ +const buildFromTree = (data: Tree) => { + const root = new VirtualDirectory(data) + root.files = data.files?.map(v=>new VirtualFile(v, root)) + root.directories = data.directories?.map(v=>buildFromTree(v)) + return root +} + +export default buildFromTree; \ No newline at end of file diff --git a/src/plugins/miaoIframe/miaoIframe.vue b/src/plugins/miaoIframe/miaoIframe.vue index dd377aa..c793a95 100644 --- a/src/plugins/miaoIframe/miaoIframe.vue +++ b/src/plugins/miaoIframe/miaoIframe.vue @@ -1,6 +1,7 @@