diff --git a/magic-api-plugins/magic-api-plugin-component/pom.xml b/magic-api-plugins/magic-api-plugin-component/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..01f24582110e4ab5976712d56d92565111381596 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/pom.xml @@ -0,0 +1,82 @@ + + + 4.0.0 + + org.ssssssss + magic-api-plugins + 2.0.1 + + + magic-api-plugin-component + jar + magic-api-plugin-component + magic-api-plugin-component + + + + + + org.codehaus.mojo + exec-maven-plugin + 1.6.0 + + + exec-npm-install + generate-resources + + exec + + + npm + + install + + ${basedir}/src/console + + + + exec-npm-run-build + generate-resources + + exec + + + npm + + run + build + + ${basedir}/src/console + + + + + + + + maven-resources-plugin + 3.2.0 + + + copy-resource + generate-resources + + copy-resources + + + ${basedir}/target/classes/magic-editor/plugins + + + ${basedir}/src/console/dist + + + + + + + + + + diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/package.json b/magic-api-plugins/magic-api-plugin-component/src/console/package.json new file mode 100644 index 0000000000000000000000000000000000000000..cb4ae0169b8a59489f7cf7f94976cd6faf582782 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/package.json @@ -0,0 +1,18 @@ +{ + "name": "magic-component", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "build": "vite build" + }, + "author": "", + "license": "ISC", + "devDependencies": { + "vue": "^3.2.31", + "@vitejs/plugin-vue": "^2.2.4", + "vite-plugin-svg-icons": "^1.1.0", + "vite": "^2.8.6" + } +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/src/components/magic-component-info.vue b/magic-api-plugins/magic-api-plugin-component/src/console/src/components/magic-component-info.vue new file mode 100644 index 0000000000000000000000000000000000000000..f3234cf06bfb32b30801bb907cafb3aa8d920d2d --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/src/components/magic-component-info.vue @@ -0,0 +1,41 @@ + + + diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/src/i18n/en.js b/magic-api-plugins/magic-api-plugin-component/src/console/src/i18n/en.js new file mode 100644 index 0000000000000000000000000000000000000000..245baba17f690c0c71f7350d7ccee6ec68e6c034 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/src/i18n/en.js @@ -0,0 +1,16 @@ +export default { + component: { + title: 'Component Info', + name: 'Component', + form: { + name: 'Component Name', + path: 'Component Path', + description: 'Component Description', + placeholder: { + name: 'Please Enter Component Name', + path: 'Please Enter Component Path', + description: 'Please Enter Component Description' + } + } + }, +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/src/i18n/zh-cn.js b/magic-api-plugins/magic-api-plugin-component/src/console/src/i18n/zh-cn.js new file mode 100644 index 0000000000000000000000000000000000000000..07b6f9fa256552220f9b003681971ecf841776ff --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/src/i18n/zh-cn.js @@ -0,0 +1,16 @@ +export default { + component: { + title: '组件信息', + name: '组件', + form: { + name: '组件名称', + path: '组件路径', + description: '组件描述', + placeholder: { + name: '请输入组件名称', + path: '请输入组件路径', + description: '请输入组件描述' + } + } + } +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/src/icons/component.svg b/magic-api-plugins/magic-api-plugin-component/src/console/src/icons/component.svg new file mode 100644 index 0000000000000000000000000000000000000000..3753bdeb2921ab64303d4687edffb414b07fee2f --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/src/icons/component.svg @@ -0,0 +1,2 @@ + \ No newline at end of file diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/src/index.js b/magic-api-plugins/magic-api-plugin-component/src/console/src/index.js new file mode 100644 index 0000000000000000000000000000000000000000..dff880b662739fcc57d45567103db9cdf7e3db12 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/src/index.js @@ -0,0 +1,35 @@ +import MagicComponent from './service/magic-component.js' +import localZhCN from './i18n/zh-cn.js' +import localEn from './i18n/en.js' +import MagicComponentInfo from './components/magic-component-info.vue' +import 'vite-plugin-svg-icons/register' +export default (opt) => { + const i18n = opt.i18n + // 添加i18n 国际化信息 + i18n.add('zh-cn', localZhCN) + i18n.add('en', localEn) + return { + // 左侧资源 + resource: [{ + // 资源类型,和后端存储结构一致 + type: 'component', + // 展示图标 + icon: '#magic-component-component', // #开头表示图标在插件中 + // 展示名称 + title: 'component.name', + // 运行服务 + service: MagicComponent(opt.bus, opt.constants, i18n.format, opt.Message, opt.request), + }], + // 底部工具条 + toolbars: [{ + // 当打开的资源类型为 task 时显示 + type: 'component', + // 工具条展示的标题 + title: 'component.title', + // 展示图标 + icon: 'parameter', + // 对应的组件 + component: MagicComponentInfo, + }] + } +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/src/service/magic-component.js b/magic-api-plugins/magic-api-plugin-component/src/console/src/service/magic-component.js new file mode 100644 index 0000000000000000000000000000000000000000..0290a9c86535033bce3c6ea05d40eed9dadb994d --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/src/service/magic-component.js @@ -0,0 +1,26 @@ +export default function (bus, constants, $i, Message, request) { + return { + // svg text + getIcon: item => ['Vue', '#41B883'], + // 任务名称 + name: $i('component.name'), + // 脚本语言 + language: 'html', + // 默认脚本 + defaultScript: ` + +`, + // 是否允许执行测试 + runnable: false, + // 是否需要填写路径 + requirePath: true, + // 合并 + merge: item => item + } +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/console/vite.config.js b/magic-api-plugins/magic-api-plugin-component/src/console/vite.config.js new file mode 100644 index 0000000000000000000000000000000000000000..a4da66b11e45e7aeba1986a955d30c5b7a406de6 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/console/vite.config.js @@ -0,0 +1,37 @@ +import vue from '@vitejs/plugin-vue' +import viteSvgIcons from 'vite-plugin-svg-icons' +import path from 'path' +import pkg from './package.json' + +export default { + base: './', + build: { + minify: false, + cssCodeSplit: true, // 将组件的 style 打包到 js 文件中 + outDir: 'dist', + lib: { + target: 'esnext', + formats: ['iife'], + entry: path.resolve(__dirname, 'src/index.js'), + name: 'MagicComponent', + fileName: (format) => `magic-component.${pkg.version}.${format}.js` + }, + rollupOptions: { + // 确保外部化处理那些你不想打包进库的依赖 + external: ['vue'], + output: { + // 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量 + globals: { + vue: 'Vue' + } + } + } + }, + plugins: [ + vue(), + viteSvgIcons({ + iconDirs: [path.resolve(process.cwd(), 'src/icons')], + symbolId: 'magic-component-[name]' + }), + ] +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/model/ComponentInfo.java b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/model/ComponentInfo.java new file mode 100644 index 0000000000000000000000000000000000000000..c9399c54e4e3da91f287ed320750e670ab3d659a --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/model/ComponentInfo.java @@ -0,0 +1,55 @@ +package org.ssssssss.magicapi.component.model; + +import org.ssssssss.magicapi.core.model.MagicEntity; +import org.ssssssss.magicapi.core.model.PathMagicEntity; + +import java.util.Objects; + +public class ComponentInfo extends PathMagicEntity { + + /** + * 组件描述 + */ + private String description; + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public ComponentInfo copy() { + ComponentInfo info = new ComponentInfo(); + super.copyTo(info); + info.setDescription(this.description); + return info; + } + + @Override + public MagicEntity simple() { + ComponentInfo info = new ComponentInfo(); + super.simple(info); + return info; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; + ComponentInfo componentInfo = (ComponentInfo) o; + return Objects.equals(id, componentInfo.id) && + Objects.equals(path, componentInfo.path) && + Objects.equals(script, componentInfo.script) && + Objects.equals(name, componentInfo.name) && + Objects.equals(description, componentInfo.description); + } + + @Override + public int hashCode() { + return Objects.hash(id, path, script, name, groupId, description); + } + +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java new file mode 100644 index 0000000000000000000000000000000000000000..cd00802852b79f0412cbce4106c77454e225093f --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentInfoMagicResourceStorage.java @@ -0,0 +1,36 @@ +package org.ssssssss.magicapi.component.service; + +import org.ssssssss.magicapi.component.model.ComponentInfo; +import org.ssssssss.magicapi.core.exception.InvalidArgumentException; +import org.ssssssss.magicapi.core.model.JsonCode; +import org.ssssssss.magicapi.core.service.AbstractPathMagicResourceStorage; + +import java.util.UUID; + +public class ComponentInfoMagicResourceStorage extends AbstractPathMagicResourceStorage { + + @Override + public String folder() { + return "component"; + } + + @Override + public Class magicClass() { + return ComponentInfo.class; + } + + @Override + public void validate(ComponentInfo entity) { + } + + @Override + public String buildMappingKey(ComponentInfo info) { + return buildMappingKey(info, magicResourceService.getGroupPath(info.getGroupId())); + } + + @Override + public boolean requirePath() { + return false; + } + +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentMagicDynamicRegistry.java b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentMagicDynamicRegistry.java new file mode 100644 index 0000000000000000000000000000000000000000..3300653ba24fdb6615040556d4736057a3a97348 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/service/ComponentMagicDynamicRegistry.java @@ -0,0 +1,28 @@ +package org.ssssssss.magicapi.component.service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.event.EventListener; +import org.ssssssss.magicapi.component.model.ComponentInfo; +import org.ssssssss.magicapi.core.event.FileEvent; +import org.ssssssss.magicapi.core.event.GroupEvent; +import org.ssssssss.magicapi.core.service.AbstractMagicDynamicRegistry; +import org.ssssssss.magicapi.core.service.MagicResourceStorage; + +public class ComponentMagicDynamicRegistry extends AbstractMagicDynamicRegistry { + + public ComponentMagicDynamicRegistry(MagicResourceStorage magicResourceStorage) { + super(magicResourceStorage); + } + + @EventListener(condition = "#event.type == 'component'") + public void onFileEvent(FileEvent event) { + processEvent(event); + } + + @EventListener(condition = "#event.type == 'component'") + public void onGroupEvent(GroupEvent event) { + processEvent(event); + } + +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/starter/MagicAPIComponentConfiguration.java b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/starter/MagicAPIComponentConfiguration.java new file mode 100644 index 0000000000000000000000000000000000000000..c113f206bcc611a93a15dbf5b6a14fa328f06a17 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/main/java/org/ssssssss/magicapi/component/starter/MagicAPIComponentConfiguration.java @@ -0,0 +1,31 @@ +package org.ssssssss.magicapi.component.starter; + +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.ssssssss.magicapi.component.service.ComponentInfoMagicResourceStorage; +import org.ssssssss.magicapi.component.service.ComponentMagicDynamicRegistry; +import org.ssssssss.magicapi.core.config.MagicPluginConfiguration; +import org.ssssssss.magicapi.core.model.Plugin; + +@Configuration +public class MagicAPIComponentConfiguration implements MagicPluginConfiguration { + + @Bean + @ConditionalOnMissingBean + public ComponentInfoMagicResourceStorage componentInfoMagicResourceStorage() { + return new ComponentInfoMagicResourceStorage(); + } + + @Bean + @ConditionalOnMissingBean + public ComponentMagicDynamicRegistry componentMagicDynamicRegistry(ComponentInfoMagicResourceStorage componentInfoMagicResourceStorage) { + return new ComponentMagicDynamicRegistry(componentInfoMagicResourceStorage); + } + + @Override + public Plugin plugin() { + return new Plugin("组件", "MagicComponent", "magic-component.1.0.0.iife.js"); + } + +} diff --git a/magic-api-plugins/magic-api-plugin-component/src/main/resources/META-INF/spring.factories b/magic-api-plugins/magic-api-plugin-component/src/main/resources/META-INF/spring.factories new file mode 100644 index 0000000000000000000000000000000000000000..def6a6859cf258b2ea04a2981ab4bd01ee781fa8 --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-component/src/main/resources/META-INF/spring.factories @@ -0,0 +1 @@ +org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.ssssssss.magicapi.component.starter.MagicAPIComponentConfiguration diff --git a/magic-api-plugins/pom.xml b/magic-api-plugins/pom.xml index bfcc65008f5e991cb602436d6b4bb4abbf4ac9e7..74c73163ed0870f97dc99ed3c405ebfaae90153e 100644 --- a/magic-api-plugins/pom.xml +++ b/magic-api-plugins/pom.xml @@ -15,6 +15,7 @@ auto generate http api magic-api-plugin-task + magic-api-plugin-component magic-api-plugin-swagger magic-api-plugin-redis magic-api-plugin-mongo