diff --git a/src/class/PluginCenter.ts b/src/class/PluginCenter.ts index b374084..d9f93cf 100644 --- a/src/class/PluginCenter.ts +++ b/src/class/PluginCenter.ts @@ -20,6 +20,7 @@ export interface registerComponentOption { exitConfirm?: boolean; // 若为true,则只会创建一个页面,当存在已创建页面则会直接将VFile和VDir加到curr里面 single?: boolean; + priority?: number; } export type Plugin = { @@ -31,6 +32,8 @@ export type Plugin = { disable: boolean; // 插件所属的group,用于区分插件使用的场合 group: PluginGroup[]; + // 插件优先级 + priority: number; // 判断在未禁用时是否可以使用这个组件 // 使用组件即调用下面的func filter: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => boolean; @@ -56,7 +59,7 @@ export default class PluginCenter { * 便捷地注册一个组件为插件,触发时直接用新页面打开 */ registerComponent(option: registerComponentOption): void { - const { key, name, getComponent, icon, filter, group = [PluginGroup.default], disable = false, exitConfirm = false, single = false } = option; + const { key, name, getComponent, icon, filter, group = [PluginGroup.default], disable = false, exitConfirm = false, single = false, priority = 0 } = option; let _component: any; const views = useVirtualPages(); this.register(key, { @@ -65,6 +68,7 @@ export default class PluginCenter { icon: shallowRef(icon), group, disable, + priority, func: async (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => { if (filter(VDirectories, VFiles) === false) { return; @@ -110,10 +114,12 @@ export default class PluginCenter { usableList.push(key); } } - return usableList.map(key => ({ + const res = usableList.map(key => ({ key, ...this.pluginsMap[key] - })); + })) + res.sort((a, b) => b.priority - a.priority); + return res } usePlugin(key: string, VDirectories?: VirtualDirectory[], VFiles?: VirtualFile[], ...args: any[]) { diff --git a/src/components/miaoLazyDiv.vue b/src/components/miaoLazyDiv.vue index 64bcab7..2e8e376 100644 --- a/src/components/miaoLazyDiv.vue +++ b/src/components/miaoLazyDiv.vue @@ -1,7 +1,7 @@ @@ -22,6 +22,10 @@ const props = defineProps({ minWidth: { type: String, default: 'none', + }, + margin: { + type: String, + default: 'none', } }) diff --git a/src/plugins/miaoDirectory/components/miaoDirectoryItem.vue b/src/plugins/miaoDirectory/components/miaoDirectoryItem.vue index 8de1a5f..f1cb45b 100644 --- a/src/plugins/miaoDirectory/components/miaoDirectoryItem.vue +++ b/src/plugins/miaoDirectory/components/miaoDirectoryItem.vue @@ -197,7 +197,7 @@ onBeforeUnmount(() => { display: flex; align-items: center; transition: background-color 0.3s ease; - + overflow-x: hidden; .item-main-front { height: 100%; min-width: 10px; diff --git a/src/plugins/miaoDirectory/components/miaoDirectoryItemsContainer.vue b/src/plugins/miaoDirectory/components/miaoDirectoryItemsContainer.vue index 13aa020..4b27bf8 100644 --- a/src/plugins/miaoDirectory/components/miaoDirectoryItemsContainer.vue +++ b/src/plugins/miaoDirectory/components/miaoDirectoryItemsContainer.vue @@ -8,7 +8,8 @@ + min-height="50px" + margin="10px"> { handleItemSelect(item) } else { if (item.type === 'file') { - openUrl(`${baseUrl}${api.get}${item.path}`) + const useablePlugins = pluginCenter.getUsablePlugin([], [item]) + if(useablePlugins.length > 0){ + pluginCenter.usePlugin(useablePlugins[0].key, [], [item]) + } else { + openUrl(`${baseUrl}${api.get}${item.path}`) + } } else if (item.type === 'directory') { setCurrentDirectory(item) } diff --git a/src/plugins/miaoMusicPlayer/export.ts b/src/plugins/miaoMusicPlayer/export.ts index 0728628..8eef2bb 100644 --- a/src/plugins/miaoMusicPlayer/export.ts +++ b/src/plugins/miaoMusicPlayer/export.ts @@ -26,7 +26,8 @@ const pluginConfig: registerComponentOption = { return vFiles[0].name.endsWith('?') }, disable: false, - single: true + single: true, + priority: 5, } export default pluginConfig