index.vue 1.45 KB
Newer Older
renhanxue's avatar
renhanxue committed
1 2 3
<template>
  <div class="pagination-wraper">
    <el-pagination
neogcg's avatar
neogcg committed
4
      layout="total, sizes, prev, pager, next, jumper"
renhanxue's avatar
renhanxue committed
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
      prev-text="上一页"
      next-text="下一页"
      :total="total"
      :page-sizes="pageSizes"
      :page-size.sync="pageSize"
      :current-page.sync="currentPage"
      @size-change="handleSizeChange"
      @current-change="handleCurrentChange"
    />
  </div>
</template>
<script>

export default {
  props: {
    total: {
      required: true,
      type: Number,
      default: 0
    },
    page: {
      type: Number,
      default: 1
    },
    limit: {
      type: Number,
      default: 10
    },
    pageSizes: {
      type: Array,
      default() {
neogcg's avatar
neogcg committed
36
        return [5, 10, 20, 30,40,50]
renhanxue's avatar
renhanxue committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
      }
    }
  },
  computed: {
    currentPage: {
      get() {
        return this.page
      },
      set(val) {
        this.$emit('update:page', val)
      }
    },
    pageSize: {
      get() {
        return this.limit
      },
      set(val) {
        this.$emit('update:limit', val)
      }
    }
  },
  methods: {
    handleSizeChange(val) {
      this.$emit('pagination', { page: this.currentPage, size: val })
    },
    handleCurrentChange(val) {
      // 解决有时切换每页显示条数时,偶尔会出现无数据的情况
      setTimeout(() => {
        this.$emit('pagination', { page: val, size: this.limit })
      }, 0)
    }
  }
}
</script>
<style lang="scss" scoped>
.pagination-wraper {
  text-align: center;
}

</style>