feat(仪表板): iframe嵌入支持外部参数变动

This commit is contained in:
wangjiahao 2024-05-21 18:16:50 +08:00
parent 1f652335cd
commit 515f44eeb3

View File

@ -1,6 +1,6 @@
<script setup lang="ts">
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
import { onMounted, reactive } from 'vue'
import { onMounted, reactive, computed, onUnmounted } from 'vue'
import DePreview from '@/components/data-visualization/canvas/DePreview.vue'
import router from '@/router'
import { initCanvasData } from '@/utils/canvasUtils'
@ -10,6 +10,9 @@ import { getOuterParamsInfo } from '@/api/visualization/outerParams'
import { ElMessage } from 'element-plus-secondary'
import { useI18n } from '@/hooks/web/useI18n'
import { XpackComponent } from '@/components/plugin'
import { useAppStoreWithOut } from '@/store/modules/app'
const appStore = useAppStoreWithOut()
const dvMainStore = dvMainStoreWithOut()
const { t } = useI18n()
const state = reactive({
@ -29,9 +32,19 @@ const props = defineProps({
isSelector: {
type: Boolean,
default: false
},
// JSON String
embedParams: {
type: String,
required: false
}
})
// div
const isDataEaseBi = computed(() => appStore.getIsDataEaseBi)
// iframe
const isIframe = computed(() => appStore.getIsIframe)
const loadCanvasDataAsync = async (dvId, dvType) => {
const { jumpInfoParam } = router.currentRoute.value.query
let jumpParam
@ -55,14 +68,26 @@ const loadCanvasDataAsync = async (dvId, dvType) => {
}
//
const attachParamsEncode = router.currentRoute.value.query.attachParams
let attachParam
await getOuterParamsInfo(dvId).then(rsp => {
dvMainStore.setNowPanelOuterParamsInfo(rsp.data)
})
// iframe iframe
const attachParamsEncode = router.currentRoute.value.query.attachParams
if (attachParamsEncode) {
try {
attachParam = JSON.parse(Base64.decode(decodeURIComponent(attachParamsEncode)))
await getOuterParamsInfo(dvId).then(rsp => {
dvMainStore.setNowPanelOuterParamsInfo(rsp.data)
})
} catch (e) {
console.error(e)
ElMessage.error(t('visualization.outer_param_decode_error'))
}
}
// div
if (props.embedParams && isDataEaseBi.value) {
try {
attachParam = JSON.parse(props.embedParams)
} catch (e) {
console.error(e)
ElMessage.error(t('visualization.outer_param_decode_error'))
@ -97,6 +122,16 @@ const loadCanvasDataAsync = async (dvId, dvType) => {
}
)
}
const winMsgHandel = event => {
const msgInfo = JSON.parse(event.data.info)
if (msgInfo.type === 'attachParams') {
const attachParam = msgInfo.params
if (attachParam) {
dvMainStore.addOuterParamsFilter(attachParam)
}
}
}
let p = null
const XpackLoaded = () => p(true)
onMounted(async () => {
@ -107,7 +142,13 @@ onMounted(async () => {
return
}
dvMainStore.setPublicLinkStatus(props.publicLinkStatus)
window.addEventListener('embedParamsMessage', winMsgHandel)
})
onUnmounted(() => {
window.removeEventListener('embedParamsMessage', winMsgHandel)
})
defineExpose({
loadCanvasDataAsync
})