
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 中区块Block是承载字段与操作按钮的容器例如表格区块、表单区块、详情区块等。区块联动规则正是从「区块」这一层级整体管理元素的展示当条件满足时整个区块显示或隐藏而不是逐个字段去控制。与字段联动规则、操作联动规则一样区块联动规则属于 NocoBase「联动规则」体系的一部分用于控制前端界面元素的交互行为实现低代码、可配置的动态交互体验。更多通用规则说明可参考联动规则。区块联动规则的核心特征控制粒度是区块通过规则整体控制某个区块的显示或隐藏条件来源丰富既支持全局变量如当前用户、当前角色也支持上下文变量如当前记录、当前表单、当前弹窗记录默认显示未配置联动规则时区块默认显示通常需要配置的是「隐藏」逻辑。注意在执行区块联动规则之前区块的显示首先需要经过ACL 权限判断。只有当用户具备相应的访问权限时才能进入区块联动规则的判断逻辑。换句话说区块联动规则仅在满足 ACL 查看权限要求后生效。用全局变量控制区块区块联动规则支持通过全局变量动态控制区块的展示内容使不同角色和权限的用户看到并操作定制化的数据视图。例如在一个订单管理系统中虽然管理员、销售人员、财务人员都具有查看订单的权限但每个角色需要查看的字段和操作按钮可能不同。通过配置全局变量可以根据用户的角色、权限或其他条件灵活调整显示的字段、操作按钮甚至是数据的排序和筛选规则。典型应用场景角色权限控制根据不同角色的权限控制某些字段是否可见或可编辑。例如销售人员只能查看订单的基本信息而财务人员可以查看订单的支付详情。个性化视图为不同部门或团队定制不同的区块视图确保每个用户仅看到与其工作相关的内容提高工作效率。操作权限管理通过全局变量控制操作按钮的显示例如某些角色只能查看数据其他角色则可以执行修改、删除等操作。可用的系统全局变量根据变量文档可在联动规则条件中使用的系统变量包括变量含义典型用途当前用户当前登录状态下的用户信息按用户身份控制区块展示当前角色当前登录用户的角色标识role name按角色显示不同数据视图的区块当前设备类型当前访问设备类型如非电脑端不显示「模板打印」操作所在区块URL 查询参数当前页面 URL 中的查询参数配合链接操作按页面参数控制区块API token访问 NocoBase API 的凭证字符串验证用户身份的动态条件用上下文变量控制区块除了全局变量区块还可以通过上下文中的变量控制显示。常用的上下文变量包括「当前记录」、「当前表单」、「当前弹窗记录」等。当前记录表示数据表中已保存的行记录值例如表格上的行记录在展示类区块的行操作联动规则中均可使用。当前表单表示表单中实时输入的值仅用于表单区块。当前弹窗记录表示弹窗操作中的当前行记录或当前点击的关系记录弹窗内的区块都可以使用该变量。示例仅当订单的状态为「已付款」时才显示「订单商机信息」区块。此时条件左侧变量选择「当前记录/状态」操作符选择等于$eq右侧值输入「已付款」联动行为设置为「显示」。 左侧变量的可选范围由区块所在的上下文决定。合理选择变量是配置联动规则的关键「当前用户」表示当前登录用户信息「当前表单」表示表单中实时输入的值「当前记录」表示已保存的记录值。条件配置详解区块联动规则的条件表达式由三部分组成左侧变量 操作符 右侧值系统根据左侧变量的类型自动适配操作符与右侧输入方式。左侧变量条件左侧变量用于定义联动规则中「判断的对象」即基于该变量的值进行条件判断从而决定是否触发联动行为。可选变量包括上下文中的字段如「当前表单/xxx」、「当前记录/xxx」、「当前弹窗记录/xxx」等系统全局变量如「当前用户」、「当前角色」等适用于根据用户身份、权限等信息进行动态控制。操作符操作符用于设定条件判断的逻辑即如何比较左侧变量与右侧值。不同类型左侧变量支持不同的操作符变量类型支持的操作符文本类型$includes、$eq、$ne、$empty、$notEmpty等数值类型$eq、$gt、$lt、$gte、$lte等布尔类型$isTruly、$isFalsy数组类型$match、$anyOf、$empty、$notEmpty等系统会根据左侧变量的类型自动推荐可用的操作符列表确保配置逻辑合理。右侧值右侧值用于与左侧变量进行比较是判断条件是否成立的参照值支持常量值输入固定的数值、文本、日期等上下文变量如当前表单的其他字段、当前记录等系统变量如当前用户、当前时间、当前角色等。系统会根据左侧变量的类型自动适配右侧的输入方式左侧是「选项字段」时显示对应选项选择器左侧是「日期字段」时展示日期选择器左侧是「文本字段」时显示文本输入框。灵活使用右侧的动态变量可以构建基于当前用户、当前数据状态、上下文环境的联动逻辑。规则执行逻辑条件触发当规则中的条件满足时条件非必填系统会自动执行下方的属性修改操作如果未设置条件则默认认为规则始终满足并自动执行属性修改操作。也就是说一条没有条件的区块联动规则等价于「恒生效」的显隐控制。多条规则的执行顺序可以为同一个区块配置多条联动规则。当同时符合多个规则条件时系统按照规则的先后顺序从前往后执行以最后一个结果为执行标准。示例规则 1 将区块设置为「隐藏」规则 2 将区块设置为「显示」如果两个规则的条件都满足那么区块最终将处于「显示」状态。多条规则的执行顺序至关重要。请确保在设计规则时理清它们的优先级和相互关系以避免规则冲突。规则管理可以对每一条联动规则执行以下管理操作自定义命名为规则设置易于理解的名称以便管理和识别排序根据规则执行的优先级调整顺序确保系统按照正确的顺序处理规则删除删除不再需要的规则启用/禁用临时禁用某条规则而不删除它适用于需要暂时停用某个规则的场景复制规则通过复制已有的规则来创建新规则避免重复配置。源码实现原理从源码层面看区块联动规则以x-block-linkage-rules字段的形式存储在区块的 schema 节点上并在运行时被统一读取与执行相关实现主要集中在 BlockLinkageRuleProvider.tsx。规则的存储与读取在 BlockLinkageRuleProvider.tsx 中getLinkageRules会从区块 schema 读取x-block-linkage-rules并过滤掉disabled的规则const getLinkageRules (fieldSchema) { if (!fieldSchema) return []; let linkageRules fieldSchema?.[x-block-linkage-rules] || []; fieldSchema.mapProperties((schema) { if (schema[x-block-linkage-rules]) { linkageRules schema[x-block-linkage-rules]; } }); return linkageRules?.filter((k) !k.disabled); };从该数据模型可以看出每条规则的内部结构至少包含condition条件组、conditionType条件类型如advanced、actions动作列表其中operator取值为visible或hidden以及disabled启用/禁用标记。区块的挂载方式数据区块在渲染时由 DataBlockProvider.tsx 通过BlockLinkageRuleProvider包裹从而让规则生效此外 BlockItem.tsx 也对带x-block-linkage-rules的 FormItem 装饰器区块与 Iframe 区块做了联动规则的处理。条件求值与显隐计算utils.ts 中的useReactiveLinkageEffect是核心执行逻辑它遍历所有未被禁用的规则及规则下的每个动作使用conditionAnalyses结合jsonLogic对条件组求值条件成立时将visible或hidden依次推入结果数组。由于结果是顺序追加的最终以数组的最后一个元素为准这与文档中「以最后一个结果为执行标准」的说明完全一致。for (const rule of linkageRules.filter((r) !r.disabled)) { for (const action of rule.actions || []) { await linkageAction({ operator: action.operator, condition: rule.condition, ... }, jsonLogic); } }隐藏后的渲染行为在 BlockLinkageRuleProvider.tsx 中当最终结果为hidden时若处于设计designable模式区块不会直接消失而是以opacity: 0.3的半透明状态保留方便搭建者继续看到并编辑被隐藏的区块若处于运行模式则直接返回null即区块从界面中隐藏。同时当区块未配置任何联动规则时!linkageRules.lengthprovider 直接返回props.children印证了「无区块联动规则时区块默认显示」的行为。联动规则体系中的定位区块联动规则只是 NocoBase 联动规则体系的一部分与之并列的还有字段联动规则根据用户行为动态调整表单/详情区块字段的状态支持显示/隐藏、必填、赋值、执行 JavaScript 等适用于表单区块、详情区块与子表单操作联动规则使用当前记录值、当前表单等上下文变量和全局变量控制操作行为如隐藏/禁用等。三者在条件配置、执行逻辑与规则管理上遵循同一套设计可以组合使用例如先通过区块联动规则按角色隐藏整块区域再通过字段联动规则在同一区块内按数据状态动态调整字段的必填与赋值实现从「区块 → 字段 → 操作」三个层级的立体化动态界面。最佳实践与注意事项默认显示优先配置隐藏逻辑区块默认是显示的因此区块联动规则通常用于「什么条件下隐藏」而非「什么条件下显示」善用角色变量做权限型视图管理员显示完整信息的区块普通用户只能看到基本信息区块是区块联动规则最典型的高价值场景理清多条规则的顺序同一区块的多条规则按顺序执行、以最后一条结果为标准配置时应避免规则互相覆盖导致的隐性冲突区分变量含义「当前记录」是已保存的记录值「当前表单」是实时输入值选错变量会导致条件永远不成立与 ACL 权限配合使用联动规则只在用户通过 ACL 查看权限判断后才生效权限控制仍需以 ACL 为主体该功能仍在持续迭代联动规则功能正在持续优化中配置行为可能随版本演进建议以当前版本的实际界面为准。通过合理运用区块联动规则你可以用纯配置的方式为不同角色、不同数据状态构建差异化的业务界面在不写代码的前提下实现「千人千面」的数据视图。【免费下载链接】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),仅供参考