<template>
  <div class="hsControlBoxOut" :id='elId'>
     <div class="hsControlBoxInner">
          <el-switch
            v-model="value_inner"
            :active-text="configData.activeText"
            :inactive-text="configData.inactiveText"
            @change='change'
            :disabled='disabled'
            >
          </el-switch>
     </div>
    <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: 'hsSwitch',
  props: {
    disabled: {
      type: Boolean,
      default: false
    },
    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) {
      // 只接受0、1、true、false
      if (typeof val === 'boolean') {
        this.value_inner = val
      } else {
        this.value_inner = !!Number(val)
      }
    },
    value_inner(val) {
      if (typeof this.value === 'boolean') {
        this.$emit('input', val)
      } else {
        let v = val
        if (typeof this.value === 'string') {
          v = Number(val) + ''
        } else {
          v = Number(val)
        }
        this.$emit('input', v)
      }
    }
  },
  data() {
    return {
      elId: '',
      value_inner: false,
      jsoneditorVisible: false,
      sourceData: [],
      configData: {
      }
    }
  },
  mounted() {
    this.$nextTick(() => {
      const { config, sourceData } = this.allSourceData
      this.sourceData = sourceData
      this.initConfig(config)
      if (typeof this.value === 'boolean') {
        this.value_inner = this.value
      } else {
        this.value_inner = !!Number(this.value)
      }
    })
  },
  methods: {
    change(val) {
    },
    initConfig(config = {}) {
      this.configData = Object.assign(this.configData, config)
    }
  }
}
</script>
<style scoped>
.hsControlBoxOut{
  padding: 1px;
  width:100%;
  height:100%;
  display: flex;
  box-sizing:border-box;
}

.hsControlBoxInner{
  display: flex;
  justify-content: center;
  align-items: center;
}
</style>
