typescriptvuenocodevue3drag-and-dropvitelowcodetsxlow-codevuex4vue-router4designdraggableelement-pluselement-uimonaco-editortsvant-uidemo
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.8 KiB
88 lines
1.8 KiB
<template>
|
|
<el-dialog v-model="dialogVisible" custom-class="h5-preview" :show-close="false" width="360px">
|
|
<iframe
|
|
style="width: 360px; height: 640px"
|
|
:src="`${BASE_URL}preview/#/`"
|
|
frameborder="0"
|
|
scrolling="auto"
|
|
></iframe>
|
|
</el-dialog>
|
|
</template>
|
|
|
|
<script lang="tsx">
|
|
import { defineComponent, reactive, watch, toRefs } from 'vue'
|
|
import { useVModel } from '@vueuse/core'
|
|
import { cloneDeep } from 'lodash'
|
|
import { BASE_URL } from '@/visual-editor/utils'
|
|
/**
|
|
* @name: preview
|
|
* @author: 卜启缘
|
|
* @date: 2021/4/29 23:09
|
|
* @description:preview
|
|
* @update: 2021/4/29 23:09
|
|
*/
|
|
export default defineComponent({
|
|
name: 'Preview',
|
|
props: {
|
|
visible: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
},
|
|
emits: ['update:visible'],
|
|
setup(props, { emit }) {
|
|
const state = reactive({
|
|
dialogVisible: useVModel(props, 'visible', emit),
|
|
jsonDataClone: cloneDeep(props.jsonData)
|
|
})
|
|
|
|
watch(
|
|
() => state.dialogVisible,
|
|
(val) => {
|
|
if (val) {
|
|
state.jsonDataClone = cloneDeep(props.jsonData)
|
|
}
|
|
}
|
|
)
|
|
|
|
const renderCom = (element) => {
|
|
if (Array.isArray(element)) {
|
|
return element.map((item) => renderCom(item))
|
|
}
|
|
const component = props.config.componentMap[element.componentKey]
|
|
|
|
return component.render({
|
|
size: {},
|
|
props: element.props || {},
|
|
block: element,
|
|
model: {},
|
|
custom: {}
|
|
})
|
|
}
|
|
|
|
return {
|
|
...toRefs(state),
|
|
BASE_URL,
|
|
renderCom
|
|
}
|
|
}
|
|
})
|
|
</script>
|
|
|
|
<style lang="scss">
|
|
.h5-preview {
|
|
overflow: hidden;
|
|
.el-dialog__body {
|
|
padding: 0;
|
|
}
|
|
.el-dialog__header {
|
|
display: none;
|
|
}
|
|
.simulator {
|
|
padding-right: 0;
|
|
&::-webkit-scrollbar {
|
|
width: 0;
|
|
}
|
|
}
|
|
}
|
|
</style>
|
|
|