news 2026/9/14 4:21:41

lowcode-engine 组件面板详解:资产包解析、分组排序与搜索机制

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
lowcode-engine 组件面板详解:资产包解析、分组排序与搜索机制

lowcode-engine 组件面板详解:资产包解析、分组排序与搜索机制

【免费下载链接】lowcode-engineAn enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系项目地址: https://gitcode.com/GitHub_Trending/lo/lowcode-engine

导读

组件面板(Component Panel)是 lowcode-engine 搭建界面中承载并展示组件的核心面板,它负责获取并解析低代码引擎的资产包数据,按照分组(group)与分类(category)规则对组件进行 tab / collapse 两级编排,并提供基于关键词的搜索能力。读完本文,你将掌握资产包数据与面板展示之间的字段映射关系、sort.groupList/sort.categoryList的排序协议、组件低代码 schema 片段(snippets)在拖拽时的插入机制,以及如何为组件配置搜索关键词,从而为上层搭建平台定制一套符合业务需要的组件面板。

组件面板概述:数据从资产包到面板

组件面板顾名思义就是承载组件的面板。它本身并不负责"生产"组件,而是获取并解析传入给低代码引擎的资产包数据,从中得到需要被展示的组件列表,再根据分类、排序规则对组件进行排列,同时提供搜索功能。

这里的"资产包数据"即 低代码引擎资产包协议(Assets 协议)所定义的结构化数据。按该协议,资产包最顶层包含 7 类描述内容:

  • version:当前协议版本号;
  • packages:低代码编辑器中加载的资源列表(公共库、组件库 CDN 资源等);
  • components:所有组件的描述协议列表;
  • sort:用于描述组件面板中的 tab 和 category;
  • plugins:设计器插件描述协议列表;
  • setters:设计器中设置器描述协议列表;
  • extConfig:平台自定义扩展字段。

其中,componentssort是组件面板展示的直接数据来源:前者描述"有哪些组件、每个组件长什么样",后者描述"这些组件在面板里如何分组、如何排序"。协议中sort属于 AA 级规范(推荐规范,由低代码引擎官方插件支持),定义在协议文档 2.4 sort 章节。

组件信息:面板承载的七类组件元数据

组件面板承载的组件信息包括:

信息项说明面板上的呈现方式
组件标题(title)组件的中文/展示名称直接可见,用于识别组件
组件截图(screenshot)组件的快照图片直接可见,作为组件预览图
组件低代码 schema 片段(snippets)组件不同状态下的低代码 schema,可有多份拖拽到设计器时自动插入页面 schema
组件分组(group)一级分组,决定组件位于组件面板的哪个 tab作为 tab 分组依据
组件分类(category)二级分组,决定组件位于同一 tab 下的哪个区域作为 collapse(折叠区)分组依据
是否隐藏组件控制组件是否出现在面板中控制展示/隐藏
关键词(keywords)用于搜索,聚合 name、title、description、keywords 等字段作为搜索匹配目标

这些组件信息均通过资产包数据获取。在源码层面,与上述字段一一对应的类型定义位于 packages/types/src/shell/type/component-metadata.ts,其IPublicTypeComponentMetadata接口明确声明了:

  • title:title or description;
  • screenshot:组件快照;
  • snippets:可用片段(见下文);
  • group:一级分组;
  • category:二级分组;
  • priority:组件优先级排序;
  • keywordstagsdescription等附加检索字段。

字段更完整的定义可参考 《低代码引擎物料协议规范》 中 2.2.2 组件描述协议 的基础信息表:componentNametitledescriptiondocUrlscreenshoticontagskeywordsdevModenpmsnippetsgroupcategorypriority。其中group用于描述当前组件位于组件面板的哪个 tab,category用于描述组件位于组件面板同一 tab 的哪个区域,priority用于描述组件在同一 category 中的排序。

组件低代码 schema 片段(snippets)与拖拽插入

IPublicTypeSnippet(定义见 packages/types/src/shell/type/snippet.ts)描述组件在面板中可供拖拽的"可用片段",其内容为组件不同状态下的低代码 schema,可以有多个:

  • title:组件分类 title;
  • screenshot:snippet 截图;
  • schema:待插入的 schema。

从源码注释可以确认其运行机制:用户从组件面板拖入组件到设计器时,会向页面 schema 中插入snippets中定义的组件低代码 schema。也就是说,面板里看到的标题与截图是"皮",真正起作用的是背后的 schema 片段——一次拖拽本质上是把一段预置的低代码 schema 落到当前编辑页面的节点树上,这与 资产包协议 中Snippet接口(title/screenshot/schema: ElementJSON)的定义完全一致。

组件分组、分类与排序

组件面板采用"两级分组"的编排结构:

  • tab(一级):相同group的组件放在同一个 tab 下;
  • collapse(二级):相同category的组件放在同一个 collapse(折叠区间)中;
  • 同时支持对 tab 和 collapse 进行整体排序。

由于这是"整体性"的排序,单个组件自身的信息无法决定该排序,因此在资产包数据根节点新增了sort字段用于指定分组和分类的排序。按 资产包协议 2.4 sort 章节 的定义:

根属性名称类型说明变量支持默认值
sort.groupListString[]组件分组,用于组件面板 tab 展示-['精选组件', '原子组件']
sort.categoryListString[]组件面板中同一个 tab 下的不同区间用 category 区分,category 的排序依照 categoryList 顺序排列-['通用', '数据展示', '表格类', '表单类']

该类型在引擎中的 TypeScript 定义为IPublicTypeComponentSort,见 packages/types/src/shell/type/component-sort.ts:

export interface IPublicTypeComponentSort { /** 用于描述组件面板的 tab 项及其排序,例如:["精选组件", "原子组件"] */ groupList?: string[]; /** 组件面板中同一个 tab 下的不同区间用 category 区分,category 的排序依照 categoryList 顺序排列; */ categoryList?: string[]; }

需要强调的是,groupList/categoryList中的顺序即面板中的展示顺序groupList决定 tab 从左到右的排列,categoryList决定每个 tab 内折叠区自上而下的排列。面板会将组件按其group/category归入对应位置,未出现在列表中的分组/分类按默认策略处理。

组件自身的 group、category、priority

除了资产包根节点的sort,组件描述本身也携带分组相关信息(见 物料协议基础信息表):

  • group:用于描述当前组件位于组件面板的哪个 tab;
  • category:用于描述组件位于组件面板同一 tab 的哪个区域;
  • priority:用于描述组件在同一 category 中的排序。

结合IPublicTypeComponentMetadata(component-metadata.ts)可以看到group/category同时支持string | IPublicTypeI18nData,即支持多语言文案,适合国际化搭建平台按当前语言展示分组名。实践中建议约定:组件描述里的group/category取值应尽量与资产包根节点sort.groupList/sort.categoryList中的项保持一致,否则组件会被归入面板的"其他"区域或默认位置。

搜索机制:关键词如何命中组件

组件面板提供搜索能力,其匹配目标是组件元数据中的多个文本字段。按本文档说明,面板会提取组件的 name、title、description、keywords 等字段作为搜索匹配的目标。因此:

  • 通过组件名称、组件描述可以直接搜索到对应组件;
  • 还可以额外指定一些keywords关键词,用来命中"名称和描述里没有、但业务上希望可被搜到"的词汇;
  • keywords既可以是数组string[]),也可以是字符串string)类型,两种写法均被支持。

在组件描述协议中,keywords字段被定义为"组件关键词,用于搜索联想"(见 物料协议 2.2.2.2 基础信息),其类型为String,允许为空;IPublicTypeComponentMetadatakeywords?: string[]也印证了数组形式的存在。搜索的实现实际上是多个字段的聚合匹配,即一次搜索会同时拿查询词去比对 name、title、description、keywords,因此为组件补充恰当的关键词可以显著提升其在面板中的可检索性。

实战:构造一份带分组排序的资产包

下面给出一份最小可用的资产包示例,完整演示sortcomponents与组件元数据字段的配合写法(字段含义以 资产包协议 为准):

{ "version": "1.1.0", "packages": [ { "package": "@example/biz-components", "version": "1.0.0", "library": "BizComponents", "editUrls": ["https://cdn.example.com/biz-components/view.js"], "urls": ["https://cdn.example.com/biz-components/index.js"] } ], "sort": { "groupList": ["精选组件", "原子组件", "业务组件"], "categoryList": ["通用", "数据展示", "表格类", "表单类"] }, "components": [ { "componentName": "BizTable", "title": "业务表格", "description": "带分页与筛选的业务表格", "keywords": ["table", "列表", "分页"], "group": "业务组件", "category": "表格类", "priority": 1, "npm": { "package": "@example/biz-components", "exportName": "BizTable", "version": "1.0.0" }, "snippets": [ { "title": "业务表格", "schema": { "componentName": "BizTable", "props": { "size": "medium", "pagination": true } } } ] } ] }

将该资产包作为 assets 参数传入引擎初始化后,组件面板会:

  1. 解析components,得到组件列表及每个组件的标题、截图、schema 片段、分组、分类、关键词等元数据;
  2. 依据sort.groupList依次创建"精选组件 / 原子组件 / 业务组件"三个 tab;
  3. 在每个 tab 内依据sort.categoryList创建"通用 / 数据展示 / 表格类 / 表单类"四个折叠区,并把BizTable归入"业务组件"tab 下的"表格类"区域;
  4. 当用户搜索"分页"或"table"时,通过 keywords 聚合命中BizTable
  5. 当用户把BizTable拖入画布时,将snippets[0].schema作为节点插入页面 schema。

至此,组件面板的"数据解析 → 分组排序 → 检索 → 拖拽插入"完整链路就打通了。

总结

组件面板是 lowcode-engine 物料体系面向编辑器的窗口:它通过 资产包协议 读取组件描述与排序配置,将group映射为 tab、category映射为 collapse,并通过根节点的sort.groupList/sort.categoryList完成整体排序;组件自身的titlescreenshotsnippetskeywords等字段则分别支撑面板展示、拖拽插入与搜索联想。理解这套字段映射关系后,上层搭建平台即可通过定制资产包数据,灵活控制组件面板的分组结构、展示顺序与检索效果,而无需改动引擎本身。

【免费下载链接】lowcode-engineAn enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系项目地址: https://gitcode.com/GitHub_Trending/lo/lowcode-engine

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 4:20:20

普通人可掌握的12个数字超能力:零安装、零设置、断网可用

1. 项目概述:这不是超能力,而是普通人可掌握的“现实增强术”“superpowers”这个词最近在技术圈、设计社区和效率工具讨论区高频出现,但它和漫威电影里那种一拳打穿三堵墙的能力毫无关系。我连续跟踪了三个月的开发者论坛、Notion模板分享站…

作者头像 李华
网站建设 2026/9/14 4:20:03

织梦二开付费下载站:会员VIP与积分双轨全解析

简介:这套基于织梦内核二次开发的PHP资源付费下载站源码,定位是帮助PHP开发者和个人站长快速搭建素材模板类付费下载平台。站点整合了用户中心、VIP充值系统、积分金币下载与后台管理等功能,可满足内容变现、会员权益、素材分发和订单管理等常…

作者头像 李华
网站建设 2026/9/14 4:19:57

MATLAB IMU校准:端到端误差建模与参数验证工作流

简介:本资源是面向无人系统、机器人与组合导航领域工程师及高校研究者的MATLAB IMU校准实践包,聚焦解决惯性传感器系统误差大、姿态解算精度低等实际问题。压缩包共16个文件,含14个MATLAB脚本(.m)、1个校准数据文件&am…

作者头像 李华
网站建设 2026/9/14 4:19:02

让AI按格填空:提示词结构化输出实战指南(含JSON与Markdown模板)

在上一篇文章里,我们聊了为什么要把结构化表格塞给 AI——讲道理、谈逻辑、看场景,结论其实就一句话:你不给它格子,它就给你写散文。今天这篇是“下篇”,直接上硬货:怎么一步步让 AI 从“自由发挥”变成“按…

作者头像 李华
网站建设 2026/9/14 4:19:01

400G/lane光模块:真正的瓶颈在电与封装

1. 先看懂400G/lane到底卡在哪一环1.1 一个速率代际的硬指标做光模块的同行都知道,400G/lane这个提法不是某一家厂商的营销话术,而是整个光互联行业从800G迈向1.6T的必经之路。单看名字容易误解成“一根光纤跑400G”,其实它的准确含义是&…

作者头像 李华
网站建设 2026/9/14 4:18:28

工控入门学习路线:从电气基础到PLC、HMI与通信实战

这两年问我“工控入门到底学什么”的人特别多,有刚毕业的电气相关专业学生,有从其他行业转过来的,还有已经在设备厂干了两年助理岗却一直觉得自己没入门的。这个问题听起来简单,真要展开却能聊上三天三夜。工控不是一门课、一个软…

作者头像 李华