index.vue 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <div :class="{ 'hidden': hidden }" class="pagination-container">
  3. <el-pagination :background="background" v-model:current-page="currentPage" v-model:page-size="pageSize"
  4. :layout="layout" :page-sizes="pageSizes" :pager-count="pagerCount" :total="total" @size-change="handleSizeChange"
  5. @current-change="handleCurrentChange" :size="size" />
  6. </div>
  7. </template>
  8. <script setup>
  9. import { scrollTo } from '@/utils/scroll-to'
  10. const props = defineProps({
  11. total: {
  12. required: true,
  13. type: Number
  14. },
  15. page: {
  16. type: Number,
  17. default: 1
  18. },
  19. limit: {
  20. type: Number,
  21. default: 20
  22. },
  23. pageSizes: {
  24. type: Array,
  25. default() {
  26. return [10, 50, 100, 300]
  27. }
  28. },
  29. // 移动端页码按钮的数量端默认值5
  30. pagerCount: {
  31. type: Number,
  32. default: document.body.clientWidth < 992 ? 5 : 7
  33. },
  34. layout: {
  35. type: String,
  36. default: 'total, sizes, prev, pager, next, jumper'
  37. },
  38. background: {
  39. type: Boolean,
  40. default: true
  41. },
  42. autoScroll: {
  43. type: Boolean,
  44. default: true
  45. },
  46. hidden: {
  47. type: Boolean,
  48. default: false
  49. },
  50. size: {
  51. type: String,
  52. default: 'default'
  53. }
  54. })
  55. const emit = defineEmits();
  56. const currentPage = computed({
  57. get() {
  58. return props.page
  59. },
  60. set(val) {
  61. emit('update:page', val)
  62. }
  63. })
  64. const pageSize = computed({
  65. get() {
  66. return props.limit
  67. },
  68. set(val) {
  69. emit('update:limit', val)
  70. }
  71. })
  72. function handleSizeChange(val) {
  73. if (currentPage.value * val > props.total) {
  74. currentPage.value = 1
  75. }
  76. emit('pagination', { page: currentPage.value, limit: val })
  77. if (props.autoScroll) {
  78. scrollTo(0, 800)
  79. }
  80. }
  81. function handleCurrentChange(val) {
  82. emit('pagination', { page: val, limit: pageSize.value })
  83. if (props.autoScroll) {
  84. scrollTo(0, 800)
  85. }
  86. }
  87. </script>
  88. <style scoped>
  89. .pagination-container.hidden {
  90. display: none;
  91. }
  92. </style>