重大更新!開源無程式碼 / 低程式碼平臺 NocoBase v1.0 正式釋出!

NocoBase發表於2024-04-29

NocoBase 是一個極易擴充套件的開源無程式碼開發平臺。完全掌控,無限擴充套件,助力你的開發團隊快速響應變化,顯著降低成本,不必投入幾年時間和數百萬資金研發,只需要花幾分鐘部署 NocoBase。

NocoBase 中文官網

官方文件

線上 Demo

v1.0 里程碑

歷時 3 年,NocoBase 迎來第一次根版本號升級,版本號從 0.x 升級到 1.0。這是一個新的里程碑。

  • 在 0.x 階段:核心 API 和功能快速變化,每一個新的版本都可能存在不相容的變更;
  • 在 1.x 階段:核心 API 基本穩定,NocoBase 將在保持穩定的基礎上不斷增加新的外掛,最佳化安全性和效能。

新特性

  • 主題編輯器可以配置頁面和彈窗內邊距、區塊間距、區塊圓角
  • 新增區塊時,資料表支援過濾
  • 關係資料支援排序
  • 改進資料視覺化的互動
  • 支援移動端新增圖表區塊
  • 圖表篩選區塊支援設定欄位資料範圍
  • 新增更多變數,檢視詳情
  • 彈窗中支援新增任意資料表的區塊
  • 工作流:“操作後事件”支援關係區塊內按鈕觸發
  • 彈窗內資料變動時,關閉彈窗自動重新整理上一層容器內的資料
  • 大幅提升表格區塊的效能
  • 大幅提升測試覆蓋率

新外掛

  • Field: Markdown(Vditor)

    • 用於儲存 Markdown,並使用 Vditor 編輯器渲染,支援常見 Markdown 語法,如列表,程式碼,引用等,並支援上傳圖片,錄音等。同時可以做到即時渲染,所見即所得。
  • Comments

    • 提供評論資料表模板和區塊,為任意資料表的資料新增評論功能。

完整更新記錄

檢視完整記錄
  • feat(plugin-workflow): refresh the list after sync #4177
  • feat(plugin-workflow): show workflow key as tooltip on title #4178
  • test(plugin-workflow): add test cases #4199
  • chore: api cache control header #4203
  • feat: load vditor dep from local #4190
  • test: input number separator test #4204
  • fix: number field shuold support separator setting #4197
  • fix(plugin-workflow): refine experience #4195
  • chore: optimize warning wordings of import & export #4196
  • refactor: external data source collection manager #4193
  • fix: env bug #4191
  • fix: empty operator with association field #4189
  • chore: add e2e #4184
  • fix: vditor version #4183
  • refactor: form data template locale improve #4188
  • test: add automated testing #4098
  • chore: data source logger instance #4181
  • chore: get database instance in relation repository #4179
  • chore: add e2e for variables #4152
  • chore: define collection debug message #4176
  • chore: unsupportedFields in view collection #4155
  • feat: add plugin-field-markdown-vditor #4065
  • fix: bulk edit form acl action error #4166
  • fix: auto create uuid foreign key in relation field #4160
  • fix(plugin-fm): fix confusing size limit hint #4153
  • fix(users): improve users:updateProfile #4162
  • fix(client): get api url #4161
  • feat: remove plugin-ui-routes-storage #4140
  • fix: lock cytoscape version #4158
  • refactor: collection template support presetFieldsDisabled #4159
  • fix: grid schema #4157
  • client unit test #4150
  • fix: update belongs to many association that target key is not primary key #4146
  • refactor: form data template locale improve #4148
  • fix(database): column name in array field #4110
  • test: refresh on action e2e test #4147
  • fix(custom-request): support configuring content type #4144
  • chore: deprecate the current record variable from the form #4063
  • feat(Theme): add some tokens #4137
  • fix(client): fix some warnings #4143
  • style: tableActionColumn style improve #4138
  • fix: actionBar style improve #4123
  • chore: warning message if on delete conflict #4141
  • fix(plugin-workflow-manual): allow pass node when no assignee #4139
  • chore: datasource manager api #4124
  • fix(plugin-workflow-manual): fix assignees parsing bug #4125
  • fix: load association field in collection #4122
  • perf: remove all Skeleton animation #4113
  • test: add e2e #4121
  • chore(data-vi): adjust api #4116
  • fix: scheduleEventTrigger #4114
  • feat(plugin-workflow): add checker for intervally dispatching #4119
  • feat: add filterOtherRecordsCollection for DataBlockInitializer #4117
  • refactor: optimize CollectionField #4111
  • fix: improve sort field migration #4112
  • fix: field component #4102
  • fix: association select support add mode #4108
  • fix: createdBy & updatedBy target option #4109
  • fix(linkage-rule): linkage rule support empty condiction #4103
  • fix: add SanitizedCollectionProvider #4100
  • fix: tree collection target error #4105
  • fix: add ClearCollectionFieldContext #4101
  • feat: improve form block #4099
  • chore: migrate sortable options to sort field #4011
  • feat: support sort option in appends #4056
  • feat(data-vi): allows pie chart to accept negative numbers, fix T-4075 #4094
  • fix(data-vi): number becomes string after precision transformation #4092
  • fix: encode url params #4055
  • test(plugin-workflow): add test case for duplicated triggering schedule workflow #3817
  • perf(LinkageRules): solve lagging problems #4090
  • fix(subTable): should not display Allow add new data option #4086
  • fix: missing fields #4083
  • fix: table select pagination error #4078
  • fix: reset page when setting block data scope #4081
  • fix: custom request role list #4074
  • fix: parse iso week #4068
  • fix(sourceId): avoid error #4077
  • fix(sql-collection): can't select interface when setting fields #4079
  • fix: load with source field #4075
  • fix: deletion of operation linkage rules does not take effect in real time #4058
  • fix(core): fix round bug in formula evaluator #4070
  • test: add e2e for data loading mode #4069
  • fix(filterForm): avoid duplicate names #4071
  • chore: optimize block title #4040
  • fix: sync default value in view #4067
  • fix(defaultValue): fix the issue of default values disappearing after refreshing the page #4066
  • refactor: gantt block #4059
  • fix: sub-table big field should support variable default value #4062
  • chore(Theme): set the default font size of the Compact theme to 16 #4064
  • test: add e2e for actions #4053
  • fix(variable): missing variables and invalid translations #4054
  • test: add backend unit tests #4000
  • fix: improve card item #4036
  • chore(acl): disable register association fields actions #4014
  • fix(variable): fix parent record variable reporting errors in data scope #4039
  • test(e2e): add assertions on field values #4034
  • feat(Variable): add a new variable #4025
  • feat: run e2e with pro plugins #3890
  • fix: bug #4038
  • fix: array operator with camel case field #4032
  • fix: scopeKeyOptions should be obtained in real-time #4029
  • fix(addText): should use FormItemSchemaToolbar instead of BlockSchema… #3963
  • feat: register once hook in datasource manager #4024
  • fix: snippets #4030
  • fix: vitest single bug #4031
  • feat(data-vi): improved user experiences (refer to pr) #4013
  • test: add frontend unit test #3991
  • feat: support Others option in popup #4015
  • fix(collection-manager): no refresh after override the field #4022
  • chore: add export & import warnings #4027
  • refactor: third party data source support sort field grouped sorting edit #4023
  • fix(plugin-acl): pm.acl.roles snippet #4026
  • test: association name block e2e test #4021
  • fix: get api url #4020
  • fix(Sub-details): the initializer button is not displayed when the field value is empty #4019
  • fix: initializer use useAassociationName #4018
  • fix(auth): cas login bug when use subdirectory deployment #4017
  • fix(TreeTable): add child error #4008
  • fix: remove active field should not clear value #4012
  • fix(plugin-acl): datasource roles snippet #4016
  • fix: after selecting all, bulk update prompts for unselected data #4010
  • refactor: tree table is not enabled by default #4001
  • feat(plugin-workflow-action-trigger): support association actions to trigger #4007
  • Update application.ts #4006
  • fix: tag filed setting #4009
  • fix(users): remove phone validation due to incorrect check of foreign phone numebrs #4005
  • fix: association block action permission verification failed #3994
  • refactor: fields for table sorting cannot select sorting fields with scopekey #3984
  • fix(Form): invalid parentRecord #3998
  • fix(plugin-workflow): adjust locale #3993
  • fix: sub -table support allowSelectExistingRecord setting #4004
  • fix(auth): sign up page not found when entering with url directly #4002
  • chore(database): set null value when field is unique and value is empty string #3997
  • chore(gateway): report error with cause message #3999
  • chore(error-handler): display message cause the error #3996
  • fix: restore with table name in camel case #3995
  • refactor(plugin-workflow): adjust comments #3990
  • fix: gantt collapse & expand #3982
  • fix(BulkForm): should be required when switching to 'Changed to' #3965
  • fix: move action #3985
  • refactor: sort field should not has defaultValue #3986
  • chore: update class names of plugins #3981
  • feat(plugin-workflow-sync): add sync when multi-app-share-collection enabled #3969
  • fix(localization): incorrect locale when first entering #3968
  • chore: adjust and add api comments #3951
  • refactor: select options configuration #3964
  • fix(GridCard): set the count of columns displayed in a row #3960
  • refactor: only numerical formula fields support format #3962
  • chore(plugin-workflow): add comments #3959
  • chore: remove legacy formula plugins #3939
  • fix(LinkageRules): should be effective immediately #3958
  • fix(Picker): should display Allow add new data option #3957
  • fix(connect-data-blocks): should immediately show in the drop-down menu #3953
  • fix: left menu title modify #3956
  • fix: template list provider bug #3950
  • refactor: nanoid &uuid autoFill #3955
  • feat: getParentJsonSchema in ui schema repository #3690
  • fix: save uuid & nano id field value with sequelize validation #3952
  • fix: throughCollection support fuzzy search #3949
  • fix: getSourceKeyByAssocation #3947
  • fix(RichText): unify style #3946
  • fix(connectDataBlocks): should add FilterBlockProvider to Grid #3944
  • chore: add appVersion to Schema #3936
  • fix: collectionFieldInterfaceSelect #3945
  • fix: fix sourceId of templates #3941
  • fix(collection manager): collection manager primarykey & nanoid & uuid suport index setting #3943
  • fix(plugin-formula-field): fix component context #3937
  • fix: nanoid availableTypes #3942
  • fix: automatically generate default values #3940
  • fix: formula field caluation error #3938
  • fix: formula field support format #3928
  • refactor: unify tab initailizer naming #3932
  • fix: add zIndex to Lightbox overlay style #3934
  • fix(Table): fix the problem that the content of the association field is not displayed #3930
  • fix(evaluators): fix array flatten #3931
  • refactor: main data source view collection support filterTargetKey #3818
  • fix: formula field calculation error #3929
  • fix: load view collection belongs to association with source options #3912
  • fix: edit form unchanged should not appear unSaveed warning when cloas modal #3920
  • fix(Collapse): fix error for chinaRegions #3925
  • fix: number display format #3924
  • fix(defaultValue): should immediate effect when set default value #3923
  • feat: action support refreshDataBlockRequest configuration #3882
  • refactor: formBlockProvider & detailBlockProvider #3898
  • feat(data-vi): allows to add charts for mobile client #3922
  • chore: add API comments #3919
  • fix: fix Pagination #3921
  • test(plugin-error-handler): middleware #3909
  • fix: update plugin #3895
  • fix: gantt block pagination #3918
  • fix: source id null #3917
  • fix(Table): fix Pagination #3916
  • fix: get the correct sourceId #3897
  • fix(DataScope): fix no immediate effect issue after saving #3910
  • fix: select field options initialValue #3911
  • fix: external link click #3908
  • fix(inputNumber): loss of accuracy in inputNumber #3902
  • feat(plugin-workflow-action-trigger): add global action events #3883
  • docs: add api comment #3868
  • fix: vitest config bug #3907
  • fix: table fixed bug #3901
  • fix: list data undefined error #3905
  • fix: lazy render bug #3886
  • fix: sort params missing #3906
  • refactor: change useProps to x-use-component-props #3853
  • fix(withDynamicSchemaProps): change deep merge to shallow merge #3899
  • fix: history block add print button, click print button to report error #3900
  • fix: tar bug #3891
  • chore: return bigInt as string type #3887
  • feat(data-vi): data scope for chart filter fields #3894
  • feat: adjust menu of add new #3884
  • fix(plugin-custom-request): fix edit button dialog #3893
  • fix: fieldNames missing when setting data scope #3892
  • fix: deps check error when dev add production plugin #3848
  • fix: workflow tabs not exists #3889
  • fix: association field support data scope linkage #3888
  • fix: templateBlockProvider support association field append #3866
  • chore: main datasource api #3880
  • feat: run vitest with coverage #3802
  • fix: avoid duplicate menu keys #3885
  • fix(data-vi): dual axes chart displays abnormally #3881
  • fix: reject update when filter is empty object #3777
  • chore: update field with primary key attribute #3852
  • refactor: uuid & nanoid support default value configuration #3830
  • feat: table performance #3791
  • fix: setFormValueChanged undefined #3879
  • fix(client): fix diabled in filter dynamic component #3874
  • fix(plugin-workflow-parallel): fix locale #3876
  • fix(formula-field): formula field set form value change #3873
  • fix: formBlockProvider block display #3877
  • refactor(plugin-workflow): change to #3871
  • fix: kanban card modal display abnormal #3863
  • fix: filterTargetKey only support view collection #3872

外掛變更

以下外掛不再提供開源版本(已經在生產環境使用的使用者請聯絡我們獲得升級)

  • @nocobase/plugin-auth-cas:透過 CAS 協議認證身份;
  • @nocobase/plugin-auth-odic:透過 OIDC (OpenID Connect) 協議認證身份;
  • @nocobase/plugin-auth-saml:透過 SAML 2.0 認證身份。

以下外掛已廢棄,將在近期版本里移除

  • @nocobase/plugin-audit-logs:已廢棄,暫時不刪除,新版不會安裝
  • @nocobase/plugin-snapshot-field:已廢棄,暫時不刪除,新版不會安裝
  • @nocobase/plugin-charts:使用 @nocobase/plugin-data-visualization 代替
  • @nocobase/plugin-excel-formula-field:使用 @nocobase/plugin-field-formula 代替
  • @nocobase/plugin-math-formula-field:使用 @nocobase/plugin-field-formula 代替
  • @nocobase/plugin-ui-routes-storage:已廢棄,前端路由直接在前端擴充套件即可

完整外掛列表請檢視:https://cn.nocobase.com/plugins-cn.html

程式碼註釋

為了提供更好的開發體驗,我們為一些特殊的 API 新增了註釋:

  • @internal 通常用於標識程式碼中的內部實現細節或內部方法,這些方法或功能不是為了公共使用而設計的,而是為了在程式碼內部使用而存在。
  • @experimental 用於標識實驗性功能或 API。該 API 尚處於開發和測試階段,可能會發生較大變化,甚至可能在以後的版本中被移除或替換。
  • @deprecated 用於標識程式碼中已經過時或不推薦使用的功能、方法或 API。這意味著雖然它們仍然可用,但是可能在將來的版本中被移除,或者已經有更好的替代方案可供使用。

許可協議

NocoBase 採取 AGPL-3.0 和 商業許可雙重授權,詳情請參考 NocoBase 許可協議

升級指南

  • ⚠️升級前一定要先備份資料庫!一定要先備份資料庫!一定要先備份資料庫!
  • 可以將整個專案程式碼也進行備份。

因為 Auth: CAS,Auth: OIDC,Auth: SAML 三個 SSO 外掛從開原始碼中移除,因此升級將分為兩種情況。

如果你未使用 SSO 外掛

請按照常規方法正常升級。請檢視文件

如果你使用了 SSO 外掛

請按照以下步驟升級:

1. 升級應用

參考文件升級概述,將 NocoBase 升級到最新版。

如果你之前啟用了 CAS、OIDC、SAML 外掛,升級時會有以下提示:

命令列升級時終端提示:

Docker 版介面提示:

2. 刪除外掛 or 獲取外掛 1.0 版本?

如果你選擇刪除外掛後繼續升級:

根據提示刪除外掛

# 主應用
yarn pm remove cas oidc saml --force
# 如果是子應用,需要新增 --app 引數
yarn pm remove cas oidc saml --force --app=sub-app1

繼續升級

yarn nocobase upgrade

如果你選擇外掛更新到 1.0 版本

聯絡 NocoBase 團隊獲取外掛 1.0 版本,並繼續進行升級

3. CAS、OIDC、SAML 外掛升級流程

此時,應用介面已經無法訪問了,所以我們需要用手動的方式升級

  1. 使用賬號登入 service.nocobase.com 下載最新版外掛
  2. 將外掛解壓到指定目錄
    • CAS 外掛解壓至 ./storage/plugins/@nocobase/plugin-auth-cas
    • OIDC 外掛解壓至 ./storage/plugins/@nocobase/plugin-auth-oidc
    • SAML 外掛解壓至 ./storage/plugins/@nocobase/plugin-auth-saml
  3. 升級應用
    • docker 版本直接重啟容器即可
    • 原始碼或 create-nocobase-app 版本
      1. 下載依賴 yarn install
      2. 執行升級命令 yarn nocobase upgrade
      3. 重啟應用

相關文章