From 9181b3b416c2db2f1e1f5d3deda3388b5e6cbb40 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Mon, 10 Mar 2025 11:18:11 +0800 Subject: [PATCH] =?UTF-8?q?fix(=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=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E5=9B=A0=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=E5=92=8C=E9=80=89=E6=8B=A9=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E4=B8=8D=E4=B8=80=E8=87=B4=E5=AF=BC=E8=87=B4=E8=B7=B3=E8=BD=AC?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E4=B8=8E=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E7=9A=84=E5=9B=BE=E8=A1=A8=E8=BF=87=E6=BB=A4=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/data-visualization/dvMain.ts | 35 ++++++++-------- .../core-frontend/src/utils/componentUtils.ts | 40 +++++++++++++++---- .../data-visualization/PreviewCanvas.vue | 12 +++--- .../PreviewCanvasMobile.vue | 12 +++--- 4 files changed, 62 insertions(+), 37 deletions(-) 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 a6f99261ae..d45777bcf6 100644 --- a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts +++ b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts @@ -25,7 +25,7 @@ import { viewFieldTimeTrans } from '@/utils/viewUtils' import { useAppearanceStoreWithOut } from '@/store/modules/appearance' import { ElMessage } from 'element-plus-secondary' import { useI18n } from '@/hooks/web/useI18n' -import { filterEnumMap } from '@/utils/componentUtils' +import { filterEnumParams } from '@/utils/componentUtils' const { t } = useI18n() export const dvMainStore = defineStore('dataVisualization', { @@ -1314,19 +1314,19 @@ export const dvMainStore = defineStore('dataVisualization', { }) } }, - async trackFilterCursor(element, checkQDList, trackInfo, preActiveComponentIds, viewId) { + trackFilterCursor(element, checkQDList, trackInfo, preActiveComponentIds, viewId) { let currentFilters = element.linkageFilters || [] // 当前联动filter if (['table-info', 'table-normal'].includes(element.innerType)) { currentFilters = [] } // 联动的图表情况历史条件 // const currentFilters = [] - for (const QDItem of checkQDList) { + checkQDList.forEach(QDItem => { const sourceInfo = viewId + '#' + QDItem.id // 获取所有目标联动信息 const targetInfoList = trackInfo[sourceInfo] || [] const paramValue = [QDItem.value] - for (const targetInfo of targetInfoList) { + targetInfoList.forEach(targetInfo => { const targetInfoArray = targetInfo.split('#') const targetViewId = targetInfoArray[0] // 目标图表 if (element.component === 'UserView' && element.id === targetViewId) { @@ -1365,25 +1365,22 @@ export const dvMainStore = defineStore('dataVisualization', { preActiveComponentIds.includes(element.id) || preActiveComponentIds.push(element.id) } if (element.component === 'VQuery') { - for (const filterItem of element.propValue) { - const { optionValueSource, field, displayId } = filterItem + element.propValue.forEach(filterItem => { if (filterItem.id === targetViewId) { let queryParams = paramValue if (!['1', '7'].includes(filterItem.displayType)) { // 查询组件除了时间组件 其他入参只支持文本 这里全部转为文本 queryParams = paramValue.map(number => String(number)) } - // 当前是选择数据集模式,可能出现展示字段和选择字段不同的情况 这里需要兼容 - if (optionValueSource === 1 && field.id) { - queryParams = await filterEnumMap(queryParams, { - queryId: field.id, - displayId, - searchText: '' - }) - } filterItem.defaultValueCheck = true filterItem.timeType = 'fixed' if (['0', '2'].includes(filterItem.displayType)) { + const { optionValueSource, field, displayId } = filterItem + const queryMapFlag = optionValueSource === 1 && field.id !== displayId + let queryMapParams = queryParams + if (queryMapFlag) { + queryMapParams = filterEnumParams(queryParams, field.id) + } // 0 文本类型 1 数字类型 if (filterItem.multiple) { // multiple === true 多选 @@ -1394,8 +1391,8 @@ export const dvMainStore = defineStore('dataVisualization', { filterItem['selectValue'] = queryParams[0] filterItem['defaultValue'] = queryParams[0] } - filterItem['defaultMapValue'] = queryParams - filterItem['mapValue'] = queryParams + filterItem['defaultMapValue'] = queryMapParams + filterItem['mapValue'] = queryMapParams } else if (filterItem.displayType === '1') { // 1 时间类型 filterItem['selectValue'] = queryParams[0] @@ -1416,10 +1413,10 @@ export const dvMainStore = defineStore('dataVisualization', { filterItem['defaultConditionValueF'] = queryParams[0] } } - } + }) } - } - } + }) + }) element.linkageFilters = currentFilters }, diff --git a/core/core-frontend/src/utils/componentUtils.ts b/core/core-frontend/src/utils/componentUtils.ts index ae96d06f5c..0ab835c1a6 100644 --- a/core/core-frontend/src/utils/componentUtils.ts +++ b/core/core-frontend/src/utils/componentUtils.ts @@ -1,20 +1,44 @@ import { EnumValue, enumValueObj } from '@/api/dataset' +let filterEnumMap = {} + const findFilterEnum = async (val: EnumValue) => { const queryId = val.queryId const displayId = val.displayId const arr = await enumValueObj({ queryId: queryId, displayId: displayId, searchText: '' }) return arr?.reduce((acc, item) => { - acc[item[queryId]] = item[displayId] + acc[item[displayId]] = item[queryId] return acc }, {}) } -export const filterEnumMap = async (queryParams, val: EnumValue) => { - const resultMap = await findFilterEnum(val) - const resultParams = [] - queryParams.forEach(param => { - resultParams.push(resultMap[param] || param) - }) - return resultParams +export const filterEnumParams = (queryParams, fieldId: string) => { + const resultMap = filterEnumMap[fieldId] + if (resultMap) { + const resultParams = [] + queryParams.forEach(param => { + resultParams.push(resultMap[param] || param) + }) + return resultParams + } else { + return queryParams + } +} + +export const filterEnumMapSync = async componentData => { + filterEnumMap = {} + for (const element of componentData) { + if (element.component === 'VQuery') { + for (const filterItem of element.propValue) { + const { optionValueSource, field, displayId } = filterItem + if (optionValueSource === 1 && field.id) { + filterEnumMap[field.id] = await findFilterEnum({ + queryId: field.id, + displayId, + searchText: '' + }) + } + } + } + } } diff --git a/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue b/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue index a384277ca3..638fcd5101 100644 --- a/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue +++ b/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue @@ -17,6 +17,7 @@ import { downloadCanvas2 } from '@/utils/imgUtils' import { isLink, setTitle } from '@/utils/utils' import EmptyBackground from '../../components/empty-background/src/EmptyBackground.vue' import { useRoute } from 'vue-router' +import { filterEnumMapSync } from '@/utils/componentUtils' const routeWatch = useRoute() const dvMainStore = dvMainStoreWithOut() @@ -112,21 +113,22 @@ const loadCanvasDataAsync = async (dvId, dvType, ignoreParams = false) => { await initCanvasData( dvId, dvType, - function ({ + async function ({ canvasDataResult, canvasStyleResult, dvInfo, canvasViewInfoPreview, curPreviewGap }) { + if (jumpParam) { + await filterEnumMapSync(canvasDataResult) + dvMainStore.addViewTrackFilter(jumpParam) + } state.canvasDataPreview = canvasDataResult state.canvasStylePreview = canvasStyleResult state.canvasViewInfoPreview = canvasViewInfoPreview state.dvInfo = dvInfo state.curPreviewGap = curPreviewGap - if (jumpParam) { - dvMainStore.addViewTrackFilter(jumpParam) - } if (!ignoreParams) { state.initState = false dvMainStore.addOuterParamsFilter(attachParam) @@ -138,7 +140,7 @@ const loadCanvasDataAsync = async (dvId, dvType, ignoreParams = false) => { setTitle(dvInfo.name) } initBrowserTimer() - nextTick(() => { + await nextTick(() => { onInitReady({ resourceId: dvId }) }) } diff --git a/core/core-frontend/src/views/data-visualization/PreviewCanvasMobile.vue b/core/core-frontend/src/views/data-visualization/PreviewCanvasMobile.vue index 435f218979..8517234185 100644 --- a/core/core-frontend/src/views/data-visualization/PreviewCanvasMobile.vue +++ b/core/core-frontend/src/views/data-visualization/PreviewCanvasMobile.vue @@ -14,6 +14,7 @@ import { XpackComponent } from '@/components/plugin' import { propTypes } from '@/utils/propTypes' import { setTitle } from '@/utils/utils' import EmptyBackground from '../../components/empty-background/src/EmptyBackground.vue' +import { filterEnumMapSync } from '@/utils/componentUtils' const dvMainStore = dvMainStoreWithOut() const { t } = useI18n() @@ -96,7 +97,7 @@ const loadCanvasDataAsync = async (dvId, dvType) => { req( dvId, dvType, - function ({ + async function ({ canvasDataResult, canvasStyleResult, dvInfo, @@ -104,17 +105,18 @@ const loadCanvasDataAsync = async (dvId, dvType) => { curPreviewGap }) { if (!dvInfo.mobileLayout && dvType === 'dashboard') { - router.push('/DashboardEmpty') + await router.push('/DashboardEmpty') return } + if (jumpParam) { + await filterEnumMapSync(canvasDataResult) + dvMainStore.addViewTrackFilter(jumpParam) + } state.canvasDataPreview = canvasDataResult state.canvasStylePreview = canvasStyleResult state.canvasViewInfoPreview = canvasViewInfoPreview state.dvInfo = dvInfo state.curPreviewGap = curPreviewGap - if (jumpParam) { - dvMainStore.addViewTrackFilter(jumpParam) - } state.initState = false dvMainStore.addOuterParamsFilter(attachParam)