<template> <div> <el-dialog :id='elId' :title="configData.title" :visible="visible" :width="configData.width" @open='handleOpen' :fullscreen='configData.fullscreen' :append-to-body="true" :before-close="handleClose"> <slot name="body"></slot> <slot name="footer"></slot> </el-dialog> <jsoneditor v-model='jsoneditorVisible' :elInfo='elInfo' :layout='layout' :jsoneditorCloseAfter='jsoneditorCloseAfter' :jsoneditorOpenAfter='jsoneditorOpenAfter' > </jsoneditor> </div> </template> <script> import ucComponent from '../ucClass/uc_component' import jsoneditor from '../common/jsoneditor' export default { mixins: [ucComponent], components: { jsoneditor }, name: 'hs-dialog', props: { visible: {}, allSourceData: { type: Object, default() { return {} } }, elInfo: { type: Object, default() { return {} } }, value: '', layout: {}, jsoneditorCloseAfter: { type: Function }, jsoneditorOpenAfter: { type: Function } }, watch: { allSourceData: { handler: function(newVal, oldVal) { const { config } = newVal this.initConfig(config) }, deep: true }, value(val) { this.value_inner = val }, value_inner(val) { this.$emit('input', val) } }, data() { return { elId: '', value_inner: '', jsoneditorVisible: false, sourceData: [], configData: { title: 'test', width: '80%' } } }, mounted() { this.$nextTick(() => { const { config, sourceData } = this.allSourceData this.sourceData = sourceData this.initConfig(config) }) }, methods: { exectAction(action) { const type = typeof action if (type === 'function') { action(this.value, this.writeBackObject) } }, handleClose() { const { close } = this.configData if (close) { this.exectAction(close) } this.$emit('close') }, handleOpen() { this.$emit('open') }, initConfig(config = {}) { this.configData = Object.assign(this.configData, config) } } } </script> <style scoped> .hsInputBox{ padding: 1px; width:100%; height:100%; display: flex; } .inputCurr{ display: flex; justify-content: center; align-items: center; } </style>