feat: 重新组织代码结构
This commit is contained in:
commit
4d2bd3867f
23 files changed
+240
-187
No files matched your search
+3
-165
@@ -1,167 +1,5 @@
|
||||
import MiaoDirectory from "@/views/miaoDirectory.vue";
|
||||
import usePluginCenter from "./usePluginCenter";
|
||||
import { DocumentText, FileTray, Image, LogoChrome, CodeOutline, PlayCircle } from "@vicons/ionicons5";
|
||||
import { PluginGroup } from "@/class/PluginCenter";
|
||||
import initPlugin from "./init/initPlugin";
|
||||
|
||||
export default function init() {
|
||||
const pluginCenter = usePluginCenter();
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoDirectory",
|
||||
name: "文件夹",
|
||||
icon: FileTray,
|
||||
getComponent: async () => MiaoDirectory,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vFiles.length) {
|
||||
return false;
|
||||
}
|
||||
return vDirs.length === 1;
|
||||
}
|
||||
});
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoVideoPlayer",
|
||||
name: "视频",
|
||||
icon: PlayCircle,
|
||||
getComponent: async () => (await import("@/views/miaoVideoPlayer.vue")).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length === 0) {
|
||||
return false;
|
||||
}
|
||||
for (let i of vFiles) {
|
||||
for (let s of ["mp4", "m3u8", "hls"]) {
|
||||
if (i.name.endsWith(s)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoIframe",
|
||||
name: "框架",
|
||||
icon: LogoChrome,
|
||||
getComponent: async () => (await import("@/views/miaoIframe.vue")).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
return vFiles[0].name.endsWith("html");
|
||||
}
|
||||
});
|
||||
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoPDF",
|
||||
name: "PDF浏览",
|
||||
icon: DocumentText,
|
||||
getComponent: async () => (await import("@/views/miaoPDF.vue")).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
return vFiles[0].name.endsWith("pdf");
|
||||
}
|
||||
});
|
||||
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoCodeMirror",
|
||||
name: "代码编辑",
|
||||
icon: CodeOutline,
|
||||
getComponent: async () => (await import("@/views/miaoCodeMirror.vue")).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
for (let end of ["js", "ts", "jsx", "tsx", "py", "html", "css", "scss", "go", "json", "md", "yaml", "txt", "xml", "vue"]) {
|
||||
if (vFiles[0].name.endsWith(end)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoImages",
|
||||
name: "图片浏览",
|
||||
icon: Image,
|
||||
getComponent: async () => (await import("@/views/miaoImages.vue")).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length === 0 && vFiles.length === 0) {
|
||||
return false;
|
||||
}
|
||||
if (vDirs.length) {
|
||||
return true;
|
||||
}
|
||||
for (let vf of vFiles)
|
||||
for (let end of ["xbm", "tif", "pjp", "svgz", "jpg", "jpeg", "ico", "tiff", "gif", "svg", "jfif", "webp", "png", ".bmp", "pjpeg", "avif"]) {
|
||||
if (vf.name.endsWith(end)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
pluginCenter.registerComponent({
|
||||
key: "miaoMarkdown",
|
||||
name: "markdown浏览",
|
||||
icon: DocumentText,
|
||||
getComponent: async () => (await import("@/views/miaoMarkdown.vue")).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
return vFiles[0].name.endsWith("md");
|
||||
}
|
||||
});
|
||||
|
||||
pluginCenter.register("test", {
|
||||
name: "测试导入",
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
return vFiles[0].name.endsWith("js");
|
||||
},
|
||||
disable: true,
|
||||
group: [PluginGroup.default],
|
||||
func: async (__, vfs) => {
|
||||
const c = (await import(/* @vite-ignore */ vfs[0].url)).default;
|
||||
console.log(c);
|
||||
pluginCenter.registerComponent({
|
||||
key: `test-${Math.random()}`,
|
||||
name: `test-${Math.random()}`,
|
||||
icon: DocumentText,
|
||||
getComponent: async () => (await import(/* @vite-ignore */ vfs[0].url)).default,
|
||||
filter: (vDirs, vFiles) => {
|
||||
if (vDirs.length !== 0) {
|
||||
return false;
|
||||
}
|
||||
if (vFiles.length !== 1) {
|
||||
return false;
|
||||
}
|
||||
return vFiles[0].name.endsWith("html");
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
export default async function init() {
|
||||
await initPlugin()
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
|
||||
import usePluginCenter from '@/hooks/usePluginCenter'
|
||||
import { registerComponentOption } from '@/class/PluginCenter'
|
||||
|
||||
const initPlugin = async () => {
|
||||
const modulesFiles = import.meta.glob('@/plugins/**/export.ts')
|
||||
const pluginCenter = usePluginCenter()
|
||||
for (let pluginConfig of Object.values(modulesFiles)) {
|
||||
const _config = pluginConfig as () => Promise<{
|
||||
default: registerComponentOption
|
||||
}>
|
||||
pluginCenter.registerComponent((await _config()).default)
|
||||
}
|
||||
}
|
||||
|
||||
export default initPlugin
|
||||
Reference in new issue
Block a user