index.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. import { scrollAnimation } from '@/util/scroll'
  2. import { ElPagination } from 'element-plus'
  3. import { defineComponent } from 'vue'
  4. import styles from './index.module.less'
  5. export default defineComponent({
  6. name: 'pagination',
  7. props: {
  8. total: {
  9. required: true,
  10. type: Number
  11. },
  12. page: {
  13. type: Number,
  14. default: 1
  15. },
  16. limit: {
  17. type: Number,
  18. default: 10
  19. },
  20. pageSizes: {
  21. type: Array,
  22. default: [5, 10, 20, 30, 50]
  23. },
  24. // , jumper
  25. layout: {
  26. type: String,
  27. default: 'total, sizes, prev, pager, next'
  28. },
  29. showMuitiple: {
  30. type: Number,
  31. default: 10
  32. },
  33. hideOnSinglePage: {
  34. type: Boolean,
  35. default: true
  36. },
  37. background: {
  38. type: Boolean,
  39. default: true
  40. },
  41. autoScroll: {
  42. type: Boolean,
  43. default: true
  44. },
  45. hidden: {
  46. type: Boolean,
  47. default: false
  48. },
  49. sync: {
  50. type: Boolean,
  51. default: false
  52. },
  53. saveKey: {
  54. type: String,
  55. default: ''
  56. },
  57. pagination: {
  58. type: Function,
  59. default: () => {}
  60. }
  61. },
  62. methods: {
  63. handleSizeChange(val: number) {
  64. this.$emit('update:page', 1)
  65. this.$emit('update:limit', val)
  66. this.pagination()
  67. if (this.autoScroll) {
  68. const currentY =
  69. document.documentElement.scrollTop || document.body.scrollTop
  70. scrollAnimation(currentY, 0)
  71. }
  72. },
  73. handleCurrentChange(val: number) {
  74. this.$emit('update:page', val)
  75. this.$emit('update:limit', this.limit)
  76. this.pagination()
  77. if (this.autoScroll) {
  78. const currentY =
  79. document.documentElement.scrollTop || document.body.scrollTop
  80. scrollAnimation(currentY, 0)
  81. }
  82. }
  83. },
  84. render() {
  85. return (
  86. <div
  87. class={[styles['pagination-container'], this.hidden && styles.hidden]}
  88. >
  89. <ElPagination
  90. currentPage={this.page}
  91. pageSize={this.limit}
  92. // @ts-ignore
  93. onUpdate:currentPage={(val: number) => {}}
  94. onUpdate:pageSize={(val: number) => {
  95. this.handleSizeChange(val)
  96. }}
  97. pageSizes={this.pageSizes as number[]}
  98. total={this.total}
  99. hideOnSinglePage={
  100. this.total > this.showMuitiple ? false : this.hideOnSinglePage
  101. }
  102. background={this.background}
  103. layout={this.layout}
  104. onSise-change={this.handleSizeChange}
  105. onCurrent-change={this.handleCurrentChange}
  106. />
  107. </div>
  108. )
  109. }
  110. })