index.vue 2.73 KB
Newer Older
何虹's avatar
何虹 committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
<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>