From 39adf31696d9e3589388f71e55d65bf7481f6e9d Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Wed, 22 May 2024 18:32:57 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E5=9B=BE=E8=A1=A8):=20=E5=B5=8C=E5=85=A5?= =?UTF-8?q?=E5=BC=8F=E5=A4=A7=E5=B1=8F=E3=80=81=E5=9B=BE=E8=A1=A8=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=90=91=E5=A4=96=E9=83=A8=E7=B3=BB=E7=BB=9F=E4=BC=A0?= =?UTF-8?q?=E5=8F=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/panel/DashboardPreview.vue | 4 ++- .../src/pages/panel/ViewWrapper.vue | 4 ++- .../modules/data-visualization/dvMain.ts | 4 +++ .../views/components/ChartComponentG2Plot.vue | 32 +++++++++++++++++-- .../views/components/ChartComponentS2.vue | 25 +++++++++++++-- .../views/chart/components/views/index.vue | 21 ++++++++++++ .../data-visualization/PreviewCanvas.vue | 3 +- 7 files changed, 84 insertions(+), 9 deletions(-) diff --git a/core/core-frontend/src/pages/panel/DashboardPreview.vue b/core/core-frontend/src/pages/panel/DashboardPreview.vue index 61571aca40..6ac5e941e1 100644 --- a/core/core-frontend/src/pages/panel/DashboardPreview.vue +++ b/core/core-frontend/src/pages/panel/DashboardPreview.vue @@ -47,7 +47,9 @@ onBeforeMount(async () => { // div嵌入 if (embeddedStore.outerParams) { try { - attachParam = JSON.parse(embeddedStore.outerParams) + const outerPramsParse = JSON.parse(embeddedStore.outerParams) + attachParam = outerPramsParse.attachParam + dvMainStore.setEmbeddedCallBack(outerPramsParse.callBackFlag || 'no') } catch (e) { console.error(e) ElMessage.error(t('visualization.outer_param_decode_error')) diff --git a/core/core-frontend/src/pages/panel/ViewWrapper.vue b/core/core-frontend/src/pages/panel/ViewWrapper.vue index 742aa4063f..420879cfc2 100644 --- a/core/core-frontend/src/pages/panel/ViewWrapper.vue +++ b/core/core-frontend/src/pages/panel/ViewWrapper.vue @@ -66,7 +66,9 @@ onBeforeMount(async () => { // div嵌入 if (embeddedStore.outerParams) { try { - attachParam = JSON.parse(embeddedStore.outerParams) + const outerPramsParse = JSON.parse(embeddedStore.outerParams) + attachParam = outerPramsParse.attachParam + dvMainStore.setEmbeddedCallBack(outerPramsParse.callBackFlag || 'no') } catch (e) { console.error(e) ElMessage.error(t('visualization.outer_param_decode_error')) 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 d584faf0a2..4367d1de5a 100644 --- a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts +++ b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts @@ -32,6 +32,7 @@ export const dvMainStore = defineStore('dataVisualization', { chartAreaCollapse: false, datasetAreaCollapse: false }, + embeddedCallBack: 'no', // 嵌入模式是否允许反馈参数 editMode: 'edit', // 编辑器模式 edit preview mobileInPc: false, firstLoadMap: [], @@ -173,6 +174,9 @@ export const dvMainStore = defineStore('dataVisualization', { } }, actions: { + setEmbeddedCallBack(value) { + this.embeddedCallBack = value + }, setPublicLinkStatus(value) { this.publicLinkStatus = value }, diff --git a/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue b/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue index 947620c2f5..8005f1125c 100644 --- a/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue +++ b/core/core-frontend/src/views/chart/components/views/components/ChartComponentG2Plot.vue @@ -19,7 +19,8 @@ import { trackBarStyleCheck } from '@/utils/canvasUtils' import { useEmitt } from '@/hooks/web/useEmitt' const dvMainStore = dvMainStoreWithOut() -const { nowPanelTrackInfo, nowPanelJumpInfo, mobileInPc } = storeToRefs(dvMainStore) +const { nowPanelTrackInfo, nowPanelJumpInfo, mobileInPc, embeddedCallBack } = + storeToRefs(dvMainStore) const { emitter } = useEmitt() const props = defineProps({ element: { @@ -54,7 +55,13 @@ const props = defineProps({ } }) -const emit = defineEmits(['onChartClick', 'onDrillFilters', 'onJumpClick', 'resetLoading']) +const emit = defineEmits([ + 'onPointClick', + 'onChartClick', + 'onDrillFilters', + 'onJumpClick', + 'resetLoading' +]) const { view, showPosition, scale, terminal } = toRefs(props) @@ -193,9 +200,17 @@ const renderL7Plot = async (chart: ChartObj, chartView: L7PlotChartView { + if (embeddedCallBack.value === 'yes') { + trackClick('pointClick') + } +} + const action = param => { - // 下钻 联动 跳转 state.pointParam = param.data + // 点击 + pointClickTrans() + // 下钻 联动 跳转 state.linkageActiveParam = { category: state.pointParam.data.category ? state.pointParam.data.category : 'NO_DATA', name: state.pointParam.data.name ? state.pointParam.data.name : 'NO_DATA' @@ -247,7 +262,18 @@ const trackClick = trackAction => { quotaList: quotaList } + const clickParams = { + option: 'pointClick', + name: checkName, + viewId: view.value.id, + dimensionList: state.pointParam.data.dimensionList, + quotaList: quotaList + } + switch (trackAction) { + case 'pointClick': + emit('onPointClick', clickParams) + break case 'linkageAndDrill': dvMainStore.addViewTrackFilter(linkageParam) emit('onChartClick', param) diff --git a/core/core-frontend/src/views/chart/components/views/components/ChartComponentS2.vue b/core/core-frontend/src/views/chart/components/views/components/ChartComponentS2.vue index 6fc89da2db..b30ceff9e3 100644 --- a/core/core-frontend/src/views/chart/components/views/components/ChartComponentS2.vue +++ b/core/core-frontend/src/views/chart/components/views/components/ChartComponentS2.vue @@ -29,7 +29,7 @@ import { useEmitt } from '@/hooks/web/useEmitt' import { trackBarStyleCheck } from '@/utils/canvasUtils' const dvMainStore = dvMainStoreWithOut() -const { nowPanelTrackInfo, nowPanelJumpInfo, mobileInPc, canvasStyleData } = +const { nowPanelTrackInfo, nowPanelJumpInfo, mobileInPc, canvasStyleData, embeddedCallBack } = storeToRefs(dvMainStore) const { emitter } = useEmitt() @@ -66,7 +66,7 @@ const props = defineProps({ } }) -const emit = defineEmits(['onChartClick', 'onDrillFilters', 'onJumpClick']) +const emit = defineEmits(['onPointClick', 'onChartClick', 'onDrillFilters', 'onJumpClick']) const { view, showPosition, scale, terminal } = toRefs(props) @@ -241,10 +241,17 @@ const handleCurrentChange = pageNum => { const chart = { ...view.value, chartExtRequest: extReq } calcData(chart, null, false) } +const pointClickTrans = () => { + if (embeddedCallBack.value === 'yes') { + trackClick('pointClick') + } +} const action = param => { - // 下钻 联动 跳转 state.pointParam = param + // 点击 + pointClickTrans() + // 下钻 联动 跳转 if (trackMenu.value.length < 2) { // 只有一个事件直接调用 trackClick(trackMenu.value[0]) @@ -284,7 +291,19 @@ const trackClick = trackAction => { quotaList: state.pointParam.data.quotaList, sourceType: state.pointParam.data.sourceType } + + const clickParams = { + option: 'pointClick', + name: state.pointParam.data.name, + viewId: view.value.id, + dimensionList: state.pointParam.data.dimensionList, + quotaList: state.pointParam.data.quotaList + } + switch (trackAction) { + case 'pointClick': + emit('onPointClick', clickParams) + break case 'linkageAndDrill': dvMainStore.addViewTrackFilter(linkageParam) emit('onChartClick', param) diff --git a/core/core-frontend/src/views/chart/components/views/index.vue b/core/core-frontend/src/views/chart/components/views/index.vue index 2a4f42d3cf..faa80a1801 100644 --- a/core/core-frontend/src/views/chart/components/views/index.vue +++ b/core/core-frontend/src/views/chart/components/views/index.vue @@ -38,6 +38,7 @@ import { Base64 } from 'js-base64' import DeRichTextView from '@/custom-component/rich-text/DeRichTextView.vue' import ChartEmptyInfo from '@/views/chart/components/views/components/ChartEmptyInfo.vue' import { snapshotStoreWithOut } from '@/store/modules/data-visualization/snapshot' +import { useAppStoreWithOut } from '@/store/modules/app' const { wsCache } = useCache() const chartComponent = ref() @@ -45,6 +46,9 @@ const { t } = useI18n() const dvMainStore = dvMainStoreWithOut() let innerRefreshTimer = null +const appStore = useAppStoreWithOut() +const isDataEaseBi = computed(() => appStore.getIsDataEaseBi) +const isIframe = computed(() => appStore.getIsIframe) const { nowPanelJumpInfo, publicLinkStatus, dvInfo, curComponent, canvasStyleData, mobileInPc } = storeToRefs(dvMainStore) @@ -277,6 +281,21 @@ const drillJump = (index: number) => { calcData(view.value) } +const onPointClick = param => { + try { + console.info('de_inner_params send') + const msg = { + type: 'de_inner_params', + sourceDvId: dvInfo.value.id, + sourceViewId: view.value.id, + message: Base64.encode(param) + } + window.parent.postMessage(msg, '*') + } catch (e) { + console.warn('de_inner_params send error') + } +} + const chartClick = param => { // 下钻字段第一个没有在维度中不允许下钻 const xIds = view.value.xAxis.map(ele => ele.id) @@ -691,6 +710,7 @@ const titleIconStyle = computed(() => { v-else-if="showChartView(ChartLibraryType.G2_PLOT, ChartLibraryType.L7_PLOT)" ref="chartComponent" @onChartClick="chartClick" + @onPointClick="onPointClick" @onDrillFilters="onDrillFilters" @onJumpClick="jumpClick" @resetLoading="() => (loading = false)" @@ -702,6 +722,7 @@ const titleIconStyle = computed(() => { :element="element" v-else-if="showChartView(ChartLibraryType.S2)" ref="chartComponent" + @onPointClick="onPointClick" @onChartClick="chartClick" @onDrillFilters="onDrillFilters" @onJumpClick="jumpClick" diff --git a/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue b/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue index 6f74804593..34de144b89 100644 --- a/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue +++ b/core/core-frontend/src/views/data-visualization/PreviewCanvas.vue @@ -105,11 +105,12 @@ let p = null const XpackLoaded = () => p(true) onMounted(async () => { await new Promise(r => (p = r)) - const { dvId, dvType } = router.currentRoute.value.query + const { dvId, dvType, callBackFlag } = router.currentRoute.value.query if (dvId) { loadCanvasDataAsync(dvId, dvType) return } + dvMainStore.setEmbeddedCallBack(callBackFlag || 'no') dvMainStore.setPublicLinkStatus(props.publicLinkStatus) })