华西海圻ELN前端工程
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

160 lines
4.9 KiB

<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,
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>