开源无代码 / 低代码平台 NocoBase 发布 V0.15,全新的插件设置中心


NocoBase 是什么

NocoBase 是一个极易扩展的开源无代码开发平台。 不必投入几年时间、数百万资金研发,花几分钟时间部署 NocoBase,马上拥有一个私有、可控、极易扩展的无代码开发平台。

与众不同之处

1. 模型驱动,“数据结构”与“使用界面”分离

多数以表单、表格或者流程驱动的无代码产品都是在使用界面上直接创建数据结构,比如 Airtable 在表格里新增一列就是新增一个字段。这样的好处是使用简单,不足是功能和灵活性受限,难以满足较复杂场景的需求。

NocoBase 采用数据结构与使用界面分离的设计思路,可以为数据表创建任意数量、任意形态的区块(数据视图),每个区块里可以定义不同的样式、文案、操作。这样既兼顾了无代码的简单操作,又具备了原生开发的灵活性。

model

2. 所见即所得

NocoBase 可以开发复杂和有特色的业务系统,但这并不意味着需要复杂和专业的操作。只需一次点击,就可以在使用界面上显示出配置选项,具备系统配置权限的管理员可以用所见即所得的操作方式,直接配置用户的使用界面。

wysiwyg

3. 功能即插件

NocoBase 采用插件化架构,所有新功能都可以通过开发和安装插件来实现,扩展功能就像在手机上安装 APP 一样简单。

plugins

新特性

Plugin settings manager

不兼容的变化

插件配置页面注册方式

以前使用 SettingsCenterProvider 注册插件配置页面,现在需要通过插件化注册。

  • 案例 1:原页面仅有一个 Tab 的情况

当页面仅有一个 Tab 时,新版本的 Tab 会删掉,仅保留页面的标题和图标。

const HelloProvider = React.memo(props => {
return (
<SettingsCenterProvider
settings={{
hello: {
title: "Hello",
icon: "ApiOutlined",
tabs: {
tab1: {
title: "Hello tab",
component: HelloPluginSettingPage,
},
},
},
}}
>
{props.children}
SettingsCenterProvider>
);
});

现在需要改为:

class HelloPlugin extends Plugin {
async load() {
this.app.pluginSettingsManager.add("hello", {
title: "Hello", // 原 title
icon: "ApiOutlined", // 原 icon
Component: HelloPluginSettingPage, // 原 tab component
aclSnippet: "pm.hello.tab1", // 权限片段,保证权限的 code 和之前的一致,如果是新插件,不需要传这个参数
});
}
}

也就是删除了 tab1 Hello Tab

其中参数 aclSnippet pm.hello.tab1 对应原来的 settings 对象的 key:

<SettingsCenterProvider
settings={{
hello: {
// 这里的 hello 对应 `pm.hello.tab1` 中的 `hello`
tabs: {
tab1: {
// 这里的 tab1 对应 `pm.hello.tab1` 中的 tab1
},
},
},
}}
>SettingsCenterProvider>
  • 案例 2:原页面有多个 Tab 的情况
const HelloProvider = React.memo(props => {
return (
<SettingsCenterProvider
settings={{
hello: {
title: "Hello",
icon: "ApiOutlined",
tabs: {
tab1: {
title: "Hello tab1",
component: HelloPluginSettingPage1,
},
tab2: {
title: "Hello tab2",
component: HelloPluginSettingPage2,
},
},
},
}}
>
{props.children}
SettingsCenterProvider>
);
});

现在需要改为:

import { Outlet } from "react-router-dom";

class HelloPlugin extends Plugin {
async load() {
this.app.pluginSettingsManager.add("hello", {
title: "Hello", // 原 title
icon: "ApiOutlined", // 原 icon
Component: Outlet,
});

this.app.pluginSettingsManager.add("hello.tab1", {
title: "Hello tab1", // 原 tab1 title
Component: HelloPluginSettingPage1, // 原 tab1 component
});

this.app.pluginSettingsManager.add("hello.tab2", {
title: "Hello tab2", // 原 tab2 title
Component: HelloPluginSettingPage1, // 原 tab2 component
});
}
}

获取 pluginSettingsManager 对应的路由信息

const baseName = app.pluginSettingsManager.getRouteName("hello");
// admin.settings.hello
const basePath = app.pluginSettingsManager.getRoutePath("hello");
// /admin/settings/hello

如果插件配置页面内部有链接跳转的话,需要进行相应的更改,例如:

navigate("/admin/settings/hello/1");
navigate("/admin/settings/hello/2");

// 可以更改为
const basePath = app.pluginSettingsManager.getRoutePath("hello");
navigate(`${basePath}/1`);
navigate(`${basePath}/2`);

更多信息,请参考 插件配置页面。

更新记录

完整的更新记录,请参考 更新记录。

v0.15.0-alpha.2 - 2023-11-13

Merged

  • fix: antd table ref bug #3029
  • fix: improve plugin settings code #3028
  • fix: plugin settings manager Component optional & delete isBookmark #3027
  • fix(plugin-workflow): fix workflow title in binding workflow configuration not showing #3026

Commits

  • chore(versions): 😊 publish v0.15.0-alpha.2 b597aec
  • chore: update changelog 9dae34a

v0.15.0-alpha.1 - 2023-11-13

Merged

  • refactor: plugin settings manager #2712
  • fix: fix regular of variable #3024
  • fix: should load association data in subform #3020
  • fix: association field in reference block failed to append #2998
  • fix: relational data should be loaded correctly on first render #3016
  • feat: plugin-mock-collections #2988
  • Update pull_request_template.md #3013
  • fix: should lazy load association data in subform #3012
  • fix(import): remove commas from numbers #3011
  • fix(static-server): directoryListing: false #3010
  • fix(theme): text color of page header right side #3008
  • fix: menu failed to design while menu title is empty string #2999
  • fix(plugin-workflow): add missed component #3007
  • fix: detail block has no data #3003
  • refactor(plugin-workflow): allow to use function for values when creating node #3002
  • fix(plugin-workflow): fix configuration drawer close logic #3001
  • chore: add aria label for workflow table #2995
  • fix: select item can not be selected in connecting data blocks #2993
  • chore: optimize error message #2992
  • refactor(plugin-workflow): change to function #2991
  • fix(plugin-workflow): fix loop scope variable #2989
  • chore: optimize error message #2985
  • fix(formula-field): formula field failed to real-time evaluating and support sub-form #2983
  • fix: association select should not clearing after config data scope #2984
  • fix(plugin-workflow): fix node form values when closed #2978
  • fix: button of details is not refresh when updating record #2977
  • fix: docs ci #2976
  • fix: avoid infinite loop #2974
  • feat: drop table with cascade option #2973
  • fix: client docs #2965
  • fix(variable): compat $date #2971
  • fix: add child action should omit children data #2969
  • chore: destory collection in share collection plugin #2968
  • fix: application bug #2958
  • perf: avoid page lag or stuttering #2964
  • fix: percent field component should support decimal point #2966
  • refactor: remove useless code #2961
  • test: client ui test #2736
  • fix: import action should not visible when view collection not editable #2957
  • refactor(plugin-workflow): add exports for client #2960
  • fix(plugin-workflow): fix canvas style #2959
  • fix(plugin-workflow): fix variables and form changed #2955
  • test(custom-request): update test case, avoid failed #2954
  • fix: create collection report error #2953
  • fix: target collection pointed to by tableoid is incorrect #2952
  • feat(plugin-workflow): add zoomer for workflow canvas #2951
  • feat(map-plugin): supports connecting each point into a line #2216
  • fix(calendar): render data of next month is incorrect #2942
  • fix(custom-request): parsed not working when the value of the variable is of type o2m. #2926
  • fix: improve local storage options #2943

Commits

  • chore(versions): 😊 publish v0.15.0-alpha.1 29457cb
  • chore: update changelog 3b2ad2f
  • fix: env APPEND_PRESET_LOCAL_PLUGINS 5c93750

相關推薦

2024-09-20

NocoBase 是一个极易扩展的开源无代码开发平台。完全掌控,无限扩展,助力你的开发团队快速响应变化,显著降低成本,不必投入几年时间和数百万资金研发,只需要花几分钟部署 NocoBase。 NocoBase 中文官网 官方文档 在线 Demo

2022-08-16

NocoBase 是一个极易扩展的开源无代码开发平台。  本周我们发布了 v0.7.4-alpha.7,带来以下新功能: 字段默认值 字段验证规则 开发实例 界面配置模式快捷键 看板支持描述 标签页图标 新的多语言切换  

2024-08-27

内外网信息泄漏问题 增加 重构代码生成器 集成anyline开源框架 支持400+种数据库适配 依赖升级 update springboot 3.2.6 => 3.2.9 update snailjob 1.0.1 => 1.1.2 update mapstruct-plus 1.4.3 => 1.4.4 update hutool 5.8.27 => 5.8.31 解决

2023-11-28

i-Cloud 全方位升级(不兼容原框架) 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 系统演示: https://plus-doc.dr

2024-07-10

i-Cloud 全方位升级(不兼容原框架) 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 系统演示: https://plus-doc.dr

2023-11-16

i-Cloud 全方位升级(不兼容原框架) 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 系统演示: https://plus-doc.dr

2024-08-27

内外网信息泄漏问题 增加 重构代码生成器 集成anyline开源框架 支持400+种数据库适配 依赖升级 update springboot 3.2.6 => 3.2.9 update snailjob 1.0.1 => 1.1.2 update mapstruct-plus 1.4.3 => 1.4.4 update hutool 5.8.27 => 5.8.31 解决

2023-09-20

截图 仓库软件新增 【外设驱动】 新增惠普打印机开源驱动 【开源软件】 NCDU、babeld、axel、btop、mtr、 libogg、bird、s-tui、TeX Live、openvpn、Fastfetch(替代neofetch)、autodep8、perf3、arping、sbuild、、xorgxrdp、e2fsprogs、cmatrix

2023-03-09

、可靠的物联网服务,助力万物互联互通。 smartboot开源组织,一个容易被误认为是在“重复造轮子”的低调组织。曾获得 2020 年度 OSC 中国开源项目「优秀 Gitee 组织 」荣誉。 该组织内的明星项目包括: smart-socket

2024-10-29

场景全方位升级(不兼容原框架) 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 系统演示: https://plus-doc.dro

2024-09-24

台采用基于模型驱动的设计模式,并在前后端留有大量的代码植入入口,方便开发者对平台进行改造扩充。JECloud 适合软件开发公司、企业信息中心、个人开发者使用,适用于开发 ERP、OA、CRM、EAM、WMS、MES、PM 等企业级信息化系

2023-09-26

场景全方位升级(不兼容原框架) 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 本框架与RuoYi的功能差异

2023-11-28

场景全方位升级(不兼容原框架) 项目代码、文档 均开源免费可商用 遵循开源协议在项目中保留开源协议文件即可 活到老写到老 为兴趣而开源 为学习而开源 为让大家真正可以学到技术而开源 本框架与RuoYi的功能差异

2024-07-23

低内存占用量,提升系统效率 GraalVM Native 打包: 将 Java 代码编译成原生可执行文件,启动速度大幅提升,运行效率更高,占用更少的内存资源,带来流畅的写作体验 支持主流平台: ZrLog 3.1 提供了 Windows、Linux 和 macOS (x86_64 和