<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>
