From 603118b601ad88a0e4b019c9f2568a81d14ea70d Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Fri, 6 Dec 2024 17:36:58 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF=E3=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=A4=A7=E5=B1=8F):=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E7=BD=91=E9=A1=B5=E7=BB=84=E4=BB=B6=E5=90=91=E5=A4=96=E5=B1=82?= =?UTF-8?q?=E4=BB=AA=E8=A1=A8=E6=9D=BF=E4=BC=A0=E9=80=92=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chart/manage/ChartDataManage.java | 6 ++++ .../dataset/manage/DatasetSQLManage.java | 8 +++++ .../data-visualization/canvas/DePreview.vue | 31 ++++++++++++------- .../modules/data-visualization/dvMain.ts | 31 ++++++++++++++++++- .../src/views/dashboard/index.vue | 17 ++++++++++ .../src/views/data-visualization/index.vue | 15 +++++++++ .../extensions/view/dto/ChartExtRequest.java | 2 ++ 7 files changed, 97 insertions(+), 13 deletions(-) diff --git a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java index 1352d8205b..22c0110ec1 100644 --- a/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java +++ b/core/core-backend/src/main/java/io/dataease/chart/manage/ChartDataManage.java @@ -233,6 +233,12 @@ public class ChartDataManage { filters.addAll(chartExtRequest.getOuterParamsFilters()); } + // web参数条件 + if (ObjectUtils.isNotEmpty(chartExtRequest.getOuterParamsFilters())) { + filters.addAll(chartExtRequest.getWebParamsFilters()); + } + + //联动过滤条件和外部参数过滤条件全部加上 if (ObjectUtils.isNotEmpty(filters)) { for (ChartExtFilterDTO request : filters) { diff --git a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java index 27bec793ee..4ace64ae13 100644 --- a/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java +++ b/core/core-backend/src/main/java/io/dataease/dataset/manage/DatasetSQLManage.java @@ -78,6 +78,14 @@ public class DatasetSQLManage { filterParametersAdaptor(parameters, filterDTO, datasetTableId); } } + if (chartExtRequest != null && ObjectUtils.isNotEmpty(chartExtRequest.getWebParamsFilters())) { + for (ChartExtFilterDTO filterDTO : chartExtRequest.getWebParamsFilters()) { + if (CollectionUtils.isEmpty(filterDTO.getValue())) { + continue; + } + filterParametersAdaptor(parameters, filterDTO, datasetTableId); + } + } if (chartExtRequest != null && ObjectUtils.isNotEmpty(chartExtRequest.getFilter())) { for (ChartExtFilterDTO filterDTO : chartExtRequest.getFilter()) { if (CollectionUtils.isEmpty(filterDTO.getValue())) { diff --git a/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue b/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue index cc5b118c88..be29ad1baa 100644 --- a/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue +++ b/core/core-frontend/src/components/data-visualization/canvas/DePreview.vue @@ -318,18 +318,25 @@ const initWatermark = (waterDomId = 'preview-canvas-main') => { // 目标校验: 需要校验targetSourceId 是否是当前可视化资源ID const winMsgHandle = event => { const msgInfo = event.data - // 校验targetSourceId - if ( - msgInfo && - msgInfo.type === 'attachParams' && - msgInfo.targetSourceId === dvInfo.value.id + '' && - isMainCanvas(canvasId.value) - ) { - const attachParams = msgInfo.params - state.initState = false - dvMainStore.addOuterParamsFilter(attachParams, baseComponentData.value, 'outer') - state.initState = true - } + if (msgInfo?.targetSourceId === dvInfo.value.id + '' && isMainCanvas(canvasId.value)) + if (msgInfo.type === 'attachParams') { + winMsgOuterParamsHandle(event) + } else if (msgInfo.type === 'webParams') { + // 网络消息处理 + winMsgWebParamsHandle(msgInfo) + } +} + +const winMsgWebParamsHandle = msgInfo => { + const params = msgInfo.params + dvMainStore.addWebParamsFilter(params, baseComponentData.value) +} + +const winMsgOuterParamsHandle = msgInfo => { + const attachParams = msgInfo.params + state.initState = false + dvMainStore.addOuterParamsFilter(attachParams, baseComponentData.value, 'outer') + state.initState = true } onMounted(() => { diff --git a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts index 1057a7e944..17e7814747 100644 --- a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts +++ b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts @@ -15,7 +15,6 @@ import { import { useEmitt } from '@/hooks/web/useEmitt' import chartViewManager from '@/views/chart/components/js/panel' import { - COMMON_COMPONENT_BACKGROUND_BASE, COMMON_COMPONENT_BACKGROUND_DARK, COMMON_COMPONENT_BACKGROUND_LIGHT, defaultStyleValue, @@ -1016,6 +1015,29 @@ export const dvMainStore = defineStore('dataVisualization', { useEmitt().emitter.emit('query-data-' + viewId) }) }, + addWebParamsFilter(params, curComponentData = this.componentData) { + if (params) { + for (let index = 0; index < curComponentData.length; index++) { + const element = curComponentData[index] + if (['UserView'].includes(element.component)) { + this.trackWebFilterCursor(element, params) + this.componentData[index] = element + } else if (element.component === 'Group') { + element.propValue.forEach((groupItem, index) => { + this.trackWebFilterCursor(groupItem, params) + element.propValue[index] = groupItem + }) + } else if (element.component === 'DeTabs') { + element.propValue.forEach(tabItem => { + tabItem.componentData.forEach((tabComponent, index) => { + this.trackWebFilterCursor(tabComponent, params) + tabItem.componentData[index] = tabComponent + }) + }) + } + } + } + }, // 添加外部参数的过滤条件 addOuterParamsFilter(paramsPre, curComponentData = this.componentData, source = 'inner') { // params 结构 {key1:value1,key2:value2} @@ -1087,6 +1109,13 @@ export const dvMainStore = defineStore('dataVisualization', { } } }, + trackWebFilterCursor(element, params) { + if (params[element.id]) { + const currentFilters = [] + currentFilters.push(params[element.id]) + element['webParamsFilters'] = currentFilters + } + }, trackOuterFilterCursor(element, params, preActiveComponentIds, trackInfo, source) { // 弹窗区域禁用时 在弹窗区域的组件不生效 if ( diff --git a/core/core-frontend/src/views/dashboard/index.vue b/core/core-frontend/src/views/dashboard/index.vue index db148aada2..f0aef8a539 100644 --- a/core/core-frontend/src/views/dashboard/index.vue +++ b/core/core-frontend/src/views/dashboard/index.vue @@ -182,6 +182,7 @@ onMounted(async () => { } }) window.addEventListener('storage', eventCheck) + window.addEventListener('message', winMsgHandle) const resourceId = embeddedStore.resourceId || router.currentRoute.value.query.resourceId const pid = embeddedStore.pid || router.currentRoute.value.query.pid const opt = embeddedStore.opt || router.currentRoute.value.query.opt @@ -251,8 +252,24 @@ onMounted(async () => { } }) +// 目标校验: 需要校验targetSourceId 是否是当前可视化资源ID +const winMsgHandle = event => { + const msgInfo = event.data + if (msgInfo?.targetSourceId === dvInfo.value.id + '') + if (msgInfo.type === 'webParams') { + // 网络消息处理 + winMsgWebParamsHandle(msgInfo) + } +} + +const winMsgWebParamsHandle = msgInfo => { + const params = msgInfo.params + dvMainStore.addWebParamsFilter(params) +} + onUnmounted(() => { window.removeEventListener('storage', eventCheck) + window.removeEventListener('message', winMsgHandle) }) diff --git a/core/core-frontend/src/views/data-visualization/index.vue b/core/core-frontend/src/views/data-visualization/index.vue index 9bf8abb45d..694cfbbe97 100644 --- a/core/core-frontend/src/views/data-visualization/index.vue +++ b/core/core-frontend/src/views/data-visualization/index.vue @@ -336,6 +336,20 @@ const checkPer = async resourceId => { await interactiveStore.setInteractive(request) return check(wsCache.get('screen-weight'), resourceId, 4) } +// 目标校验: 需要校验targetSourceId 是否是当前可视化资源ID +const winMsgHandle = event => { + const msgInfo = event.data + if (msgInfo?.targetSourceId === dvInfo.value.id + '') + if (msgInfo.type === 'webParams') { + // 网络消息处理 + winMsgWebParamsHandle(msgInfo) + } +} + +const winMsgWebParamsHandle = msgInfo => { + const params = msgInfo.params + dvMainStore.addWebParamsFilter(params) +} const loadFinish = ref(false) const newWindowFromDiv = ref(false) @@ -349,6 +363,7 @@ onMounted(async () => { await new Promise(r => (p = r)) loadFinish.value = true window.addEventListener('blur', releaseAttachKey) + window.addEventListener('message', winMsgHandle) if (editMode.value === 'edit') { window.addEventListener('storage', eventCheck) } diff --git a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/ChartExtRequest.java b/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/ChartExtRequest.java index 19d55a89a5..8b8f3e8537 100644 --- a/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/ChartExtRequest.java +++ b/sdk/extensions/extensions-view/src/main/java/io/dataease/extensions/view/dto/ChartExtRequest.java @@ -16,6 +16,8 @@ public class ChartExtRequest { private List outerParamsFilters; + private List webParamsFilters; + private List drill; private String queryFrom;