<template>
  <div>
    <a-input-group v-if="kind === 'material'" compact style="width: 100%; top: 0px">
      <a-select
        placeholder="输入条码或名称"
        :dropdownMatchSelectWidth="false"
        showSearch
        :showArrow="false"
        v-model="names"
        optionFilterProp="children"
        :style="searchWidth"
        notFoundContent="需在商品管理先新增才能使用"
        @search="handleSearch"
        @change="handleChange"
      >
        <div slot="dropdownRender" slot-scope="menu">
          <v-nodes :vnodes="menu" />
          <a-divider v-if="materialData.length === 20" style="margin: 4px 0" />
          <div
            v-if="materialData.length === 20"
            style="padding: 4px 8px; cursor: pointer"
            @mousedown="(e) => e.preventDefault()"
          >
            此处最多显示20条，如需更多请点击放大镜查询
          </div>
        </div>
        <a-select-option v-for="item in materialData" :key="item.barCode">
          {{ item.materialStr }}
        </a-select-option>
      </a-select>
      <a-button icon="search" @click="onSearch" />
    </a-input-group>
    <a-input-search
      v-if="kind === 'batch' || kind === 'sn' || kind === 'snAdd'"
      v-model="names"
      placeholder="请点开弹窗"
      readOnly
      @search="onSearch"
    ></a-input-search>
    <j-select-material-modal
      v-if="kind === 'material'"
      ref="selectModal"
      :rows="rows"
      :multi="multi"
      :bar-code="value"
      @ok="selectOK"
      @initComp="initComp"
    />
    <j-select-batch-modal
      v-if="kind === 'batch'"
      ref="selectModal"
      :rows="rows"
      :multi="multi"
      :bar-code="value"
      @ok="selectOK"
      @initComp="initComp"
    />
    <j-select-sn-modal
      v-if="kind === 'sn'"
      ref="selectModal"
      :rows="rows"
      :multi="multi"
      :bar-code="value"
      @ok="selectOK"
      @initComp="initComp"
    />
    <j-select-sn-add-modal
      v-if="kind === 'snAdd'"
      ref="selectModal"
      :rows="rows"
      :multi="multi"
      :bar-code="value"
      @ok="selectOK"
      @initComp="initComp"
    />
  </div>
</template>

<script>
import JSelectMaterialModal from './modal/JSelectMaterialModal'
import JSelectBatchModal from './modal/JSelectBatchModal'
import JSelectSnModal from './modal/JSelectSnModal'
import JSelectSnAddModal from './modal/JSelectSnAddModal'
import { getMaterialByParam } from '@/api/api'

export default {
  name: 'JSelectList',
  components: {
    JSelectMaterialModal,
    JSelectBatchModal,
    JSelectSnModal,
    JSelectSnAddModal,
    VNodes: {
      functional: true,
      render: (h, ctx) => ctx.props.vnodes,
    },
  },
  props: {
    value: {
      type: String,
      required: false,
    },
    disabled: {
      type: Boolean,
      required: false,
      default: false,
    },
    rows: {
      type: String,
      required: false,
    },
    kind: {
      type: String,
      required: false,
    },
    multi: {
      type: Boolean,
      default: true,
      required: false,
    },
  },
  data() {
    return {
      ids: '',
      names: '',
      materialData: [],
      setTimeFlag: null,
      searchWidth: '',
    }
  },
  mounted() {
    this.ids = this.value
  },
  watch: {
    value(val) {
      this.ids = val
    },
  },
  created() {
    const currentWidth = window.screen.width
    if (currentWidth < 1500) {
      this.searchWidth = 'width:75%'
    } else {
      this.searchWidth = 'width:81%'
    }
  },
  model: {
    prop: 'value',
    event: 'change',
  },
  methods: {
    initComp(name) {
      this.names = name ? name : undefined
    },
    onSearch() {
      this.$refs.selectModal.showModal()
    },
    handleSearch(value) {
      let that = this
      if (this.setTimeFlag != null) {
        clearTimeout(this.setTimeFlag)
      }
      this.setTimeFlag = setTimeout(() => {
        getMaterialByParam({ q: value }).then((res) => {
          if (res && res.code === 200) {
            that.materialData = res.data
          }
        })
      }, 500)
    },
    handleChange(value) {
      this.$emit('change', value)
    },
    selectOK(rows, idstr) {
      console.log('选中id', idstr)
      if (!rows) {
        this.ids = ''
      } else {
        this.ids = idstr
      }
      this.$emit('change', this.ids)
    },
  },
}
</script>

<style scoped></style>
