<template>
    <div>
        <div >
            <el-form :inline="true"  class="demo-form-inline" ref="SearchSjRef">
                <el-form-item v-for="(item,key) in searchForm" :key="key" :label="$t(item.label)">
                    <el-select v-if="item.type === 'select'" v-model="listParams[key]" :placeholder="$t('form.placeholderSelect')">
                        <el-option v-for="(opt) in item.options" :key="opt.value" :label="opt.label" :value="opt.value"></el-option>
                    </el-select>
                    <el-input v-else v-model="listParams[key]" :placeholder="$t('form.placeholderInput')"></el-input>
                  
                </el-form-item>
                <el-form-item>
                    <el-button type="primary" @click="onSearch">{{$t('form.search')}}</el-button>
                    <el-button @click="reset">{{ $t('form.reset') }}</el-button>
                </el-form-item>
            </el-form>
            <el-table :data="dataSource" :row-key="(row) => row.id">
                <el-table-column width="80" align="center" v-if="showRadio">
                    <template slot-scope="scope">
                        <el-radio v-model="localSelectedId" :label="scope.row[selectedCode]" class="hide-label"  @input.native.stop="handleRadioClick(scope.row)"></el-radio>
                    </template>
                </el-table-column>
                <el-table-column v-for="(item) in columns" :prop="item.prop" :key="item.prop" :label="$t(item.label)">
                </el-table-column>
            </el-table>
            <div class="mt-10">
                <el-pagination
                    :page-limit.sync="pagination.pageSize"
                    :current-page.sync="pagination.pageNum"
                    layout="total, sizes, prev, pager, next, jumper"
                    :total="pagination.total"
                    @size-change="handleSizeChange"
                    @current-change="handleCurrentChange"
                />
            </div>
        </div>
    </div>
</template>

<script>

export default {
    props: {
        //[{label:"名称",prop:"name"}]
        searchForm: {
            type: Object,
            default: () => {},
        },
        showRadio: {//是否显示单选框
            type: Boolean,
            default: true,
        },
        columns: {
            type: Array,
            default: [],
        },
        
        selectedId: {
            type: String,
            default: "",
        },
        selectedCode: {
            type: String,
            default: "bh",//radio选中的值的字段
        },
        listApi:{
            type: Function,
            default: () => {},
        },
        studyFormId: {
            type: [String,Number],
            default: "",
        },
    },
    data() {
        return {
            localSelectedId: "",
            listParams: {
                pageNum: 1,
                pageSize: 10,
            },
            pagination: {
                pageNum: 1,
                pageSize: 10,
                total: 0,
            },
            dataSource: []
        }
    },
    watch: {
        selectedId: {
            immediate: true,
            handler(newVal, oldVal) {
                this.localSelectedId = newVal;
            },
        },
    },
    mounted() {
        
    },
    methods: {
        show(){
            this.localSelectedId = ''
            this.initSearchForm();
            this.getList();
        },
        //初始化查询表单
        initSearchForm() {
            for(let key in this.searchForm) {
                this.listParams[key] = "";
            }
            this.listParams = {...this.listParams}
            this.listParams.studyFormId = this.studyFormId || ''
        },
        async getList() {
            const res = await this.listApi(this.listParams);
            this.dataSource = res.rows;
            this.pagination = {
                pageNum: this.listParams.pageNum,
                pageSize: this.listParams.pageSize,
                total: res.total,
            };
        },
        //查询
        onSearch() {
            this.pagination.pageNum = 1;
            this.getList();
        },  
        reset(){
            this.initSearchForm();
            this.getList();
            this.onSearch()
        },
        //分页大小切换
        handleSizeChange(e) {
            this.$emit("pagination", {pageSize: e});
            this.listParams.pageSize = e;
            this.getList();
        },
        //分页切换
        handleCurrentChange(e) {
            this.$emit("pagination", {pageNum: e});
            this.listParams.pageNum = e;
            this.getList();
        },
        //单选框点击
        handleRadioClick(row) {
            this.localSelectedId = row[this.selectedCode];
            this.$emit("radioSelect", row[this.selectedCode],row);
        },
    }

}
</script>

<style lang="scss" scoped>
.mt-10 {
    margin-top: 10px;
}
</style>