From ffcc7341021da525263819cb6559cf20c2afea6a Mon Sep 17 00:00:00 2001 From: roymondchen Date: Mon, 15 Jun 2026 17:41:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(editor):=20=E6=9F=A5=E7=9C=8B/=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E6=97=B6=E8=87=AA=E5=8A=A8=E5=88=87=E6=8D=A2=20sideba?= =?UTF-8?q?r=20=E5=B9=B6=E5=AE=9A=E4=BD=8D=E5=88=B0=E5=AF=B9=E5=BA=94?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 点击代码块、数据源字段或方法的选择器编辑/查看按钮时,自动切换到对应 sidebar tab,并打开详情中的目标字段或方法配置。 --- packages/editor/src/fields/CodeSelectCol.vue | 8 ++- .../DataSourceFieldSelect/FieldSelect.vue | 18 +++++- .../editor/src/fields/DataSourceFields.vue | 45 ++++++++++--- .../src/fields/DataSourceMethodSelect.vue | 13 ++-- .../editor/src/fields/DataSourceMethods.vue | 63 ++++++++++++------- .../data-source/DataSourceConfigPanel.vue | 32 +++++++++- .../data-source/DataSourceListPanel.vue | 27 +++++++- packages/editor/src/type.ts | 2 + .../editor/src/utils/data-source/index.ts | 2 + .../unit/fields/DataSourceFieldSelect.spec.ts | 18 +++++- .../fields/DataSourceMethodSelect.spec.ts | 7 ++- 11 files changed, 190 insertions(+), 45 deletions(-) diff --git a/packages/editor/src/fields/CodeSelectCol.vue b/packages/editor/src/fields/CodeSelectCol.vue index ab8ed253..3281e317 100644 --- a/packages/editor/src/fields/CodeSelectCol.vue +++ b/packages/editor/src/fields/CodeSelectCol.vue @@ -107,10 +107,12 @@ const isCompareMode = computed(() => Boolean(props.isCompare && props.lastValues const notEditable = computed(() => filterFunction(mForm, props.config.notEditable, props)); -const hasCodeBlockSidePanel = computed(() => +const codeBlockSidePanel = computed(() => (uiService.get('sideBarItems') || []).find((item) => item.$key === SideItemKey.CODE_BLOCK), ); +const hasCodeBlockSidePanel = computed(() => codeBlockSidePanel.value); + /** * 根据代码块id获取代码块参数配置 * @param codeId 代码块ID @@ -191,6 +193,10 @@ const onParamsChangeHandler = (value: any, eventData: ContainerChangeEventData) }; const editCode = (id: string) => { + const sideBarItem = codeBlockSidePanel.value; + if (sideBarItem) { + uiService.set('sideBarActiveTabName', sideBarItem.text || sideBarItem.$key || SideItemKey.CODE_BLOCK); + } eventBus?.emit('edit-code', id); }; diff --git a/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue b/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue index 08b4fdbf..342db0a8 100644 --- a/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue +++ b/packages/editor/src/fields/DataSourceFieldSelect/FieldSelect.vue @@ -211,11 +211,25 @@ const onChangeHandler = (v: string[] = []) => { emit('change', v); }; -const hasDataSourceSidePanel = computed(() => +const dataSourceSidePanel = computed(() => uiService.get('sideBarItems').find((item) => item.$key === SideItemKey.DATA_SOURCE), ); +const hasDataSourceSidePanel = computed(() => dataSourceSidePanel.value); + const editHandler = (id: string) => { - eventBus?.emit('edit-data-source', removeDataSourceFieldPrefix(id)); + const sideBarItem = dataSourceSidePanel.value; + if (sideBarItem) { + uiService.set('sideBarActiveTabName', sideBarItem.text || sideBarItem.$key || SideItemKey.DATA_SOURCE); + } + + const dataSourceId = removeDataSourceFieldPrefix(id); + const fieldPath = selectFieldsId.value; + + if (fieldPath.length) { + eventBus?.emit('edit-data-source-field', dataSourceId, [...fieldPath]); + } else { + eventBus?.emit('edit-data-source', dataSourceId); + } }; diff --git a/packages/editor/src/fields/DataSourceFields.vue b/packages/editor/src/fields/DataSourceFields.vue index 4a93fb39..4bcf84a6 100644 --- a/packages/editor/src/fields/DataSourceFields.vue +++ b/packages/editor/src/fields/DataSourceFields.vue @@ -47,7 +47,7 @@ diff --git a/packages/editor/src/fields/DataSourceMethodSelect.vue b/packages/editor/src/fields/DataSourceMethodSelect.vue index b83b3f74..aabfe0be 100644 --- a/packages/editor/src/fields/DataSourceMethodSelect.vue +++ b/packages/editor/src/fields/DataSourceMethodSelect.vue @@ -13,7 +13,7 @@ > @@ -75,7 +75,7 @@ const props = withDefaults(defineProps> disabled: false, }); -const hasDataSourceSidePanel = computed(() => +const dataSourceSidePanel = computed(() => (uiService.get('sideBarItems') || []).find((item) => item.$key === SideItemKey.DATA_SOURCE), ); @@ -208,12 +208,17 @@ const onParamsChangeHandler = (value: any, eventData: ContainerChangeEventData) }; const editCodeHandler = () => { - const [id] = props.model[props.name]; + const [id, methodName] = props.model[props.name]; const dataSource = dataSourceService.getDataSourceById(id); if (!dataSource) return; - eventBus?.emit('edit-data-source', id); + const sideBarItem = dataSourceSidePanel.value; + if (sideBarItem) { + uiService.set('sideBarActiveTabName', sideBarItem.text || sideBarItem.$key || SideItemKey.DATA_SOURCE); + } + + eventBus?.emit('edit-data-source-method', id, methodName); }; diff --git a/packages/editor/src/fields/DataSourceMethods.vue b/packages/editor/src/fields/DataSourceMethods.vue index b01d1e0a..0fe9d6d3 100644 --- a/packages/editor/src/fields/DataSourceMethods.vue +++ b/packages/editor/src/fields/DataSourceMethods.vue @@ -21,7 +21,7 @@ diff --git a/packages/editor/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue b/packages/editor/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue index 91fe02d8..eef207a8 100644 --- a/packages/editor/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue +++ b/packages/editor/src/layouts/sidebar/data-source/DataSourceConfigPanel.vue @@ -22,7 +22,7 @@