diff --git a/README.md b/README.md index 4a4098e..fb458f9 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ ## TODO list: -| 计划 | 状态 | +| 计划 | 状态 | |---|---| | 拆分miaoDirectory | ✅ | | 完善视频插件 | ✅ | | 完善PDF插件 | ✅ | | 完善Code插件 | ✅ | | 实现miaoDirectory的搜索功能 | ✅ | -| plugin增加些选项,icon之类的 | ❌ | +| plugin增加些属性,icon, disable, group之类的 | ❌ | | 完善miaoDirectory的搜索功能 | ❌ | | 实现miaoDirectory的排序功能 | ❌ | | 完善图片浏览插件 | ❌ | diff --git a/src/App.vue b/src/App.vue index 61599ed..1357920 100644 --- a/src/App.vue +++ b/src/App.vue @@ -59,7 +59,8 @@ const deleteView = (index: number) => { // 点击标题是隐藏其他标签或显示其他标签,还挺好用的 const handleClickTitle = (index: number) => { let count = views._views.filter((v) => v.visible).length - let op = !views._views[index].visible || count > 1 ? 'hideOthers' : 'showOthers' + let op = + !views._views[index].visible || count > 1 ? 'hideOthers' : 'showOthers' let _index = 0 while (_index < views._views.length) { if (_index !== index) { @@ -114,31 +115,49 @@ onMounted(() => {
-
- +
+ {{ view.title.length > 5 && 0 ? `${view.title.substring(0, 5)}...` : view.title }} -
+
- - - + + + - - +
@@ -148,7 +167,10 @@ onMounted(() => {
- + @@ -158,10 +180,19 @@ onMounted(() => {
-
-
@@ -169,8 +200,10 @@ onMounted(() => {
- - + @@ -334,7 +367,6 @@ $tag-width: 170px; .view { .view-controller { .tabs-container { - .tab-move, .tab-enter-active { transition: all 0.2s ease; diff --git a/src/class/PluginCenter.ts b/src/class/PluginCenter.ts index 01bfd8c..50c75e3 100644 --- a/src/class/PluginCenter.ts +++ b/src/class/PluginCenter.ts @@ -1,13 +1,29 @@ import useVirtualPages from '@/hooks/useVirtualPages' import VirtualDirectory, { VirtualFile } from './VirtualDirectory' +import { ShallowRef, shallowRef } from 'vue' -type plugin = { +export enum PluginGroup { + default = 'default', + mainMenu = 'mainMenu' +} + +type Plugin = { // 用于显示的名字 name: string - // 判断是否可以使用这个组件 + // 代表插件的icon + icon?: ShallowRef + // 是否禁用插件 + disable: boolean + // 插件所属的group,用于区分插件使用的场合 + group: PluginGroup[] + // 判断在未禁用时是否可以使用这个组件 // 使用组件即调用下面的func filter: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => boolean - func: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => void + func: ( + VDirectories: VirtualDirectory[], + VFiles: VirtualFile[], + ...args: any[] + ) => void } export default class PluginCenter { @@ -15,30 +31,43 @@ export default class PluginCenter { this.pluginsMap = {} } pluginsMap: { - [key: string]: plugin + [key: string]: Plugin } - register(key: string, plugin: plugin) { + register(key: string, plugin: Plugin) { this.pluginsMap[key] = plugin } /** * 便捷地注册一个组件为插件,触发时直接用新页面打开 */ - registerComponent( - key: string, - name: string, - getComponent: () => Promise, + registerComponent(option: { + key: string + name: string + icon?: any + getComponent: () => Promise + group?: PluginGroup[] filter: ( VDirectories: VirtualDirectory[], VFiles: VirtualFile[] ) => boolean - ): void { + }): void { + const { + key, + name, + getComponent, + icon, + filter, + group = [PluginGroup.default] + } = option let _component: any const views = useVirtualPages() this.register(key, { name, filter, + icon: shallowRef(icon), + group, + disable: false, func: async ( VDirectories: VirtualDirectory[], VFiles: VirtualFile[] @@ -52,10 +81,22 @@ export default class PluginCenter { }) } - getUsablePlugin(VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) { + getUsablePlugin( + VDirectories: VirtualDirectory[], + VFiles: VirtualFile[], + option?: { + group?: PluginGroup[] + } + ) { + const { group = [PluginGroup.default] } = option ?? {} const usableList = [] for (let key of Object.keys(this.pluginsMap)) { - if (this.pluginsMap[key].filter(VDirectories, VFiles)) { + const _plugin = this.pluginsMap[key] + if ( + !_plugin.disable && + _plugin.group.filter((v) => group.includes(v)).length > 0 && + _plugin.filter(VDirectories, VFiles) + ) { usableList.push(key) } } @@ -67,9 +108,10 @@ export default class PluginCenter { usePlugin( key: string, - VDirectories: VirtualDirectory[], - VFiles: VirtualFile[] + VDirectories?: VirtualDirectory[], + VFiles?: VirtualFile[], + ...args: any[] ) { - this.pluginsMap[key].func(VDirectories, VFiles) + this.pluginsMap[key].func(VDirectories ?? [], VFiles ?? [], ...args) } } diff --git a/src/components/miaoDirectory/miaoDirectoryItemsContainer.vue b/src/components/miaoDirectory/miaoDirectoryItemsContainer.vue index 7acca3d..bb2f1dd 100644 --- a/src/components/miaoDirectory/miaoDirectoryItemsContainer.vue +++ b/src/components/miaoDirectory/miaoDirectoryItemsContainer.vue @@ -1,22 +1,42 @@