diff --git a/README.md b/README.md index 4083689..1b55a3e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,8 @@ todo: 标签页,miaoDirectory切换动画 [finish] -todo: 重构virtualPage,所有page以插件形式使用 [] -todo: miaoDirectory插件化,为后续插件功能开发做准备 [] +todo: 重构virtualPage,所有page以插件形式使用 [finish] +todo: miaoDirectory插件化,为后续插件功能开发做准备 [finish] todo: miaoPopupInput, 弹出一个输入框 todo: miaoDirectory的新建文件/文件夹功能 todo: miaoDirectory的重命名功能 -todo: miaoDirectory的多选功能 \ No newline at end of file +todo: miaoDirectory的多选功能 +todo: VirtualDirectory更新时更新文件信息 \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index cd9e32e..7a25985 100644 --- a/src/App.vue +++ b/src/App.vue @@ -5,7 +5,7 @@ import { NIcon, NScrollbar, NDropdown, NQrCode } from 'naive-ui'; import { EyeOffOutline, EyeOutline, CloseOutline, CopyOutline, EllipsisVertical, QrCodeOutline } from '@vicons/ionicons5' import miaoDirectory from './views/miaoDirectory.vue'; import VirtualPage from './class/VirtualPage'; -import VirtualDirectory from './class/VirtualDirectory'; +import VirtualDirectory, { VirtualFile } from './class/VirtualDirectory'; import MiaoMask from './components/miaoMask.vue'; import config from './config'; import useViretualPages from './hooks/useVirtualPages'; @@ -31,16 +31,16 @@ const rootDirectory = reactive(new VirtualDirectory({ } })) -const createView = (initDirectory: VirtualDirectory, index?: number) => { +// component就是一个vue组件,类似于miaoDirectory +const createView = (component: any, currentObjects: (VirtualDirectory | VirtualFile)[], index?: number) => { index ?? (index = views.length) - console.log(initDirectory) - views.splice(index, 0, reactive(new VirtualPage(initDirectory))) + views.splice(index, 0, reactive(new VirtualPage(component, [...currentObjects]))) } const deleteView = (index: number) => { views.splice(index, 1) if (views.length === 0) { - createView(rootDirectory) + createView(miaoDirectory, [rootDirectory]) } } @@ -78,7 +78,6 @@ const openMenuOption = [ ] const handleMenuSelect = (key: string) => { - console.log(key) if (key === 'share') { showModal.value = true modalData.value = { @@ -93,7 +92,7 @@ const handleMenuSelect = (key: string) => { } onMounted(() => { - createView(rootDirectory) + createView(miaoDirectory, [rootDirectory]) }) @@ -111,7 +110,8 @@ onMounted(() => { - + @@ -135,8 +135,8 @@ onMounted(() => {
- +
@@ -327,7 +327,7 @@ $tag-width: 170px; // transition: all 0.2s ease; // } - + // .page-enter-active { // } diff --git a/src/class/virtualPage.ts b/src/class/virtualPage.ts index 7fd64ec..cf641e3 100644 --- a/src/class/virtualPage.ts +++ b/src/class/virtualPage.ts @@ -1,35 +1,50 @@ -import VirtualDirectory from "./VirtualDirectory"; +import { shallowRef } from "vue"; +import VirtualDirectory, { VirtualFile } from "./VirtualDirectory"; import generateId from "@/hooks/generateId"; const getRandomWebSafeColor = (() => { const webSafeColors = ["#009900", "#999900", "#009999", "#990099", "#0000ee"]; - let counter = 0 + let counter = 0; return () => { - const color = webSafeColors[counter % webSafeColors.length] - counter += 1 + const color = webSafeColors[counter % webSafeColors.length]; + counter += 1; return color; }; })(); export default class VirtualPage { - constructor(initDirectory: VirtualDirectory) { + constructor(component: any, initObjects: (VirtualDirectory | VirtualFile)[]) { + this.component = shallowRef(component); + this.currentObjects = initObjects; + this.visible = true; this.uid = generateId(); - this.currentDirectory = initDirectory; this.refreshKey = Math.random(); this.color = getRandomWebSafeColor(); } + component: any; + // 是否可见 visible: boolean; - currentDirectory: VirtualDirectory; + // 当前正在使用的文件或是文件夹 + currentObjects: (VirtualDirectory | VirtualFile)[]; // 区分每一个页面的唯一id uid: number; // 当refreshKey改变时需要刷新页面,目前还没接入刷新 refreshKey: number; - + // 为了区分,每个虚拟页面都会分配一个color,这个color会体现在tab上 color: string; + // 用于展示的title + _title?: string; get title() { - return this.currentDirectory.name; + if (this._title) { + return this._title; + } + return this.currentObjects[0].name; + } + + setTitle(title: string) { + this._title = title; } // 切换显示状态 @@ -37,11 +52,6 @@ export default class VirtualPage { this.visible = !this.visible; } - // 设置(同步)正在展示的文件夹 - setCurrrentDirectory(currDir: VirtualDirectory) { - this.currentDirectory = currDir; - } - // 刷新,不过好像没有用得到的时候吧 // 事实上也不应该用得到,因为更新应该是响应式的 refresh() { diff --git a/src/components/miaoDirectory/miaoDirectoryItem.vue b/src/components/miaoDirectory/miaoDirectoryItem.vue index 64ec291..40a80b1 100644 --- a/src/components/miaoDirectory/miaoDirectoryItem.vue +++ b/src/components/miaoDirectory/miaoDirectoryItem.vue @@ -34,6 +34,7 @@ const dataBus = useDataBus() const emit = defineEmits<{ download: [] delete: [] + dragStart: [] }>() const props = defineProps<{ diff --git a/src/components/miaoPopupInput.vue b/src/components/miaoPopupInput.vue new file mode 100644 index 0000000..7447849 --- /dev/null +++ b/src/components/miaoPopupInput.vue @@ -0,0 +1,43 @@ + + + + diff --git a/src/views/miaoDirectory.vue b/src/views/miaoDirectory.vue index 27eece7..b1e4fa9 100644 --- a/src/views/miaoDirectory.vue +++ b/src/views/miaoDirectory.vue @@ -1,186 +1,240 @@