From 76be2dc85c1fad9eddf69ad540aaf6b9e6f30a38 Mon Sep 17 00:00:00 2001 From: 2910410219 <2910410219@qq.com> Date: Thu, 16 Jul 2026 17:26:30 +0800 Subject: [PATCH] =?UTF-8?q?feat(json-schema-editor):=20JSON=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=99=A8=E6=96=B0=E5=A2=9E=20isContainer=20=E5=AE=B9?= =?UTF-8?q?=E5=99=A8=E5=AD=97=E6=AE=B5=E8=81=94=E5=8A=A8=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将旧的分级 upLevel/remove 联动规则改为基于完整路径的平铺结构。 新增特性: - 标量字段(string/number/boolean)配置面板中增加"容器字段"开关 - 开关打开后展示"联动隐藏"下拉菜单,列出当前字段同级及以上所有可选字段 - 下拉展示格式:"字段key — 完整路径"(如 type — messages.attrs[0].content.attrs[0].type) - 选中后以 { key: path } 格式输出,渲染器按路径直接定位隐藏字段 核心改动: - index.vue: 新增 getAvailableFields / getNodeJsonPath 替代旧的分级遍历逻辑 - getAvailableFields: 从当前字段向上遍历,跳过数组层级,根级只含容器自身 - getNodeJsonPath: inAttrs 状态机生成完整路径(messages.attrs[0].content.attrs[0].type) - linkRules 类型从 Array<{ upLevel, remove[] }> 改为 Array> - formToConfig / hasAnyConfig 同步更新 - FieldConfigDialog.vue: 重构联动隐藏UI,单 el-select multiple 替代分级 checkbox - JsonNode.vue: 类型同步 + 摘要显示容器触发器及规则数 数据格式示例: "isContainer": true, "linkRules": [ { "type": "messages.attrs[0].content.attrs[0].type" } ] --- .../json-schema-editor/FieldConfigDialog.vue | 106 ++++++++++++----- .../json-schema-editor/JsonNode.vue | 8 ++ src/components/json-schema-editor/index.vue | 108 ++++++++++++++++++ 3 files changed, 192 insertions(+), 30 deletions(-) diff --git a/src/components/json-schema-editor/FieldConfigDialog.vue b/src/components/json-schema-editor/FieldConfigDialog.vue index 0564042..d73633d 100644 --- a/src/components/json-schema-editor/FieldConfigDialog.vue +++ b/src/components/json-schema-editor/FieldConfigDialog.vue @@ -26,9 +26,9 @@
JSON 数据类型
- - 此对象字段是否循环生成 - + + 此对象字段是否循环生成 + + + + {{ form.isContainer ? '此字段为容器触发器,将联动隐藏其他字段' : '' }} + + + + + +