NocoBase 自研插件集

分享 3 个自研 NocoBase 插件:增强表格、文件预览、邮件验证码登录

大家好,我是 OneTwoSmall。最近基于 NocoBase v2 开发了 3 个插件,在这里分享给大家,也欢迎交流讨论。

仓库地址:GitHub - OneTwoSmall/nocobase-custom-plugins: 自定义开发Nocobase插件 · GitHub


插件一览

插件 包名 版本 功能简介
增强表格块 @nocobase/plugin-enhanced-table-block 2.1.0-beta.9 表格底部合计行 + 拖拽框选单元格统计
文件预览器 Pro @onetwosmall/plugin-file-previewer-pro 2.1.8 支持 Microsoft Online / kkFileView / BaseMetas 三种方式预览 Office 等文件
邮箱验证码登录 @onetwosmall/plugin-auth-email 2.2.0-beta.2 基于 SMTP 发送邮箱 OTP,支持登录和注册

1. 增强表格块

功能介绍

给原有的表格块增加了两个实用功能:

底部合计行

在表格底部自动汇总数值列,支持 5 种聚合方式:

  • 求和(Sum)
  • 平均值(Avg)
  • 计数(Count)
  • 最小值(Min)
  • 最大值(Max)

每列的汇总类型可以在表格设置中单独配置,仅对数值字段生效。

拖拽框选统计

鼠标在表格上拖拽选中多个单元格,会弹出一个浮动面板,实时显示选中区域的:

  • 总和
  • 最大值
  • 最小值
  • 平均值
  • 计数

类似 Excel 的选中统计效果。会自动过滤掉货币符号和百分号再计算,选中的单元格数量也会显示。

技术亮点

  • 纯前端实现:合计行通过拉取全量数据(paginate: false)在前端计算,不需要修改后端查询 API
  • DOM 级别兼容:通过 MutationObserver + requestAnimationFrame 监听表格变化,自动同步合计行的列宽、排序、固定列等样式
  • 跨版本支持:同时兼容 NocoBase V1 和 V2 运行时
  • 防重渲染优化:利用 data-content-hash 属性避免浏览器 CSS 规范化导致的无意义重渲染

安装

yarn add @nocobase/plugin-enhanced-table-block

2. 文件预览器 Pro

功能介绍

在附件字段和文件管理器中集成 Office 文档在线预览,支持三种预览引擎:

引擎 配置 适用场景
Microsoft Online 无需部署,开箱即用 公网可访问的 Office 文件
kkFileView 需部署 kkFileView 服务 内网环境、更多文件格式
BaseMetas 需部署 BaseMetas 服务 自定义预览方案

支持的文件格式:

  • Office 文档:doc/docx/xls/xlsx/ppt/pptx/odt
  • PDF 文件
  • 文本文件:txt/md/xml/json 等
  • 压缩包预览
  • 图片预览
  • CAD 图纸预览(kkFileView 模式)

附加特性:

  • 文件超过 30MB 会给出提示,避免浏览器卡顿
  • 内网环境使用 Microsoft Online 会有友好提醒
  • HTTP/HTTPS 混合内容检测,防止 iframe 加载失败
  • 支持自定义扩展名优先级匹配

配置入口

启用插件后,在"设置 > 插件 > File Previewer Pro"中配置预览类型和相关地址。

安装

yarn add @onetwosmall/plugin-file-previewer-pro

3. 邮箱验证码登录(Auth Email V2)

功能介绍

通过 SMTP 发送一次性验证码(OTP),实现邮箱登录和自动注册。

主要功能:

  • SMTP 发送 6 位数字验证码
  • 支持自动注册(autoSignup),首次登录自动创建账号
  • 可配置验证码有效期、重发间隔(默认 60s)
  • 验证失败次数限制(默认 5 次),防止暴力破解
  • 分布式限流:基于 Redis 的 Counter,集群环境安全
  • 邮件模板自定义:支持 [code] 和 [expires] 占位符

配置流程

  1. 在"用户 > 认证器"中新建一个 Email 类型的认证器
  2. 选择验证器和是否启用自动注册
  3. 在"验证器"中配置邮件发送参数(SMTP 服务器、账号密码等)

安全性设计

  • 验证码由 crypto.randomInt() 生成,非伪随机
  • 同一接收方验证失败 5 次后触发限流,返回 429
  • 验证码使用后立即标记为已用,防止重放
  • 禁用插件前会检查是否存在依赖该类型的验证器,防止误操作导致登录中断
  • 绑定的邮箱在界面展示时自动脱敏(ab***@domain.com

安装

yarn add @onetwosmall/plugin-auth-email

依赖:需要同时启用 @nocobase/plugin-verification 插件


一些开发心得

1. 插件 = Server + Client-V1 + Client-V2

NocoBase v2 正在逐步迁移到新的 client-v2 运行时,开发插件时如果希望兼容两个版本,需要同时提供 src/client/ 和 src/client-v2/ 两套前端代码。我的做法是共享核心逻辑(如文件预览的 utils.ts),只在入口层做适配。

2. 注册模式让插件可扩展

邮件认证插件使用了 Provider 注册机制(emailOTPProviderManager),SMTP 只是一个内置的 Provider。其他插件或业务模块可以注册新的发送渠道(如阿里云邮件、SendGrid),无需修改认证插件本身的代码。

3. 安全性不容忽视

即使是在内网使用的系统,也应该考虑:

  • OTP 的随机性(用 crypto 而非 Math.random())
  • 限流和防暴力破解
  • 禁用插件的安全性检查
  • 隐私脱敏

4. 善用 NocoBase 现有能力

很多功能 NocoBase 已经提供了基础设施,不需要重复造轮子:

  • CacheManager / Counter – 分布式限流直接用
  • Verification 插件 – 验证码场景复用
  • file-manager 插件的 filePreviewTypes – 注册新预览器
  • ACL 系统 – 声明式权限控制

反馈与建议

这些插件还在持续完善中,如果你有使用中遇到的问题、新功能的需求建议,或者想要一起共建,欢迎在仓库提 Issue 或 PR!

仓库地址:GitHub - OneTwoSmall/nocobase-custom-plugins: 自定义开发Nocobase插件 · GitHub


以上内容为AI基于插件仓库自动生成。

7 Likes

好棒!收藏了!都是很实用的插件!

1 Like