<template>
    <el-select
        v-model="index"
        filterable
        clearable
        remote
        reserve-keyword
        :placeholder="$t('请输入商品关键词')"
        :disabled="disabled"
        :remote-method="remoteMethod"
        @focus="onFocus"
        @clear="onClear"
        :loading="loading">
        <el-option
        v-for="(item, index) in list"
        :key="item.id"
        :label="item['title' + lang]"
        :value="index">
        </el-option>
    </el-select>
</template>
<script>
import {getProduct, getProductPage} from '@/api/ecw/product'

export default {
    props:{
        productType: [String, Number],
        value: [String, Number],
        disabled: Boolean,
        lang: {
            type: String,
            default: 'Zh'
        }
    },
    data(){
        return {
            index: null,
            list:[],
            loading: false
        }
    },
    watch:{
        index(val){
            let productId = val !== '' && val !== null ? this.list[val].id : null
            console.log('index val', val, productId)
            this.$emit('input', productId)
            this.$emit('change', val !== '' && val !== null ? this.list[val] : null)
            // 0 != ''  是 false
        },
        value(val){
            console.log('初始化内容', val)
            this.init()
        }
    },
    created(){
        console.log('created', this.value)
        this.init()
    },
    methods:{
        init(){
            if(!this.value){
                this.index = null
                return 
            }
            let index = this.list.findIndex(item => item.id == this.value)
            if(index < 0){
                getProduct(this.value).then(res => {
                    this.list.unshift(res.data)
                    this.index = 0
                })
            }else this.index = index
        },
        onFocus(){
            if(!this.list.length){
                this.remoteMethod()
            }
        },
        onClear(){
            this.list = []
        },
        remoteMethod(keyword){
            let params = {
                pageSize: keyword ? 100000 : 10
            }
            if(this.productType){
                params.typeId = this.productType
            }
            params.titleZh = keyword
            this.loading = true
            getProductPage(params)
                .then(res => this.list = res.data.list)
                .finally(() => this.loading = false)
        }
    }
}
</script>