在若依框架中(前后端分离版本中),使用的element-ui的分页组件时,有默认的几个选项,比如10,15,20,那么如何实现自定义每页显示的记录数量哪?话不多说,直接上代码:
找到:src/components/Pagination/index.vue 文件,修改成一下代码:
html
<template>
<div :class="{ hidden: hidden }" class="pagination-container">
<el-pagination
:background="background"
:current-page.sync="currentPage"
:page-size.sync="pageSize"
layout="total, slot, prev, pager, next, jumper"
:page-sizes="pageSizes"
:pager-count="pagerCount"
:total="total"
v-bind="$attrs"
@current-change="handleCurrentChange"
>
<el-select
class="page-size-select"
size="mini"
v-model.number="pageSize"
allow-create
filterable
placeholder="可输入"
default-first-option
@change="handleSizeChange"
>
<el-option
v-for="(item, index) in pageSizes"
:key="index"
:value="item"
:label="item"
/>
</el-select>
<span class="page-size-text">条/页</span>
</el-pagination>
</div>
</template>
<script>
import { scrollTo } from "@/utils/scroll-to";
export default {
name: "Pagination",
props: {
total: {
required: true,
type: Number,
},
page: {
type: Number,
default: 1,
},
limit: {
type: Number,
default: 20,
},
pageSizes: {
type: Array,
default() {
return [10, 20, 30, 50];
},
},
// 移动端页码按钮的数量端默认值5
pagerCount: {
type: Number,
default: document.body.clientWidth < 992 ? 5 : 7,
},
// layout: {
// type: String,
// default: "total, sizes, prev, pager, next, jumper",
// },
background: {
type: Boolean,
default: true,
},
autoScroll: {
type: Boolean,
default: true,
},
hidden: {
type: Boolean,
default: false,
},
},
computed: {
currentPage: {
get() {
return this.page;
},
set(val) {
this.$emit("update:page", val);
},
},
pageSize: {
get() {
return this.limit;
},
set(val) {
this.$emit("update:limit", val);
},
},
},
methods: {
handleSizeChange(val) {
if (this.currentPage * val > this.total) {
this.currentPage = 1;
}
this.$emit("pagination", { page: this.currentPage, limit: val });
if (this.autoScroll) {
scrollTo(0, 800);
}
},
handleCurrentChange(val) {
this.$emit("pagination", { page: val, limit: this.pageSize });
if (this.autoScroll) {
scrollTo(0, 800);
}
},
},
};
</script>
<style scoped>
.pagination-container {
background: #fff;
padding: 32px 16px;
}
.pagination-container.hidden {
display: none;
}
.page-size-select ::v-deep .el-input {
width: 65px;
margin: 0 5px;
}
.page-size-text {
font-weight: normal;
color: #606266;
}
</style>