<template>
|
<el-row class="main-frame">
|
<div v-if="element.frameLinks.src" class="main-frame">
|
<iframe
|
v-if="state.frameShow"
|
:id="'iframe-' + element.id"
|
:src="element.frameLinks.src"
|
scrolling="auto"
|
frameborder="0"
|
class="main-frame main-de-iframe"
|
/>
|
<div v-if="isEdit" class="frame-mask edit-mask">
|
<span style="opacity: 1">
|
<span style="font-weight: bold; color: lawngreen">{{
|
t('visualization.edit_web_tips')
|
}}</span>
|
</span>
|
</div>
|
<!--Here are three 15px wide masks(left top right) for easy clicking on the display jump button-->
|
<div v-if="isEdit" class="frame-mask preview-top-mask" />
|
<div v-if="isEdit" class="frame-mask preview-right-mask" />
|
<div v-if="isEdit" class="frame-mask preview-left-mask" />
|
<div v-if="screenShot" class="frame-mask" />
|
</div>
|
<div v-else class="info-class">
|
<span>{{ t('visualization.link_add_tips_pre') }}</span>
|
</div>
|
</el-row>
|
</template>
|
|
<script setup lang="ts">
|
import { nextTick, onMounted, reactive, toRefs } from 'vue'
|
import { useEmitt } from '@/hooks/web/useEmitt'
|
import { useI18n } from '@/hooks/web/useI18n'
|
|
const { t } = useI18n()
|
|
const props = defineProps({
|
propValue: {
|
type: String,
|
require: true
|
},
|
element: {
|
type: Object
|
},
|
isEdit: {
|
type: Boolean,
|
require: false,
|
default: true
|
},
|
active: {
|
type: Boolean,
|
require: false,
|
default: false
|
},
|
screenShot: {
|
type: Boolean,
|
default: false
|
}
|
})
|
|
const { element, isEdit, screenShot } = toRefs(props)
|
|
const state = reactive({
|
pOption: {},
|
frameShow: true
|
})
|
|
const frameLinksChange = () => {
|
state.frameShow = false
|
nextTick(() => {
|
state.frameShow = true
|
})
|
}
|
|
onMounted(() => {
|
useEmitt({
|
name: 'frameLinksChange-' + element.value.id,
|
callback: function () {
|
frameLinksChange()
|
}
|
})
|
})
|
</script>
|
|
<style lang="less" scoped>
|
.info-class {
|
text-align: center;
|
width: 100%;
|
height: 100%;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
background-color: rgba(255, 255, 255, 0.3);
|
font-size: 12px;
|
color: #9ea6b2;
|
}
|
|
.main-frame {
|
height: 100%;
|
width: 100%;
|
}
|
|
.frame-mask {
|
display: flex;
|
opacity: 0.5;
|
position: absolute;
|
top: 0px;
|
z-index: 1;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
}
|
|
.edit-mask {
|
left: 0px;
|
background-color: #5c5e61;
|
height: 100% !important;
|
width: 100% !important;
|
}
|
|
.preview-top-mask {
|
left: 0px;
|
height: 15px !important;
|
width: 100% !important;
|
}
|
|
.preview-right-mask {
|
right: 0px;
|
height: 100% !important;
|
width: 15px !important;
|
}
|
|
.preview-left-mask {
|
left: 0px;
|
height: 100% !important;
|
width: 15px !important;
|
}
|
</style>
|