<template>
<div class="content">
<el-pagination
background
:current-page.sync="currentPage"
:page-sizes="childPager.pageSizes"
:page-size="childPager.pageSize"
:total="childPager.total"
layout="total, sizes, prev, pager, next"
@size-change="handleSizeChange"
@current-change="handleCurrentChange">
</el-pagination>
</div>
</template>
<script>
export default {
name: "pagination",
props: {
value: {
type: Object,
default: () => ({ pageCur: 0, pageSize: 10, total: 0, pageSizes: [5, 10, 50, 100] })
},
},
data() {
return {
currentPage: 0,
childPager: {}
}
},
watch: {
value: {
handler (v) {
this.childPager = JSON.parse(JSON.stringify(v))
if (this.childPager.pageIndex === 0) {
this.currentPage = 0
} else {
this.currentPage = this.childPager.pageIndex + 1
}
let totalPageIndex = Math.ceil(this.childPager.total / this.childPager.pageSize)
totalPageIndex = totalPageIndex > 0 ? totalPageIndex - 1 : 0
if (this.childPager.pageIndex > totalPageIndex) {
this.childPager.pageIndex = totalPageIndex
this.childPagerChange()
}
},
immediate: true,
deep: true
}
},
methods: {
handleSizeChange (val) {
this.childPager.pageSize = val
this.childPager.pageIndex = 0
this.childPagerChange()
},
handleCurrentChange (val) {
this.childPager.pageIndex = val - 1
this.childPagerChange()
},
childPagerChange () {
this.$emit('input', this.childPager)
this.$emit('pagerEvent')
},
}
}
</script>
<style scoped>
.content{
margin: 20px 0;
text-align: right;
}
</style>