Pagination.vue 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <template>
  2. <el-pagination
  3. @size-change="handleSizeChange"
  4. @current-change="handleCurrentChange"
  5. :current-page.sync="page"
  6. :page-sizes="pageSizes"
  7. :page-size="size"
  8. layout="total, sizes, prev, pager, next, jumper"
  9. :total="total">
  10. </el-pagination>
  11. </template>
  12. <script>
  13. import { paginationServiceData, defaultPageSizes } from './paginationData';
  14. export default {
  15. name: 'Pagination',
  16. props: {
  17. pageSizes: {
  18. type: Array,
  19. default: () => defaultPageSizes,
  20. },
  21. },
  22. inject: {
  23. tableServiceData: {
  24. type: Object,
  25. default: () => {
  26. },
  27. },
  28. },
  29. computed: {
  30. page: {
  31. get() {
  32. return paginationServiceData.page;
  33. },
  34. set(val) {
  35. paginationServiceData.page = val;
  36. },
  37. },
  38. size: {
  39. get() {
  40. return paginationServiceData.size;
  41. },
  42. set(val) {
  43. paginationServiceData.size = val;
  44. },
  45. },
  46. total: {
  47. get() {
  48. return paginationServiceData.total;
  49. },
  50. set(val) {
  51. this.paginationServiceData.total = val;
  52. },
  53. },
  54. },
  55. watch: {
  56. total(newVal) {
  57. if (newVal >= this.size && !this.tableServiceData.myData.length && this.page > 1) {
  58. this.page--;
  59. this.$emit('current-page', this.page);
  60. }
  61. },
  62. },
  63. methods: {
  64. handleSizeChange(val) {
  65. this.$emit('size-change', val);
  66. },
  67. handleCurrentChange(val) {
  68. this.$emit('current-page', val);
  69. },
  70. },
  71. };
  72. </script>
  73. <style scoped>
  74. </style>