feat: 添加主页插件支持
This commit is contained in:
1 parent
1f42785b4a
commit
90a068939d
11 files changed
+184
-82
No files matched your search
+17
-10
@@ -2,7 +2,7 @@ import useVirtualPages from "@/hooks/useVirtualPages";
|
||||
import VirtualDirectory, { VirtualFile } from "./VirtualDirectory";
|
||||
import { ShallowRef, shallowRef } from "vue";
|
||||
import { alertTipType, usePluginHooksType } from "@/types/type";
|
||||
import VirtualPage from "./VirtualPage";
|
||||
import VirtualPage, { VirtualPages } from "./VirtualPage";
|
||||
|
||||
export enum PluginGroup {
|
||||
default = "default",
|
||||
@@ -36,7 +36,7 @@ export type Plugin = {
|
||||
priority: number;
|
||||
// 判断在未禁用时是否可以使用这个组件
|
||||
// 使用组件即调用下面的func
|
||||
filter: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[]) => boolean;
|
||||
filter: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[], VPages: VirtualPages) => boolean;
|
||||
func: (VDirectories: VirtualDirectory[], VFiles: VirtualFile[], hooks: usePluginHooksType, ...args: any[]) => void;
|
||||
};
|
||||
|
||||
@@ -56,7 +56,7 @@ export default class PluginCenter {
|
||||
}
|
||||
|
||||
/**
|
||||
* 便捷地注册一个组件为插件,触发时直接用新页面打开
|
||||
* 便捷地注册一个组件为插件,触发时直接用新页面打开,页面名为key
|
||||
*/
|
||||
registerComponent(option: registerComponentOption): void {
|
||||
const { key, name, getComponent, icon, filter, group = [PluginGroup.default], disable = false, exitConfirm = false, single = false, priority = 0 } = option;
|
||||
@@ -83,12 +83,13 @@ export default class PluginCenter {
|
||||
timeout: 2000
|
||||
});
|
||||
}
|
||||
if (single && views.find(_component) !== undefined) {
|
||||
const view = views.find(_component) as VirtualPage;
|
||||
const _findRes = views.find(_component) as VirtualPage[];
|
||||
if (single && _findRes.length !== 0) {
|
||||
const view = _findRes[0];
|
||||
view.currentFiles = [...view.currentFiles, ...VFiles];
|
||||
view.currentDirectories = [...view.currentDirectories, ...VDirectories];
|
||||
} else {
|
||||
views.push(_component, VDirectories, VFiles, {
|
||||
views.push(_component, key, VDirectories, VFiles, {
|
||||
VirtualPageOption: {
|
||||
exitConfirm,
|
||||
allowCopy: single === false
|
||||
@@ -108,26 +109,32 @@ export default class PluginCenter {
|
||||
) {
|
||||
const { group = [PluginGroup.default] } = option ?? {};
|
||||
const usableList = [];
|
||||
const views = useVirtualPages();
|
||||
for (let key of Object.keys(this.pluginsMap)) {
|
||||
const _plugin = this.pluginsMap[key];
|
||||
if (!_plugin.disable && _plugin.group.filter(v => group.includes(v)).length > 0 && _plugin.filter(VDirectories, VFiles)) {
|
||||
if (!_plugin.disable && _plugin.group.filter(v => group.includes(v)).length > 0 && _plugin.filter(VDirectories, VFiles, views)) {
|
||||
usableList.push(key);
|
||||
}
|
||||
}
|
||||
const res = usableList.map(key => ({
|
||||
key,
|
||||
...this.pluginsMap[key]
|
||||
}))
|
||||
}));
|
||||
res.sort((a, b) => b.priority - a.priority);
|
||||
return res
|
||||
return res;
|
||||
}
|
||||
|
||||
usePlugin(key: string, VDirectories?: VirtualDirectory[], VFiles?: VirtualFile[], ...args: any[]): void;
|
||||
// usePlugin(key: string, VPages: VirtualPages, ...args: any[]) : void
|
||||
|
||||
usePlugin(key: string, VDirectories?: VirtualDirectory[], VFiles?: VirtualFile[], ...args: any[]) {
|
||||
this.pluginsMap[key].func(
|
||||
VDirectories ?? [],
|
||||
VFiles ?? [],
|
||||
{
|
||||
globalAlertTip: this.globalAlertTip
|
||||
globalAlertTip: this.globalAlertTip,
|
||||
getViews: useVirtualPages,
|
||||
getPluginCenter: () => this
|
||||
},
|
||||
...args
|
||||
);
|
||||
|
||||
Reference in new issue
Block a user