feat: 添加插件优先级

This commit is contained in:
539943419 committed 2024-09-27 16:34:06 +08:00
1 parent e155524e3e
commit 37791ab04e
6 files changed
+24 -7

No files matched your search

+9 -3
View File
@@ -20,6 +20,7 @@ export interface registerComponentOption {
exitConfirm?: boolean; exitConfirm?: boolean;
// 若为true,则只会创建一个页面,当存在已创建页面则会直接将VFile和VDir加到curr里面 // 若为true,则只会创建一个页面,当存在已创建页面则会直接将VFile和VDir加到curr里面
single?: boolean; single?: boolean;
priority?: number;
} }
export type Plugin = { export type Plugin = {
@@ -31,6 +32,8 @@ export type Plugin = {
disable: boolean; disable: boolean;
// 插件所属的group,用于区分插件使用的场合 // 插件所属的group,用于区分插件使用的场合
group: PluginGroup[]; group: PluginGroup[];
// 插件优先级
priority: number;
// 判断在未禁用时是否可以使用这个组件 // 判断在未禁用时是否可以使用这个组件
// 使用组件即调用下面的func // 使用组件即调用下面的func
filter: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => boolean; filter: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => boolean;
@@ -56,7 +59,7 @@ export default class PluginCenter {
* 便捷地注册一个组件为插件,触发时直接用新页面打开 * 便捷地注册一个组件为插件,触发时直接用新页面打开
*/ */
registerComponent(option: registerComponentOption): void { 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; let _component: any;
const views = useVirtualPages(); const views = useVirtualPages();
this.register(key, { this.register(key, {
@@ -65,6 +68,7 @@ export default class PluginCenter {
icon: shallowRef(icon), icon: shallowRef(icon),
group, group,
disable, disable,
priority,
func: async (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => { func: async (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => {
if (filter(VDirectories, VFiles) === false) { if (filter(VDirectories, VFiles) === false) {
return; return;
@@ -110,10 +114,12 @@ export default class PluginCenter {
usableList.push(key); usableList.push(key);
} }
} }
return usableList.map(key => ({ const res = usableList.map(key => ({
key, key,
...this.pluginsMap[key] ...this.pluginsMap[key]
})); }))
res.sort((a, b) => b.priority - a.priority);
return res
} }
usePlugin(key: string, VDirectories?: VirtualDirectory[], VFiles?: VirtualFile[], ...args: any[]) { usePlugin(key: string, VDirectories?: VirtualDirectory[], VFiles?: VirtualFile[], ...args: any[]) {
+5 -1
View File
@@ -1,7 +1,7 @@
<!-- 只适合用于渲染过程较为复杂的组件,不然可能得不偿失 <!-- 只适合用于渲染过程较为复杂的组件,不然可能得不偿失
这么泛用的组件,性能差点也能理解 --> 这么泛用的组件,性能差点也能理解 -->
<template> <template>
<div class="miao-lazy" ref="miaoLazyRoot" :style="!show ? { minHeight, minWidth } : {}"> <div class="miao-lazy" ref="miaoLazyRoot" :style="!show ? { minHeight, minWidth, margin } : {}">
<slot v-if="show" /> <slot v-if="show" />
</div> </div>
</template> </template>
@@ -22,6 +22,10 @@ const props = defineProps({
minWidth: { minWidth: {
type: String, type: String,
default: 'none', default: 'none',
},
margin: {
type: String,
default: 'none',
} }
}) })
@@ -197,7 +197,7 @@ onBeforeUnmount(() => {
display: flex; display: flex;
align-items: center; align-items: center;
transition: background-color 0.3s ease; transition: background-color 0.3s ease;
overflow-x: hidden;
.item-main-front { .item-main-front {
height: 100%; height: 100%;
min-width: 10px; min-width: 10px;
@@ -8,7 +8,8 @@
<miao-lazy-div <miao-lazy-div
v-for="dir in showData_directory" v-for="dir in showData_directory"
:key="dir.id" :key="dir.id"
min-height="50px"> min-height="50px"
margin="10px">
<miaoDirectoryItem <miaoDirectoryItem
:item="dir" :item="dir"
:color="props.color" :color="props.color"
@@ -376,7 +376,12 @@ const handleItemClick = (item: VirtualDirectory | VirtualFile) => {
handleItemSelect(item) handleItemSelect(item)
} else { } else {
if (item.type === 'file') { if (item.type === 'file') {
const useablePlugins = pluginCenter.getUsablePlugin([], [item])
if(useablePlugins.length > 0){
pluginCenter.usePlugin(useablePlugins[0].key, [], [item])
} else {
openUrl(`${baseUrl}${api.get}${item.path}`) openUrl(`${baseUrl}${api.get}${item.path}`)
}
} else if (item.type === 'directory') { } else if (item.type === 'directory') {
setCurrentDirectory(item) setCurrentDirectory(item)
} }
+2 -1
View File
@@ -26,7 +26,8 @@ const pluginConfig: registerComponentOption = {
return vFiles[0].name.endsWith('?') return vFiles[0].name.endsWith('?')
}, },
disable: false, disable: false,
single: true single: true,
priority: 5,
} }
export default pluginConfig export default pluginConfig