index.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. <template>
  2. <div :class="{'hidden':hidden}"
  3. class="pagination-container">
  4. <el-pagination :background="background"
  5. :current-page.sync="currentPage"
  6. :page-size.sync="pageSize"
  7. :layout="layout"
  8. :page-sizes="pageSizes"
  9. :total="total"
  10. v-bind="$attrs"
  11. @size-change="handleSizeChange"
  12. @current-change="handleCurrentChange" />
  13. </div>
  14. </template>
  15. <script>
  16. import { scrollTo } from '@/utils/scroll-to'
  17. export default {
  18. name: 'Pagination',
  19. props: {
  20. total: {
  21. required: true,
  22. type: Number
  23. },
  24. page: {
  25. type: Number,
  26. default: 1
  27. },
  28. limit: {
  29. type: Number,
  30. default: 10
  31. },
  32. pageSizes: {
  33. type: Array,
  34. default () {
  35. return [10, 20, 30, 50]
  36. }
  37. },
  38. layout: {
  39. type: String,
  40. default: 'total,sizes,->,prev, pager, next, jumper'
  41. },
  42. background: {
  43. type: Boolean,
  44. default: true
  45. },
  46. autoScroll: {
  47. type: Boolean,
  48. default: true
  49. },
  50. hidden: {
  51. type: Boolean,
  52. default: false
  53. }
  54. },
  55. computed: {
  56. currentPage: {
  57. get () {
  58. return this.page
  59. },
  60. set (val) {
  61. this.$emit('update:page', val)
  62. }
  63. },
  64. pageSize: {
  65. get () {
  66. return this.limit
  67. },
  68. set (val) {
  69. this.$emit('update:limit', val)
  70. }
  71. }
  72. },
  73. methods: {
  74. handleSizeChange (val) {
  75. this.$emit('pagination', { page: this.currentPage, limit: val })
  76. if (this.autoScroll) {
  77. scrollTo(0, 800)
  78. }
  79. },
  80. handleCurrentChange (val) {
  81. this.$emit('pagination', { page: val, limit: this.pageSize })
  82. if (this.autoScroll) {
  83. scrollTo(0, 800)
  84. }
  85. }
  86. }
  87. }
  88. </script>
  89. <style scoped>
  90. .pagination-container {
  91. background: #fff;
  92. padding: 32px 16px;
  93. }
  94. .pagination-container.hidden {
  95. display: none;
  96. }
  97. </style>