NocoBase 最新一周产品更新中,审批通知渠道新增了按标题远程搜索的能力。这个变化看似集中在一个选择框里,实际解决的是配置规模扩大后的核心问题:当通知渠道越来越多时,用户不必加载完整列表或逐页查找,可以直接输入标题,由服务端筛选候选项。
远程搜索改变了什么
普通下拉框通常在页面初始化时拉取全部选项,再由浏览器执行本地过滤。数据量较小时,这种方案简单有效;当通知渠道达到数百甚至数千条后,问题会逐渐显现:
- 首次加载传输大量无关记录,拖慢审批配置页面。
- 浏览器需要保存并过滤完整数据集。
- 分页数据无法被前端完整搜索,用户仍需反复翻页。
- 新增或修改的渠道可能因为本地缓存而不能立即出现。
远程搜索把过滤工作交给服务端。用户输入标题关键词后,前端只请求一小批匹配记录,例如最多返回 20 条。这样既降低了请求体积,也让搜索结果更接近数据库中的实时状态。
这项更新针对的是“按标题查找”,因此配置渠道标题时仍应保持可辨识性。与其使用大量“默认通知”或“审批提醒”,更适合采用“业务域 + 场景 + 渠道”的命名方式,例如:
采购审批 - 金额超限 - 企业微信
人事审批 - 入职完成 - 邮件
财务审批 - 报销驳回 - 短信
一个可落地的远程搜索接口模型
来源摘要没有公开该功能的具体接口路径和参数。下面是一个可以用于联调或改造的最小示例,假设前端通过 q 传递标题关键词,服务端返回 id、title 两个字段。接入真实 NocoBase 项目时,需要根据当前版本的资源名称、权限规则和响应结构调整。
将以下代码保存为 server.py,它只使用 Python 标准库:
import json
from http.server import BaseHTTPRequestHandler, HTTPServer
from urllib.parse import parse_qs, urlparse
CHANNELS = [
{"id": 1, "title": "采购审批 - 金额超限 - 企业微信"},
{"id": 2, "title": "人事审批 - 入职完成 - 邮件"},
{"id": 3, "title": "财务审批 - 报销驳回 - 短信"},
{"id": 4, "title": "财务审批 - 付款完成 - 企业微信"},
]
class Handler(BaseHTTPRequestHandler):
def do_GET(self):
request = urlparse(self.path)
if request.path != "/api/notification-channels":
self.send_error(404)
return
keyword = parse_qs(request.query).get("q", [""])[0].strip().lower()
limit = 20
matches = [
channel for channel in CHANNELS
if keyword in channel["title"].lower()
][:limit]
payload = json.dumps(
{"data": matches, "hasMore": False},
ensure_ascii=False,
).encode("utf-8")
self.send_response(200)
self.send_header("Content-Type", "application/json; charset=utf-8")
self.send_header("Content-Length", str(len(payload)))
self.end_headers()
self.wfile.write(payload)
if __name__ == "__main__":
print("Listening on http://127.0.0.1:8000")
HTTPServer(("127.0.0.1", 8000), Handler).serve_forever()
启动服务并搜索包含“财务”的渠道:
python3 server.py
在另一个终端执行:
curl --get 'http://127.0.0.1:8000/api/notification-channels' \
--data-urlencode 'q=财务'
预期会得到两条匹配记录。生产接口还应加入鉴权、分页、租户或数据范围过滤,并限制单次返回数量。数据库侧可以先为标题列建立普通索引;如果需求升级为模糊搜索、分词搜索或多语言搜索,则需要结合所用数据库评估全文索引方案。
三个版本分支该怎么选
NocoBase 当前更新分为 main、next 和 develop 三个分支,它们代表不同的稳定性阶段:
main是目前最稳定的版本,适合生产环境,也应作为大多数团队的默认选择。next包含即将发布并经过初步测试的功能,适合验证远程搜索等新能力,但仍可能存在已知或未知问题。develop面向持续开发,变化更快,不适合直接承载关键审批流程。
如果团队希望尽早验证这项功能,可以在隔离环境使用 next,导入脱敏后的通知渠道和审批配置,重点检查搜索准确性、权限隔离、请求延迟以及升级兼容性。生产环境则继续留在 main,等功能进入稳定发布后再按既有升级流程推进。
切换或升级前,可以先确认当前 Git 工作区所处分支:
git fetch --all --prune
git branch --show-current
git log -1 --oneline
如果采用容器镜像部署,应使用项目正式发布的明确版本标签,并记录镜像摘要;不要仅依赖会持续移动的分支标签。具体标签名称以团队实际使用的 NocoBase 发布方式为准。
上线前检查清单
远程搜索减少了加载量,但也把更多责任转移到了接口、数据库和权限系统。上线前建议确认以下事项:
- 输入关键词后采用适当的防抖,避免每次按键都立即发起请求。
- 空关键词只返回有限数量的常用项或最近使用项,不加载全部渠道。
- 搜索接口复用原有数据权限,不能让用户看到无权配置的通知渠道。
- 服务端设置明确的分页和数量上限,并处理超时、空结果和请求失败。
- 标题命名具有业务辨识度,避免大量同名记录削弱搜索效果。
- 在
next验证时保留回滚方案,不直接修改生产审批配置。
对通知渠道较少的实例,这项能力主要改善操作体验;对渠道数量大、多人维护或存在多业务域的实例,它会直接降低配置耗时。采用时不必为了追新而切换生产分支,更稳妥的路径是先在 next 完成真实数据规模下的验证,再等待稳定版本进入 main。