插件规范
当标准化的模型驱动界面无法满足特定业务需求时,iBizHUB插件体系能够无缝接入定制化的UI组件和业务逻辑,这种设计既保持了框架的规范性,又兼顾了业务的灵活性。为进一步拓展标准引擎的能力边界,系统引入插件化机制,支持三大核心扩展场景:
自定义控件注入:可根据个性化需求丰富界面展示形式
业务逻辑块重写:方便开发者针对特定业务场景灵活调整处理逻辑
原生组件替换:能够实现性能优化与功能增强
iBizHUB插件包含很多非常有意思的特性,比如:
统一注册中心:所有插件均遵循标准化适配器完成注册,确保插件管理的规范性与有序性
跨应用复用:打破应用间的壁垒,实现插件在不同项目中的高效调用,提升开发效率
热插拔机制则赋予系统强大的动态管理能力,支持插件在运行时按需加载或卸载,极大增强了系统的灵活性与扩展性
插件类型
| 插件类型 | 注册器 | 名称 |
|---|---|---|
| AC_ITEM | registerAcItemProvider | 自填列表项绘制插件 |
| EDITOR_CUSTOMSTYLE | registerEditorProvider | 编辑器自定义绘制插件 |
| GRID_COLRENDER | registerGridColumnProvider | registerTreeGridExColumnProvider | 数据表格列绘制插件 |
| TOOLBAR_ITEM | registerToolbarItemProvider | 工具栏项绘制插件 |
| UILOGICNODE | registerUILogicNodeProvider | 界面逻辑节点插件 |
| VIEW_CUSTOM | registerViewProvider | 实体视图绘制插件 |
| DEMETHOD | registerDEMethodProvider | 应用实体行为插件 |
| APPCOUNTER | registerAppCounterProvider | 应用计数器插件 |
| DEUIACTION | registerUIActionProvider | 应用实体界面行为插件 |
| FORM_USERCONTROL | registerFormDetailProvider | 表单自定义控件绘制插件 |
| CHART_RENDER | registerControlProvider | 图表绘制插件 |
| CUSTOM | registerControlProvider | 自定义部件绘制插件 |
| DATAVIEW_RENDER | registerControlProvider | 数据视图绘制插件 |
| EDITFORM_RENDER | registerControlProvider | 编辑表单绘制插件 |
| GRID_RENDER | registerControlProvider | 数据表格绘制插件 |
| LIST_RENDER | registerControlProvider | 列表绘制插件 |
| PORTLET_CUSTOM | registerControlProvider | 自定义门户部件绘制插件 |
| SEARCHFORM_RENDER | registerControlProvider | 搜索表单绘制插件 |
| TOOLBAR_RENDER | registerControlProvider | 工具栏绘制插件 |
| TREE_RENDER | registerControlProvider | 树视图绘制插件 |
| SEARCHBAR_RENDER | registerControlProvider | 搜索栏绘制插件 |
| WIZARDPANEL_RENDER | registerControlProvider | 向导面板绘制插件 |
多层依赖
在插件开发过程中,插件A有时会依赖于另一个插件B运行,在这种情况下,必须在加载插件A之前加载插件B,iBiz模板采用SystemJS实现插件级联加载。
在插件包package.json中添加systemjs-importmap属性,可配置选项如下:
| 属性名 | 说明 |
|---|---|
baseUrl | 指向插件基础路径,不写指向环境里写的插件默认所在目录 |
packages | 指向依赖插件的package.json文件 |
imports | 指向依赖插件打包后的文件 |
styles | 指向依赖插件打包后的样式文件 |
示例
现有两个插件@ibiz-template-plugin/antv-x6-design依赖于@ibiz-template-plugin/design-base
在@ibiz-template-plugin/antv-x6-design插件的package.json中添加systemjs-importmap属性:
json
{
"name": "@ibiz-template-plugin/antv-x6-design",
"systemjs-importmap": {
"baseUrl": "http://172.16.240.221(非必填)",
"packages": {
"@ibiz-template-plugin/design-base": "@ibiz-template-plugin/design-base@0.0.1-dev.3/package.json"
},
"imports": {
"@ibiz-template-plugin/design-base": "@ibiz-template-plugin/design-base@0.0.1-dev.3/dist/index.system.min.js"
},
"styles": {
"@ibiz-template-plugin/design-base": "@ibiz-template-plugin/design-base@0.0.1-dev.3/dist/index.min.css"
}
},
}静态资源
插件中可能会使用到静态资源,在部署时想要插件的静态资源正常加载,必须在插件的根目录src下创建一个global.ts文件,内容如下:
js
// 文件路径: [插件项目的根目录]/src/global.ts
import { PluginStaticResource } from '@ibiz-template/runtime';
const resource = new PluginStaticResource(import.meta.url);
export { resource };在组件中通过resource.dir方法引用静态资源文件:
js
// 例:[插件项目的根目录]/public/assets/img/xxx.svg
resource.dir('assets/img/xxx.svg');