diff --git a/src/App.vue b/src/App.vue index 910eeba..e315c36 100644 --- a/src/App.vue +++ b/src/App.vue @@ -42,14 +42,18 @@ const rootDirectory = reactive( // component就是一个vue组件,类似于miaoDirectory const createView = ( component: any, - currentObjects: (VirtualDirectory | VirtualFile)[], + currentDirectorys?: VirtualDirectory[], + currentFiles?: VirtualFile[], index?: number ) => { index ?? (index = views.length) views.splice( index, 0, - reactive(new VirtualPage(component, [...currentObjects])) + reactive(new VirtualPage(component, { + directorys: [...(currentDirectorys ?? [])], + files: [...(currentFiles ?? [])] + })) ) } @@ -145,7 +149,8 @@ onMounted(() => { @click=" createView( view.component, - view.currentObjects, + view.currentDirectorys, + view.currentFiles, index + 1 ) "> @@ -183,7 +188,7 @@ onMounted(() => { :key="view.uid"> @@ -194,6 +199,7 @@ onMounted(() => { diff --git a/src/class/VirtualDirectory.ts b/src/class/VirtualDirectory.ts index 9f00026..41e406c 100644 --- a/src/class/VirtualDirectory.ts +++ b/src/class/VirtualDirectory.ts @@ -80,11 +80,11 @@ class VirtualDirectory { * @param {number} layer 需要跳转的层数 * @returns {VirtualDirectory} */ - getParent(layer: number): VirtualDirectory { + getParents(layer: number): VirtualDirectory { if (layer <= 0 || !this.parent) { return this; } - return this.parent.getParent(layer - 1); + return this.parent.getParents(layer - 1); } updateContent(content: (file | directory)[]) { diff --git a/src/class/VirtualPage.ts b/src/class/VirtualPage.ts index cf641e3..e67dc85 100644 --- a/src/class/VirtualPage.ts +++ b/src/class/VirtualPage.ts @@ -13,20 +13,23 @@ const getRandomWebSafeColor = (() => { })(); export default class VirtualPage { - constructor(component: any, initObjects: (VirtualDirectory | VirtualFile)[]) { + constructor(component: any, initObjects?:{ directorys?: VirtualDirectory[], files?: VirtualFile[]}) { this.component = shallowRef(component); - this.currentObjects = initObjects; - + this.currentDirectorys = initObjects?.directorys ?? []; + this.currentFiles = initObjects?.files ?? []; this.visible = true; this.uid = generateId(); this.refreshKey = Math.random(); this.color = getRandomWebSafeColor(); } + // 页面使用的组件 component: any; // 是否可见 visible: boolean; - // 当前正在使用的文件或是文件夹 - currentObjects: (VirtualDirectory | VirtualFile)[]; + // 当前正在使用的文件夹 + currentDirectorys: VirtualDirectory[]; + // 当前正在使用的文件 + currentFiles: VirtualFile[]; // 区分每一个页面的唯一id uid: number; // 当refreshKey改变时需要刷新页面,目前还没接入刷新 @@ -40,7 +43,7 @@ export default class VirtualPage { if (this._title) { return this._title; } - return this.currentObjects[0].name; + return this.currentDirectorys[0].name; } setTitle(title: string) { diff --git a/src/components/miaoContextMenu.vue b/src/components/miaoContextMenu.vue new file mode 100644 index 0000000..42e4b69 --- /dev/null +++ b/src/components/miaoContextMenu.vue @@ -0,0 +1,88 @@ + + + + + + + \ No newline at end of file diff --git a/src/components/miaoDirectory/miaoDirectoryItem.vue b/src/components/miaoDirectory/miaoDirectoryItem.vue index 29afc10..51a6f60 100644 --- a/src/components/miaoDirectory/miaoDirectoryItem.vue +++ b/src/components/miaoDirectory/miaoDirectoryItem.vue @@ -1,38 +1,31 @@ + diff --git a/src/views/miaoDirectory.vue b/src/views/miaoDirectory.vue index 4d662d6..2785620 100644 --- a/src/views/miaoDirectory.vue +++ b/src/views/miaoDirectory.vue @@ -1,15 +1,11 @@ @@ -105,7 +74,7 @@ import { computed, onMounted, ref } from 'vue' import Config from '@/config' import miaoMask from '@/components/miaoMask.vue' import miaoDirectoryItem from '@/components/miaoDirectory/miaoDirectoryItem.vue' -// import miaoPopupInput from "@/components/miaoPopupInput.vue"; +import miaoPopupInput from "@/components/miaoPopupInput.vue"; import miaoDropHandler from '@/components/miaoDropHandler.vue' import useMiaoFetchApi from '@/hooks/useMiaoFetchApi' import useDataBus from '@/hooks/useDataBus' @@ -146,6 +115,7 @@ const currentDirectory = computed(() => { return currentObjects.value[0] }) +// 当前组件在views中的序号 const index = computed(() => { for (let i in views) { if (views[i].uid === props.id) { @@ -186,7 +156,7 @@ const setCurrentDirectory = async (virtualDirectory: VirtualDirectory) => { ) virtualDirectory.updateContent(data) } else { - ;(async () => { + ; (async () => { const data: (file | directory)[] = await miaoFetchApi.get( virtualDirectory ) @@ -249,10 +219,6 @@ const handleItemDragStart = async ( } } -const handleDropVDirectory = async (vDirs: VirtualDirectory[]) => { - setCurrentDirectory(vDirs[0]) -} - const handleDropFiles = async (files: File[]) => { currentDirectory.value && uploadQueue.push(files, currentDirectory.value, { @@ -262,6 +228,30 @@ const handleDropFiles = async (files: File[]) => { }) } +const handleDropVDirectory = async (vDirs: VirtualDirectory[]) => { + if (vDirs[0].parent === currentDirectory.value) { + return + } + const popupRes = await popupInput.value.popup({ + title: '重命名', + showInput: true, + inputProps: { + placeholder: '', + }, + options: [{ + label: '取消', + key: false, + type: 'error' + }, { + label: '确认', + key: true, + type: 'success' + },] + }) + console.log({ popupRes }) + // setCurrentDirectory(vDirs[0]) +} + onMounted(async () => { await setCurrentDirectory(currentDirectory.value) }) @@ -404,5 +394,4 @@ $bottom-bar-height: 60px; // position: absolute; // } // } -// } - +// }