Skip to content

fix: validate visibility rules against global workflow variables - #7230

Open
pentaoa wants to merge 1 commit into
1Panel-dev:v2from
pentaoa:fix/global-visibility-validation
Open

pentaoa wants to merge 1 commit into
1Panel-dev:v2from
pentaoa:fix/global-visibility-validation

Conversation

@pentaoa

@pentaoa pentaoa commented Oct 2, 2026

Copy link
Copy Markdown

What this PR does / why we need it?

Fixes #7224.

在「用户输入 → 显隐设置」中选择 global.chat_user_id 等内置变量后,调试或发布会提示“不存在的引用变量”。变量选择器提供完整的 global 列表,但基础节点的 validate 将所有 global 引用都放到 user_input_field_list 中查找;内置变量和 API 输入变量不在这个列表中,因此合法引用被拒绝。

Summary of your change

ui/src/workflow/nodes/base-node/index.vue:

  • global 引用改为在 get_up_node_field_list(true, true) 返回的全局变量中校验,与变量选择器及表单节点沿用同一份变量定义。
  • 以基础节点 ID 引用同节点字段时,继续检查 user_input_field_list。
  • 已删除或不存在的变量仍然报错,未填写完整的条件仍按现有逻辑跳过。

复用现有变量列表,避免单独维护内置变量白名单。用户输入字段和 API 输入字段修改时,开始节点现有的 refreshFieldList 事件会更新该列表。没有 API、存储格式或界面布局变化。

Testing

  • cd ui && npm run type-check:通过。
  • cd ui && npx eslint src/workflow/nodes/base-node/index.vue:通过。
  • git diff --check:通过。
  • 本地组件验证脚本用 Vue SFC 编译器加载完整组件,在真实 Vue renderer 中挂载并调用节点注册的 validate;12 个断言通过:6 个内置变量、API 输入变量、自定义全局输入、同节点输入、已删除的全局输入、已删除的同节点输入、不完整条件。原始组件在第一个内置变量用例即返回“不存在的引用变量”。脚本使用现有 Vue/TypeScript 依赖;未向项目添加测试框架。

复查步骤:在用户输入字段的显隐条件中分别选择 global.chat_user_id、API 输入变量和其他用户输入字段,保存后调试/发布;删除被引用的自定义字段后再次校验,应仍提示引用不存在。

Limitations

cd ui && npm run lint 全量检查有 72 个现有错误,分布于其他文件;修改文件的单独检查通过。未运行后端测试及完整浏览器端到端测试。

Please indicate you've done the following:

  • Made sure tests are passing and test coverage is added if needed.(完成以上针对性验证;全量检查限制见上文。)
  • Made sure commit message follow the rule of Conventional Commits specification.
  • Considered the docs impact and opened a new docs issue or PR with docs changes if needed.(修复已有行为,无新增使用方式。)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] “用户输入”中的“显隐设置”选择全局变量无法发布

1 participant