Pagination.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <template>
  2. <div class="pagination-container">
  3. <el-pagination :background="background" v-model:currentPage="currentPage" v-model:pageSize="pageSize"
  4. :layout="layout" :pager-count="pagerCount" :total="total" :page-sizes="pageSizes" />
  5. </div>
  6. </template>
  7. <script setup lang="ts">
  8. import { defineProps, defineEmits, computed } from "vue";
  9. const emits = defineEmits(["update:page", "update:size"]);
  10. const currentPage = computed({
  11. get() {
  12. return props.page;
  13. },
  14. set(val) {
  15. emits("update:page", val);
  16. },
  17. });
  18. const pageSize = computed({
  19. get() {
  20. return props.size;
  21. },
  22. set(val) {
  23. emits("update:size", val);
  24. },
  25. });
  26. const props = defineProps({
  27. page: {
  28. type: Number,
  29. default: 1,
  30. },
  31. size: {
  32. type: Number,
  33. default: 10,
  34. },
  35. background: {
  36. type: Boolean,
  37. default: false,
  38. },
  39. layout: {
  40. type: String,
  41. default: "total, sizes, prev, pager, next, jumper",
  42. },
  43. //设置最大页码按钮数。 页码按钮的数量,当总页数超过该值时会折叠
  44. pagerCount: {
  45. type: Number,
  46. default: 7,
  47. },
  48. total: {
  49. type: Number,
  50. required: true,
  51. },
  52. pageSizes: {
  53. type: Array,
  54. default: () => [10, 20, 30, 50, 100],
  55. },
  56. });
  57. </script>
  58. <style lang="scss" scoped>
  59. .pagination-container {
  60. display: flex;
  61. justify-content: flex-end;
  62. margin: 15px 0;
  63. background-color: #ffffff;
  64. }
  65. </style>