<template>
    <div>
      <el-select
        v-model="value"
        ref="select"
        placeholder="请输入姓名"
        clearable
        filterable
        remote
        :remote-method="remoteMethod"
        @change = "onChange">
        <el-option
          v-for="item in options"
          :key="item.value"
          :label="item.label"
          :value="item.value">
        </el-option>
        <el-option v-if="options.length > 0" label="加载更多" style="font-style: italic; color: #8a979e" value="undefined" @click.native="handleClick()"></el-option>
      </el-select>
    </div>
</template>

<script>
  export default {
    name: 'user-component',
    props: {
      userId: {
        type: String,
        default: ''
      }
    },
    model: {
      prop: 'userId',
      event: 'userSelected'
    },
    data () {
      return {
        value: '',
        current: 1,
        size: 10,
        name: '',
        options: [],
        loading: false,
        noMore: false
      }
    },
    mounted () {
      this.init()
    },
    methods: {
      async init () {
        this.getList()
      },
      remoteMethod (query) {
        this.options = []
        this.current = 1
        this.name = query
        this.getList()
      },
      getList () {
        this.$http({
          url: this.$http.adornUrl(`/user-service/user/list`),
          method: 'get',
          params: this.$http.adornParams({
            'current': this.current,
            'size': this.size,
            'name': this.name
          })
        }).then(({data}) => {
          if (data && data.code === '200') {
            if (this.current > data.data.pages) {
              return
            }
            data.data.records.forEach(item => {
              this.options.push({
                label: item.name + ' (' + item.orgName + ')',
                value: item.userId
              })
            })
          } else {
            this.options = []
          }
        })
      },
      handleClick () {
        this.loadMore()
      },
      loadMore () {
        this.current ++
        this.getList()
      },
      onChange (item) {
        if (item === 'undefined') {
          this.value = null
        }
        this.$emit('userSelected', item)
      }
    }
  }
</script>

<style scoped>

</style>
