<template>
  <el-input   v-storeModify :id="id" ref="form-item" v-model="model" v-bind="attrs" v-on="$listeners" v-bind:disabled="isDisable">
    <template v-slot:suffix>
      <slot name="suffix"></slot>
    </template>
  </el-input>
</template>

<script>
export default {
  inject: ["root"],
  props: {
    value: {
      type: [String, Number],
      default: undefined
    },
    disabled: {
      type: Boolean,
      default: false
    },
    id: {
      type: String,
      default: undefined
    }
  },
  directives:{
    storeModify:{
      bind(el,bind,vnode){
        el.onchange = (...args)=>{
          let _this = vnode.context
          let key = vnode.parent.data.model.expression
          let keyArray = key.split('.')
          let curKey =  keyArray.pop()
          let resultKey = keyArray.join(".")
          let deepData = _this.getProperty(resultKey,_this.root)
          if(deepData.modify){
            if(Array.isArray(deepData.modify)){
                if(deepData.modify.includes(curKey)){
                   return 
                } 
                deepData.modify.push(curKey)
            }
          } else {
            deepData.modify = [curKey]
          }
        }
      }
    }
  },
  computed: {
    model: {
      get () {
        return this.value
      },
      set (newVal) {
        this.$emit('input', newVal)
      }
    },
    mode () {
      return this.$store.state.Status.mode
    },
    isDisable: {
      get () {
        return this.mode === 'display' || this.disabled
      }
    },
    highlight () {
      return this.$store.state.Status.highlights.indexOf(this.id) !== -1
    },
    highlightChanges () {
      return this.$store.state.Status.highlightChanges.indexOf(this.id) !== -1
    },
    attrs(){
      if(this.mode === 'display' || this.disabled)
      {
        let {placeholder,...rest} = this.$attrs
        return rest
      }
      return this.$attrs
    }
  },
  methods:{
    getProperty(str, value) {
      let keys = str?.split('.')
      for (let key of keys) {
        if (value) {
          value = value[key]
        }
      }
      return value
    }
  }
}
</script>

<style>
/* .el-input.highlight .el-input__inner{
  border-color: red;
}
.el-textarea.highlight .el-textarea__inner {
  border-color: red;
}
.el-input.change-light .el-input__inner{
  border-color: #E6A23C;
}
.el-textarea.change-light .el-textarea__inner {
  border-color: #E6A23C;
} */
</style>