NocoBase 编辑弹窗配置指南:打开方式、弹窗尺寸与模板复用
2026/9/15 13:58:06 网站建设 项目流程

NocoBase 编辑弹窗配置指南:打开方式、弹窗尺寸与模板复用

【免费下载链接】nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase

导读

在 NocoBase 中,凡是点击后能打开弹窗的操作按钮(如查看、编辑、新增、关联等)与字段,都可以通过"编辑弹窗"配置其打开方式(抽屉/对话框/子页面)、弹窗尺寸与标题。本文基于 NocoBase 官方文档与客户端源码,完整讲解弹窗配置的每一项选项、默认值与底层实现原理,帮助你精确控制界面弹窗的展示形态。

介绍:哪些元素支持弹窗配置

NocoBase 界面中,凡是点击能打开弹窗的操作或字段,都支持配置弹窗的打开方式、尺寸等。典型场景包括:

  • 数据块操作:表格/详情块上的查看(View)、编辑(Edit)、新增(Add new)、添加子记录(Add child)、关联(Associate)等操作按钮;
  • 字段:关联字段(如记录选择器)、日期、下拉选择等可触发弹窗的字段;
  • 自定义弹窗操作:通过操作设置配置的弹窗类操作。

从源码看,这些操作按钮的弹窗配置项统一由SchemaSettingOpenModeSchemaItems提供,并被注册进多个操作的设置面板中,例如编辑操作(editActionSettings.tsx)、自定义弹窗操作(customizePopupActionSettings.tsx)以及新增、添加子记录、关联等操作。字段组件(如 Input、Select、DatePicker)同样复用了这套弹窗配置项。

在操作配置中,打开方式/弹窗尺寸的配置项受全局上下文控制:当useOpenModeContext()返回的hideOpenModetrue时,会隐藏这两个选项。

打开方式

在操作/字段的设置面板中,通过"打开方式"(Open mode)下拉选项,可以将弹窗切换为以下三种形态之一:

  • 抽屉(Drawer):从页面一侧滑出的侧边抽屉,保留当前页面上下文,适合承载表单、详情等较长内容;
  • 对话框(Dialog / Modal):居中的模态对话框,聚焦当前任务,适合短小、需要强制交互的场景;
  • 子页面(Page):以独立子页面的形式打开,拥有完整的页面空间,适合内容量大、需要独立路由的场景。

源码视角:打开方式的三种实现

打开方式并非简单的视觉切换,而是对应三种不同的底层组件。在 OpenModeProvider.tsx 中:

type OpenMode = 'drawer' | 'page' | 'modal'; const defaultContext: OpenModeProviderProps = { defaultOpenMode: 'drawer', openModeToComponent: { drawer: ActionDrawer, page: ActionPage, modal: ActionModal, }, hideOpenMode: false, };

可以看到:

  • 默认打开方式是drawer(抽屉),未显式配置openMode时使用该值;
  • 三种模式分别映射到ActionDrawerActionPageActionModal三个组件;
  • 通过OpenModeProvideropenModeToComponent属性,甚至可以自定义每种模式对应的渲染组件;
  • OpenModeProvider还支持hideOpenMode(隐藏打开方式配置)与isMobile(移动端路由)等全局能力。

配置值存储在操作 schema 的x-component-props.openMode字段中。在 OpenModeSchemaItems.tsx 中,切换打开方式时会同步更新fieldSchema['x-component-props'].openMode,并通过dn.emit('patch')触发 schema 变更,实现即时生效。

另外需要注意:子页面(Page)模式并非在所有场景都可用。在新增操作初始化(Initializer)场景中,modeOptions会根据isPopupVisibleControlledByURL()动态决定——只有开启"弹窗可见性由 URL 控制"时,才会出现 Page 选项(详见 OpenModeSchemaItems.tsx);而在操作设置(SchemaSettings)场景中默认提供抽屉、对话框、子页面三种选项。

弹窗尺寸

当打开方式为抽屉或对话框时,可以进一步配置"弹窗尺寸"(Popup size),可选值为:

  • 大(Large)
  • 中(Middle,默认)
  • 小(Small)

尺寸配置同样存储在 schema 的x-component-props.openSize字段中。切换打开方式时,源码会自动删除旧的openSize配置并回落到对应默认值(OpenModeSchemaItems.tsx)。

源码视角:不同打开方式的尺寸映射

抽屉与对话框的"大/中/小"对应的是不同的实际宽度百分比:

抽屉(Action.Drawer.tsx):

尺寸抽屉宽度对话框宽度
small30%40%
middle(默认)50%60%
large70%80%

其中,对话框(Modal)的宽度映射定义在 Action.Modal.tsx。表格中"抽屉宽度"来自ActionDrawer,"对话框宽度"来自ActionModal

同时要注意默认尺寸的差异:当未显式配置openSize时,代码会按打开方式取默认值——抽屉默认middle(50%),对话框默认large(80%)(OpenModeSchemaItems.tsx)。子页面模式不提供尺寸配置项,因为其占满整个页面空间。

模板

如果希望多个操作/字段复用同一套弹窗配置(打开方式、尺寸、弹窗内的界面与交互逻辑),可以使用弹窗模板,详见 UI 模板 - 弹窗模板。

弹窗模板的核心机制是"复用一套弹窗界面与交互逻辑",选择器会根据当前操作场景自动过滤/禁用不兼容的模板,并提示不满足条件的原因。模板匹配遵循以下规则:

  • Collection 操作:只能使用同一 Collection 的 Collection 操作创建的弹窗模板;
  • 非关联 Record 操作:可使用同一 Collection 的 Collection 操作或非关联 Record 操作创建的弹窗模板;
  • 关联 Record 操作:可使用同一 Collection 的 Collection 操作或非关联 Record 操作创建的模板,也可使用同一关联字段的关联 Record 操作创建的模板;
  • 关系弹窗模板严格匹配:从关联 Record 操作创建的模板带有associationName,只能被完全相同关联字段的操作/字段使用。例如在订单.客户关系字段上创建的模板,不能被订单.推荐人关系字段使用(即使两者的目标数据表都是客户),因为模板内部的变量和配置依赖特定的关联关系上下文。

小结

NocoBase 的"编辑弹窗"配置以操作/字段的 schema 属性x-component-props.openModeopenSize为核心,配合OpenModeProvider提供的组件映射与默认值机制,实现了抽屉、对话框、子页面三种打开方式与三档尺寸的灵活组合。理解这一配置体系后,你可以:

  1. 为不同操作场景选择最合适的弹窗形态(数据量大的内容用抽屉或子页面,强交互任务用对话框);
  2. 依据内容量级精确控制弹窗宽度(抽屉 30%/50%/70%,对话框 40%/60%/80%);
  3. 通过弹窗模板将一套弹窗配置沉淀为可复用资产,并借助模板匹配规则保障关联场景下的配置一致性。

相关阅读:UI 模板 - 弹窗模板。

【免费下载链接】nocobaseNocoBase is an open-source AI + no-code platform for building business systems fast. Instead of generating everything from scratch, AI works on top of production-proven infrastructure and a WYSIWYG no-code interface, so you get both speed and reliability.项目地址: https://gitcode.com/GitHub_Trending/no/nocobase

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询