Skip to content

2.3.0

Latest

Choose a tag to compare

@erupts erupts released this 25 Sep 13:32
· 16 commits to master since this release
f9f1fe1

🦞 Open-sourced erupt-sso: OAuth2 authorization code + PKCE with 17 provider presets (Keycloak, Okta, Auth0, Entra ID, GitHub, Feishu, DingTalk, WeCom, WeChat and more): pick the type, paste the credentials, done. Providers are rows configured in the admin, no restart; the code is exchanged server side and the token never travels in a URL

🦞 Open-sourced erupt-comment: a comment stream on any record with one-level replies, pinned / resolved threads and per-row counts; an @mention sends an erupt-notice that deep-links to the record; @Power(comment = false) opts a model out

🦞 Open-sourced erupt-ai-decision: yes/no, choice and score questions answered by a System One decision model as typed answers with a probability distribution, so code branches on a threshold instead of parsing a sentence; supports TypeSafe Jev and the self-hostable open-source Laya

🦞 Open-sourced the erupt-data-dingtalk (DingTalk Notable) and erupt-data-airtable data sources, sharing one REST-table base with Feishu and Notion

🌟 New ICON edit component: picks from the full Font Awesome catalogue and renders the icon in tables

🌟 New KEY_VALUE edit component: edits a JSON object stored as a String or as a Map on a JSON column

🌟 New TRANSFER edit component: handles many-to-many relations as a searchable two-list transfer, and @MultiChoiceType(type = TRANSFER) gives value lists the same widget

🌟 Tables support multi-level headers: adjacent columns sharing @View(group) merge under one parent header while column settings keep working per column

🌟 Form panel: record forms open centered, docked to the side or fullscreen and keep unsaved input when switching; the title bar offers previous / next, a view-edit toggle, copy link, delete, AI assistant and print; ?id= deep-links open a record

🌟 Login page layouts: four new layouts (cover / wide / wallpaper / poster) and a configurable login picture (theme.loginLayout / theme.loginBackground), switchable from the login page itself

🌟 Workspace and Classic skins: Workspace is a Slack / Feishu style shell with 32 light and dark frame presets; Classic is the Ant Design Pro navy sidebar; the Brutalist skin was redrawn against raft.build

🌟 Install as a desktop app (PWA): the manifest is generated from the site config, the header doubles as a draggable title bar, and pwa.icon / pwa.shortcuts / faviconPath are configurable

🌟 Two-factor authentication (MFA): TOTP codes, self-enrolled from the avatar menu; after the password a 6-digit code is required before a session is issued; recovery codes are single-use and stored hashed, and an admin can reset MFA in one click

🌟 Login lock: ten failed passwords for one account from one IP lock the pair for ten minutes (erupt.upms.login-lock), a wrong captcha counts too; changing a password signs out the account's other sessions

🌟 erupt-notice gains provider-backed channels: Feishu, DingTalk, WeCom and Slack push notifications through the erupt-sso provider row's own credentials; any user who has signed in through that provider can be reached, no separate bot setup. EruptSsoBindService lets other modules read a user's identifier and profile snapshot at the provider

🌟 erupt-generator rewritten: read the schema of any registered datasource and turn tables into entities: comments become titles, foreign keys become references, documented enum values become @Choice; preview in the code editor drawer, download several classes as a zip

🌟 S3AttachmentProxy: erupt-data-s3 ships a ready-made attachment proxy; set erupt.s3.* and every upload lands in S3 / MinIO / OSS / COS / R2; the attachment domain now comes from the backend, no app.js edit needed

🌟 erupt-remote SFTP file transfer: a file panel next to the SSH terminal browses remote directories, uploads by drag-and-drop, downloads, creates folders and deletes files; switchable per host and sharing the terminal's credentials and authorization

🧩 New ViewType.AVATAR round avatar view type, used by the user table

🧩 @Tree(maxLevel) caps a tree's depth: the UI stops offering "add child" at the limit and the server refuses any save that would place a node deeper

🧩 @Layout(tableTruncate = false) wraps overflowing cells instead of truncating, so a crowded operation column keeps every action reachable

🧩 @BoolType(type) picks a switch or radios, default AUTO: a required field renders as a switch, others as radios; a null table cell no longer shows an empty tag

🧩 theme.customizable = false locks the branding side of the appearance (theme color, header color, skin, menu mode) for everyone; light/dark and compact stay per-user

🧩 app.js logo keys: leave out for the default, null / '' for none; a collapsed sidebar without a logo shows the site's initial instead of the Erupt mark; new faviconPath

🧩 "Publish to menu" in reports, the designer, Atlas and AI Canvas lets you pick the menu icon

🧩 Profile and lock screen: users change their own avatar and display name (LoginProxy.beforeUpdateProfile can veto); a lock screen in the avatar menu unlocks with the password without issuing a new session

🧩 IP whitelist accepts IPv4 / IPv6 CIDR ranges, thanks to chenxiaolong8023 for the contribution

🧩 erupt-atlas "Used by": modules report what a model is used for through EruptUsageProvider (flow forms and custom nodes, menus, cube dashboards, print templates, row-operation forms); table views now fill the screen

🐞 Fixed every scheduled job failing with a missing ShedLock LockProvider when redis-session is on and the host application component-scans xyz.erupt; a job without a lock is now skipped and logged instead of running unlocked on every node

🐞 Fixed week pickers throwing a RangeError

🐞 Fixed print entries showing despite @Power(print = false)

🐞 Fixed @View(column) on a COMBINE field not reaching the table (Gitee IKGOKN)

🐞 Fixed item.xxx in @View(template) reading the stored value instead of the cell's display text

——

🦞 开源 erupt-sso 单点登录模块:OAuth2 授权码 + PKCE,内置 Keycloak、Okta、Auth0、Entra ID、GitHub、飞书、钉钉、企业微信、微信等 17 种供应商预设,选好类型贴上凭据即可;认证源在后台配置、不用重启,授权码在服务端交换,token 不经 URL 传递

🦞 开源 erupt-comment 记录评论模块:任意记录可评论,支持一级回复、置顶 / 已解决、表格行评论计数,@提及经 erupt-notice 通知并深链到该记录;@Power(comment = false) 可按模型关闭

🦞 开源 erupt-ai-decision AI 决策模块:把「是否 / 选项 / 评分」三类判断交给 System One 决策模型,返回带概率分布的类型化答案,代码按阈值分支而不是解析一句话;支持 TypeSafe Jev 与可本地部署的开源 Laya

🦞 开源 erupt-data-dingtalk 钉钉多维表与 erupt-data-airtable 数据源,与飞书、Notion 共用同一套 REST 表格基座

🌟 新增 ICON 图标选择 编辑组件:在完整的 Font Awesome 图标库中检索选取,表格直接渲染图标

🌟 新增 KEY_VALUE 键值对 编辑组件:编辑 JSON 对象,可存 String 或 JSON 列上的 Map

🌟 新增 TRANSFER 穿梭框 编辑组件:以可搜索的双列表处理多对多关联,@MultiChoiceType(type = TRANSFER) 让多选值列表也能用穿梭框

🌟 表格支持多级表头:@View(group) 相同的相邻列合并到同一个上级表头,列设置仍按单列操作

🌟 表单面板:记录表单支持居中 / 侧栏 / 全屏三种模式,切换不丢未保存内容;标题栏可上一条 / 下一条翻页、查看与编辑互切、复制链接、删除、AI 助手、打印,?id= 深链直接打开记录

🌟 登录页布局:新增 cover / wide / wallpaper / poster 四种布局与自定义登录图片(theme.loginLayout / theme.loginBackground),登录页上就能切换

🌟 Workspace 与 Classic 皮肤:Workspace 是 Slack / 飞书式一体化导航框架,内置 32 组明暗色预设;Classic 是 Ant Design Pro 经典深色侧栏;Brutalist 皮肤按 raft.build 重绘

🌟 安装为桌面应用(PWA):manifest 按站点配置实时生成,顶栏充当可拖拽的窗口标题栏,pwa.icon / pwa.shortcuts / faviconPath 可定制

🌟 双因素认证(MFA):TOTP 动态口令,用户在头像菜单自助绑定,密码正确后还要再输 6 位验证码才发放会话;恢复码单次有效并哈希存储,管理员可一键重置 MFA

🌟 登录锁定:同一账号 + IP 连续密码错误 10 次锁定 10 分钟(erupt.upms.login-lock),错误验证码同样计数;修改密码后该账号其他会话立即下线

🌟 erupt-notice 新增认证源推送渠道:飞书、钉钉、企业微信、Slack 四个渠道直接借用 erupt-sso 的认证源凭据向用户推送通知,用户通过该认证源登录过即可送达,无需再单独配置机器人;EruptSsoBindService 可供其他模块读取用户在认证源侧的标识与资料快照

🌟 erupt-generator 重写:从任意已注册数据源读取表结构直接生成实体类,注释成标题、外键成引用、注释里的枚举说明成 @Choice,代码编辑器抽屉预览,多选打包 zip 下载

🌟 S3AttachmentProxy:erupt-data-s3 内置附件代理,erupt.s3.* 配好即可把全部附件上传到 S3 / MinIO / OSS / COS / R2;附件域名改由后端下发,不用再改 app.js

🌟 erupt-remote SFTP 文件传输:SSH 终端旁新增文件面板,浏览远程目录、拖拽上传、下载、建目录、删文件,可按主机开关,与终端共用凭据与授权

🧩 新增 ViewType.AVATAR 圆形头像展示类型,用户表的头像列已采用

🧩 @Tree(maxLevel) 限制树的最大层级:前端不再提供越级的「添加子节点」,服务端拒绝任何会让节点更深的保存

🧩 @Layout(tableTruncate = false) 让超长单元格换行而非省略,操作列按钮多时不再被截断

🧩 @BoolType(type) 可指定开关或单选,默认 AUTO:必填字段渲染为开关,其余为单选;表格中的空值不再显示空标签

🧩 theme.customizable = false 可锁定外观(主题色、顶栏色、皮肤、菜单模式)让全员界面一致,明暗与紧凑仍由用户自选

🧩 app.js Logo 语义明确:不写取默认、null / '' 不显示;折叠侧栏无 Logo 时显示站点首字母而非 Erupt 标识;新增 faviconPath

🧩 报表、设计器、图谱、AI 画布的「发布到菜单」可直接选择菜单图标

🧩 个人资料与锁屏:用户可自助修改头像与姓名(LoginProxy.beforeUpdateProfile 可否决),头像菜单新增锁屏,凭密码解锁且不产生新会话

🧩 IP 白名单支持 IPv4 / IPv6 CIDR 网段,感谢 chenxiaolong8023 贡献的代码

🧩 erupt-atlas 使用方追溯:模块通过 EruptUsageProvider 上报模型被谁使用(流程表单与自定义节点、菜单、Cube 仪表盘、打印模板、行操作表单),图谱视图改为自适应全屏宽度

🐞 修复开启 redis-session 且宿主应用用 @ComponentScan 扫描 xyz.erupt 时,定时任务因找不到 ShedLock LockProvider 而全部失败的问题;缺少锁时任务改为跳过并记入任务日志,不会在多节点上无锁执行

🐞 修复周选择器抛 RangeError 的问题

🐞 修复 @Power(print = false) 仍显示打印入口的问题

🐞 修复 @View(column) 在 COMBINE 字段上不显示的问题(Gitee IKGOKN)

🐞 修复 @View(template) 中 item.xxx 读到的是存储值而非单元格显示文案的问题

What's Changed

Full Changelog: 2.2.0...2.3.0