diff --git a/core/core-frontend/src/viewsnew/data-visualization/PreviewCanvas.vue b/core/core-frontend/src/viewsnew/data-visualization/PreviewCanvas.vue index e85f462..6d1af1a 100644 --- a/core/core-frontend/src/viewsnew/data-visualization/PreviewCanvas.vue +++ b/core/core-frontend/src/viewsnew/data-visualization/PreviewCanvas.vue @@ -17,6 +17,8 @@ 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' +import CanvasOptBar from '@/components/visualization/CanvasOptBar.vue' const routeWatch = useRoute() const dvMainStore = dvMainStoreWithOut() @@ -31,7 +33,12 @@ const state = reactive({ dvInfo: null, curPreviewGap: 0, initState: true, - showPosition: null + editPreview: false, + showPosition: 'preview', + showOffset: { + top: 3, + left: 3 + } }) const props = defineProps({ @@ -57,7 +64,8 @@ const loadCanvasDataAsync = async (dvId, dvType, ignoreParams = false) => { sourceDvId: jumpParam.sourceDvId, sourceViewId: jumpParam.sourceViewId, sourceFieldId: null, - targetDvId: dvId + targetDvId: dvId, + resourceTable: state.editPreview ? 'snapshot' : 'core' } try { // 刷新跳转目标仪表板联动信息 @@ -111,34 +119,45 @@ const loadCanvasDataAsync = async (dvId, dvType, ignoreParams = false) => { await initCanvasData( dvId, - dvType, - function ({ + { busiFlag: dvType, resourceTable: state.editPreview ? 'snapshot' : 'core' }, + async function ({ canvasDataResult, canvasStyleResult, dvInfo, canvasViewInfoPreview, curPreviewGap }) { + state.dvInfo = dvInfo + if (state.dvInfo.status) { + if (jumpParam || (!ignoreParams && attachParam)) { + await filterEnumMapSync(canvasDataResult) + } + } state.canvasDataPreview = canvasDataResult state.canvasStylePreview = canvasStyleResult state.canvasViewInfoPreview = canvasViewInfoPreview - state.dvInfo = dvInfo + if (state.editPreview) { + state.dvInfo.status = 1 + } state.curPreviewGap = curPreviewGap - if (jumpParam) { - dvMainStore.addViewTrackFilter(jumpParam) - } - if (!ignoreParams) { - state.initState = false - dvMainStore.addOuterParamsFilter(attachParam) - state.initState = true + if (state.dvInfo.status) { + if (jumpParam) { + dvMainStore.addViewTrackFilter(jumpParam) + } + if (!ignoreParams) { + state.initState = false + dvMainStore.addOuterParamsFilter(attachParam) + state.initState = true + } } + if (props.publicLinkStatus) { // 设置浏览器title为当前仪表板名称 document.title = dvInfo.name setTitle(dvInfo.name) } initBrowserTimer() - nextTick(() => { + await nextTick(() => { onInitReady({ resourceId: dvId }) }) } @@ -165,7 +184,9 @@ watch( ) let p = null +let p1 = null const XpackLoaded = () => p(true) +const initIframe = () => p1(true) onMounted(async () => { useEmitt({ name: 'canvasDownload', @@ -173,14 +194,19 @@ onMounted(async () => { downloadH2(type) } }) - await new Promise(r => (p = r)) - const dvId = embeddedStore.dvId || router.currentRoute.value.query.dvId + await Promise.all([new Promise(r => (p = r)), new Promise(r => (p1 = r))]) + let dvId = embeddedStore.dvId || router.currentRoute.value.query.dvId + if (router.currentRoute.value.query.jumpInfoParam && router.currentRoute.value.query.dvId) { + dvId = router.currentRoute.value.query.dvId + } // 检查外部参数 const ignoreParams = router.currentRoute.value.query.ignoreParams === 'true' const isPopWindow = router.currentRoute.value.query.popWindow === 'true' const isFrameFlag = window.self !== window.top + state.editPreview = router.currentRoute.value.query.editPreview === 'true' dvMainStore.setIframeFlag(isFrameFlag) dvMainStore.setIsPopWindow(isPopWindow) + state.showPosition = state.editPreview ? 'edit-preview' : 'preview' const { dvType, callBackFlag, taskId, showWatermark } = router.currentRoute.value.query if (!!taskId) { dvMainStore.setCanvasAttachInfo({ taskId, showWatermark }) @@ -197,6 +223,11 @@ const dataVKeepSize = computed(() => { return state.canvasStylePreview?.screenAdaptor === 'keep' }) +const freezeStyle = computed(() => [ + { '--top-show-offset': state.showOffset.top }, + { '--left-show-offset': state.showOffset.left } +]) + defineExpose({ loadCanvasDataAsync }) @@ -208,7 +239,14 @@ defineExpose({ v-loading="!state.initState" :class="{ 'canvas_keep-size': dataVKeepSize }" ref="previewCanvasContainer" + :style="freezeStyle" > + + + diff --git a/core/core-frontend/src/viewsnew/data-visualization/index.vue b/core/core-frontend/src/viewsnew/data-visualization/index.vue index f732475..40097db 100644 --- a/core/core-frontend/src/viewsnew/data-visualization/index.vue +++ b/core/core-frontend/src/viewsnew/data-visualization/index.vue @@ -47,6 +47,7 @@ import { usePermissionStoreWithOut } from '@/store/modules/permission' import ChartStyleBatchSet from '@/views/chart/components/editor/editor-style/ChartStyleBatchSet.vue' import CustomTabsSort from '@/custom-component/de-tabs/CustomTabsSort.vue' import { useI18n } from '@/hooks/web/useI18n' +import { recoverToPublished } from '@/api/visualization/dataVisualization' const interactiveStore = interactiveStoreWithOut() const embeddedStore = useEmbedded() const { wsCache } = useCache() @@ -162,8 +163,8 @@ const contentStyle = computed(() => { } else { return { minWidth: '1600px', - width: width * 1.5 + 'px', - height: height * 1.5 + 'px' + width: width * scrollOffset.value + 'px', + height: height * scrollOffset.value + 'px' } } }) @@ -259,6 +260,8 @@ const initDataset = () => { }) } +const scrollOffset = computed(() => (canvasStyleData.value.scale < 150 ? 1.5 : 2)) + // 全局监听按键事件 listenGlobalKeyDown() @@ -268,8 +271,8 @@ const initScroll = () => { const { width, height } = canvasStyleData.value const mainWidth = canvasCenterRef.value.clientWidth mainHeight.value = canvasCenterRef.value.clientHeight - const scrollX = (1.5 * width - mainWidth) / 2 - const scrollY = (1.5 * height - mainHeight.value) / 2 + 20 + const scrollX = (scrollOffset.value * width - mainWidth) / 2 + const scrollY = (scrollOffset.value * height - mainHeight.value) / 2 + 20 // 设置画布初始滚动条位置 canvasOut.value.scrollTo(scrollX, scrollY) } @@ -290,31 +293,38 @@ const doUseCache = flag => { }, 2000) }) } else { - initLocalCanvasData() + initLocalCanvasData(() => { + // do init + }) wsCache.delete('DE-DV-CATCH-' + state.resourceId) } } -const initLocalCanvasData = async () => { +const initLocalCanvasData = async callback => { const { opt, sourcePid, resourceId } = state - const busiFlg = opt === 'copy' ? 'dataV-copy' : 'dataV' - await initCanvasData(resourceId, busiFlg, function () { - state.canvasInitStatus = true - // afterInit - nextTick(() => { - dvMainStore.setDataPrepareState(true) - snapshotStore.recordSnapshotCache('renderChart') - if (dvInfo.value && opt === 'copy') { - dvInfo.value.dataState = 'prepare' - dvInfo.value.optType = 'copy' - dvInfo.value.pid = sourcePid - setTimeout(() => { - snapshotStore.recordSnapshotCache('renderChart') - }, 1500) - } - onInitReady({ resourceId: resourceId }) - }) - }) + const busiFlag = opt === 'copy' ? 'dataV-copy' : 'dataV' + await initCanvasData( + resourceId, + { busiFlag, resourceTable: 'snapshot', source: 'main-edit' }, + function () { + state.canvasInitStatus = true + // afterInit + nextTick(() => { + dvMainStore.setDataPrepareState(true) + snapshotStore.recordSnapshotCache('renderChart') + if (dvInfo.value && opt === 'copy') { + dvInfo.value.dataState = 'prepare' + dvInfo.value.optType = 'copy' + dvInfo.value.pid = sourcePid + setTimeout(() => { + snapshotStore.recordSnapshotCache('renderChart') + }, 1500) + } + onInitReady({ resourceId: resourceId }) + callback && callback() + }) + } + ) } const previewScaleChange = () => { @@ -343,7 +353,7 @@ const checkPer = async resourceId => { if (!window.DataEaseBi || !resourceId) { return true } - const request = { busiFlag: 'dataV' } + const request = { busiFlag: 'dataV', resourceTable: 'core' } await interactiveStore.setInteractive(request) return check(wsCache.get('screen-weight'), resourceId, 4) } @@ -399,7 +409,9 @@ onMounted(async () => { if (canvasCache) { canvasCacheOutRef.value?.dialogInit({ canvasType: 'dataV', resourceId: dvId }) } else { - await initLocalCanvasData() + await initLocalCanvasData(() => { + // do init + }) } } else if (opt && opt === 'create') { state.canvasInitStatus = false @@ -496,6 +508,18 @@ const popComponentData = computed(() => componentData.value.filter(ele => ele.category && ele.category === 'hidden') ) +const doRecoverToPublished = () => { + recoverToPublished({ id: dvInfo.value.id, type: 'dataV', name: dvInfo.value.name }).then(() => { + state.resourceId = dvInfo.value.id + state.sourcePid = dvInfo.value.pid + state.opt = null + initLocalCanvasData(() => { + dvMainStore.updateDvInfoCall(1) + useEmitt().emitter.emit('calcData-all') + }) + }) +} + eventBus.on('handleNew', handleNew) eventBus.on('tabSort', tabSort) @@ -507,7 +531,7 @@ eventBus.on('tabSort', tabSort) class="dv-common-layout" :class="isDataEaseBi && !newWindowFromDiv && 'dataease-w-h'" > - +
@@ -671,7 +696,7 @@ eventBus.on('tabSort', tabSort) } .dv-common-layout { - height: calc(100vh - 1px); + height: 100vh; width: 100vw; overflow: hidden; color: @dv-canvas-main-font-color; @@ -771,4 +796,4 @@ eventBus.on('tabSort', tabSort) font-size: 12px; color: rgb(169, 175, 184); } - \ No newline at end of file +