selection-input.vue 3.11 KB
<template>

  <div class="epi-form" style="width:300px; display:inline-block;">
    <div class="group-row" style="height:40px;">
      <div class="form-group">
        <!--   <div class="div-select-item"></div>
      -->
      <div class="control select-style" style="position:relative; width: 200px;right: 45px;">
        <input type="text" 
          v-model="txtName" 
          class="input_1" 
          style="border-right: 0;position: absolute; top: 0px; width:150px; z-index:4" 
          @change="changeSelectValue" 
          value="{{txtNameValue}}">
         
        <select v-model="selected" 
          @click="selectChange(selected||json)" 
          style="position: absolute;" 
          @change="getDTemplate(selected)">
            <option v-if="empty" value="">{{emptytext}}</option>
            <option v-for="item in list" :value="(item.value || item)">{{ item.label || item }}</option>
        </select>
      </div>
    </div>
  </div>
</div>


</template>
<script>
  module.exports = {
    props: {
      list: {
        type: Array,
        require: true
      },
      selected: {
        twoWay: true
      },
      selectedId: {
        twoWay: true
      },

      empty: {
        type: Boolean,
        default: true
      },
      emptytext: {
        type: String,
        default: '--请选择--'
      },

      changedobject:{
        type: Object,
        twoWay: true
      }
    },
    data: function (){
      return{
        txtNameValue:'',
        txtName:''
      };
    },
    computed: {
      txtNameValue: function () {
        var self = this;
        if (self.selected!=null && self.selected!=undefined){
          self.selectChange(self.selected);
        }
        return '';
      }
    },
    methods: {
      selectChange: function(value){
        var self = this;
        for (var i=0;i<this.list.length;i++) {
          if (value == this.list[i].value) {
            self.$set('txtName',this.list[i].label);
            self.$set('selected',this.list[i].value);
          }
        }       
      },
      changeSelectValue: function(){
        var self = this;
        var flag = false;
        for (var i=0;i<this.list.length;i++) {
          if (self.txtName == this.list[i].label) {
            flag = true;
            //self.$set('txtValue',this.list[i].value);
          }
        }
        if (!flag) {
          //self.$set('txtValue','');
          self.$set('selected',self.txtName+"New");
        }
      },
      getDTemplate: function(id){
        var self =this;
        //self.$set("changedobject.selectedHeadArray",[]);
        //self.$set("changedobject.selectedArray",[]);
        //self.$set('changedobject.resourceList', []);
        Ajax.get('/user/getDTemplate/'+id)
          .then(function (response){
            var data = response.data.data;
            if (data!=null && data!=undefined) {
              self.$set('changedobject.resourceList', data.resourceList);
              self.$set("changedobject.selectedHeadArray",data.selectedHeadArray);
              self.$set("changedobject.selectedArray",data.selectedArray);
            }
            
        });   
      },
    }
  };
</script>