<template>
|
<el-pagination
|
:current-page.sync="currentPage"
|
layout="prev, pager, next"
|
:total="totalList.length"
|
:page-size="pageSize"
|
@current-change="handleCurrentChange"
|
class="mt-10"
|
>
|
</el-pagination>
|
</template>
|
|
<script lang="ts">
|
import { Vue, Component, Prop, Emit, Watch } from 'nuxt-property-decorator';
|
import { Consultant } from '~/assets/ts/models/consultant.model';
|
|
@Component
|
export default class UiPagination extends Vue {
|
@Prop() totalList!: Consultant[];
|
@Prop({default: 5}) pageSize!: number;
|
currentPage = 1;
|
pageList: Consultant[] = [];
|
|
mounted() {
|
this.handleCurrentChange(this.currentPage);
|
}
|
|
@Emit('changePage') changePage(): Consultant[] {
|
return this.pageList
|
}
|
|
handleCurrentChange(currentPage: number) {
|
|
if (this.totalList.length <= this.pageSize && currentPage !== 1) {
|
currentPage -= 1;
|
}
|
|
if (this.totalList) {
|
this.pageList = this.totalList.slice(this.pageSize * currentPage - this.pageSize, this.pageSize * currentPage)
|
this.changePage();
|
}
|
}
|
|
@Watch('totalList') watchTotalList(newValue: Consultant[]) {
|
if (newValue) {
|
this.handleCurrentChange(this.currentPage);
|
}
|
}
|
}
|
</script>
|