分享 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] 占位符
配置流程
- 在"用户 > 认证器"中新建一个 Email 类型的认证器
- 选择验证器和是否启用自动注册
- 在"验证器"中配置邮件发送参数(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基于插件仓库自动生成。