<template> <div class="hsInputBox" :id='elId'> <div class="treeBox"> <el-tree node-key="label" :default-checked-keys="defaultCheckedkeys" :default-expanded-keys="defaultCheckedkeys" :data="sourceData" :props="configData.defaultProps" @node-click="handleNodeClick"></el-tree> </div> <jsoneditor v-model='jsoneditorVisible' :elInfo='elInfo' :layout='layout' :jsoneditorData='jsoneditorData' :jsoneditorCloseAfter='jsoneditorCloseAfter' :jsoneditorOpenAfter='jsoneditorOpenAfter' > </jsoneditor> </div> </template> <script> import ucComponent from '../ucClass/uc_component' import uuidv1 from 'uuid/v1' import jsoneditor from '../common/jsoneditor' export default { mixins: [ucComponent], components: { jsoneditor }, name: 'hsTree', props: { allSourceData: { type: Object, default() { return {} } }, elInfo: { type: Object, default() { return {} } }, value: '', layout: {}, jsoneditorCloseAfter: { type: Function }, jsoneditorOpenAfter: { type: Function } }, watch: { allSourceData: { handler: function(newVal, oldVal) { this.initDataConfig(newVal) }, deep: true }, value(val) { this.value_inner = val }, value_inner(val) { this.$emit('input', val) } }, data() { return { elId: '', value_inner: '', jsoneditorVisible: false, jsoneditorData: {}, title: '', placeholder: '', size: 'mini', sourceData: [], configData: { defaultProps: { children: 'children', label: 'label' } }, defaultCheckedkeys: [] } }, created() { this.elId = uuidv1() // 获取随机id }, mounted() { this.initDataConfig(this.allSourceData) }, methods: { handleNodeClick(data) { const obj = { elInfo: this.elInfo, data } this.$emit('input', data.label) this.$emit('handleNodeClick', obj) }, initDataConfig(data) { const { config, sourceData } = data this.sourceData = sourceData Object.assign(this.configData, config) this.defaultCheckedkeys = [this.value_inner] }, submitInput(val) { const parm = {} parm[this.elInfo.prop] = this.value_inner this.$emit('enterInput', parm) } } } </script> <style scoped> .hsInputBox{ padding: 1px; width:100%; height:100%; display: flex; } .treeBox{ width: 100%; height: 100%; border: 1px solid #ddd; } </style>