SOURCE

<template>
  <el-pagination
    v-bind="props"
    class="el-pagination--base"
    background
    v-model:current-page="modelCurrentPage"
    v-model:page-size="modelPageSize"
  >
  </el-pagination>
</template>

<script setup>
import { ElPagination } from 'element-plus';
import { ref, toRefs, computed, nextTick } from 'vue';

defineOptions({
  inheritAttrs: false,
});

const props = defineProps({
  ...ElPagination.props,
  currentPage: {
    type: Number,
    default: 1,
  },
  pageSizes: {
    type: Array,
    default: [5, 10, 50, 100],
  },
  layout: {
    type: String,
    default: 'prev, pager, next, jumper',
    // 显示全的配置: 'total, sizes, prev, pager, next, jumper'
  },
  beforeCallback: {
    type: Function,
  },
});

const emits = defineEmits([
  ...Object.keys(ElPagination.emits),
  'update:currentPage',
  'update:pageSize',
  'currentPage',
  'pageSizePage',
  'paginationChange',
]);

const { currentPage, pageSize, defaultPageSize, beforeCallback } = toRefs(props);

const modelCurrentPage = computed({
  get() {
    return currentPage.value;
  },
  set(newVal) {
    const callback = () => {
      emits('update:currentPage', newVal);
      emits('currentPage', newVal);
      emits('paginationChange', { currentPage: newVal, pageSize: modelPageSize.value });
    };
    // 存在前置拦截回调时
    if (
      beforeCallback.value &&
      !beforeCallback.value(() => {
        callback();
      })
    ) {
      return;
    }
    callback();
  },
});

const modelPageSize = computed({
  get() {
    return pageSize.value || defaultPageSize.value;
  },
  set(newVal) {
    const callback = () => {
      emits('update:pageSize', newVal);
      emits('pageSizePage', newVal);
      modelCurrentPage.value = 1;
    };
    // 存在前置拦截回调时
    if (
      beforeCallback.value &&
      !beforeCallback.value(() => {
        callback();
      })
    ) {
      return;
    }
    callback();
  },
});
</script>

<style lang="scss">
.el-pagination--base {
  justify-content: flex-end;
  .el-pager li.is-active {
    font-weight: normal;
  }
}
</style>
console 命令行工具 X clear

                    
>
console