< template> < divclass = " pagination-select" > < el-selectv-model = " selectedValue" :style = " { width: width || ' 100%'  }" v-bind = " attrs" :remote-method = " remoteMethod" :loading = " loading" @change = " val => $emit(' change' , val)" @clear = " onClear" @visible-change = " val => $emit(' visible-change' , val)" :disabled = " disabled" > < el-optionv-for = " item in optionSource" :key = " item[keyValue]" :label = " item[labelKey]" :value = " item[valueKey]" > </ el-option> < el-paginationsmall 
                layout = " prev, pager, next" @current-change = " val => pageChange(val)" :hide-on-single-page = " false" :page-size = " paginationOption.pageSize" :current-page = " paginationOption.pageNum" :pager-count = " pagerCount" :total = " paginationOption.total" > </ el-pagination> </ el-select> </ div> </ template> < script> 
export  default  { 
    name :  'PaginationSelect' , 
    props :  { 
        value :  { 
            type :  [ String,  Number,  Object] 
        } , 
        
        width :  { 
            type :  String
        } , 
        
        loading :  { 
            type :  Boolean, 
            default :  false 
        } , 
        
        valueKey :  { 
            type :  String, 
            default :  '' 
        } , 
        
        labelKey :  { 
            type :  String, 
            default :  '' 
        } , 
        
        keyValue :  { 
            type :  String, 
            default :  '' 
        } , 
        
        optionSource :  { 
            type :  Array, 
            default :  ( )  =>  [ ] 
        } , 
        
        disabled :  { 
            type :  Boolean, 
            default :  false 
        } , 
        
        pagerCount :  { 
            type :  Number, 
            default :  5 
        } , 
        
        paginationOption :  { 
            type :  Object, 
            default :  ( )  =>  { 
                return  { 
                    pageNum :  1 ,  
                    pageSize :  this . $store. state. app. pageSize,  
                    total :  0 ,  
                    keyword :  '' 
                } 
            } 
        } 
    } , 
    computed :  { 
        selectedValue :  { 
            get ( )  { 
                return  this . value
            } , 
            set ( val)  { 
                this . $emit ( 'input' ,  val) 
            } 
        } , 
        attrs ( )  { 
            return  { 
                'popper-append-to-body' :  false , 
                clearable :  true , 
                filterable :  true , 
                remote :  true , 
                ... this . $attrs
            } 
        } 
    } , 
    watch :  { 
        selectedValue ( val )  { 
            this . selectedValue =  val
        } 
    } , 
    methods :  { 
        
        pageChange ( val )  { 
            this . $emit ( 'page-change' ,  { 
                pageNum :  val, 
                pageSize :  this . paginationOption. pageSize, 
                total :  this . paginationOption. total, 
                keyword :  this . paginationOption. keyword
            } ) 
        } , 
        
        remoteMethod ( query )  { 
            this . $emit ( 'remote-method' ,  { 
                pageNum :  1 , 
                pageSize :  this . paginationOption. pageSize, 
                total :  this . paginationOption. total, 
                keyword :  query
            } ) 
        } , 
        onClear ( )  { 
            this . $emit ( 'clear' ) 
        } 
    } 
} 
 </ script> < stylescoped  lang = " less" > 
.pagination-select  { 
    ::v-deep .el-pagination  { 
        display :  flex; 
        margin-top :  10px; 
        margin-left :  16px; 
        background-color :  #fff; 
        align-items :  center; 
        text-align :  center; 
        .el-pager  { 
            display :  flex; 
            align-items :  center; 
        } 
    } 
} 
 </ style> < el-form-itemlabel = " 学校" prop = " schoolNo" > < PaginationSelect:loading = " schoolLoading" width = " 360px" v-model = " ruleForm.schoolNo" :optionSource = " schoolOptions" labelKey = " schoolName" valueKey = " schoolNo" keyValue = " schoolNo" :paginationOption = " schoolPagination" @page-change = " getSchoolList" @remote-method = " getSchoolList" @visible-change = " schoolNoFocus" @clear = " handleClear()" :loading-text = " schoolOptions.length && schoolLoading ? ' 加载中'  : ' 无数据' " /> </ el-form-item> data ( )  { 
    return  { 
        schoolLoading :  false , 
        schoolOptions :  [ ] , 
        schoolPagination :  { 
            pageNum :  1 , 
            pageSize :  10 , 
            total :  0 , 
            keyword :  '' 
        } 
    } 
} , 
methods :  { 
    
    init ( row )  { 
        this . dialogVisible =  true 
        this . getDetail ( row. id) 
        
        this . schoolOptions =  [ 
            { 
                schoolNo :  row. schoolNo, 
                schoolName :  row. schoolName
            } 
        ] 
    } , 
    
    getDetail ( id )  { 
        getClockEnrollCollectDetail ( { 
            clockEnrollCollectId :  id
        } ) 
            . then ( res  =>  { 
                this . ruleForm =  res. data. data
            } ) 
            . catch ( err  =>  { } ) 
    } , 
    
    getSchoolList ( val )  { 
        this . schoolOptions =  [ ] 
        this . schoolLoading =  true 
        enrollSchoolPage ( { 
            pageNum :  val. pageNum, 
            pageSize :  val. pageSize, 
            nameOrNo :  val. keyword ||  '' 
        } ) 
            . then ( res  =>  { 
                this . schoolLoading =  false 
                if  ( res. data. data. records. length)  { 
                    this . schoolOptions =  res. data. data. records ||  [ ] 
                    
                    this . schoolPagination =  { 
                        pageNum :  val. pageNum, 
                        pageSize :  val. pageSize, 
                        keyword :  val. keyword ||  '' , 
                        total :  res. data. data. total
                    } 
                } 
            } ) 
            . catch ( err  =>  { 
                this . schoolLoading =  false 
            } ) 
    } , 
    
    schoolNoFocus ( val )  { 
        if  ( val)  { 
            this . getSchoolList ( this . schoolPagination) 
        }  else  { 
            this . schoolPagination. pageNum =  1 
            this . schoolPagination. keyword =  '' 
            this . schoolPagination. total =  0 
        } 
    } , 
    
    handleClear ( )  { 
        this . schoolPagination. pageNum =  1 
        this . schoolPagination. keyword =  '' 
        this . schoolPagination. total =  0 
        this . ruleForm. schoolNo =  '' 
        this . ruleForm. schoolName =  '' 
    } 
}