这种控件基本需要按照各自的项目需求进行设计,这里设计了基础版本,各个属性值已经在注释中注明,实际使用仍需调整

<!--分页组件-->
<template>
  <el-container height="100%">
    <el-table :data="list">
      <slot></slot>
    </el-table>
    <el-footer v-if="isPage">
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="pageInfo.page"
        :page-sizes="[10, 30, 50, 100]"
        :page-size="pageInfo.limit"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total">
      </el-pagination>
    </el-footer>
  </el-container>
</template>

<script>
    export default {
        name: "page-table"
        , props: {
            //数据Url
            url: {type: String}
            //是否需要分页,给个标志位,可以禁用掉分页功能
            , isPage: {
                type: Boolean,
                default: true
            }
            //当前页码
            , page: {
                type: Number,
                default: 1
            }
            //每一页容量
            , limit: {
                type: Number,
                default: 10
            }
            //查询结果格式化
            , resultParser: {
                type: Function
            }
        }
        , created: function () {
            //模拟数据
            this.list = [{
                date: '2016-05-02',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1518 弄'
            }, {
                date: '2016-05-04',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1517 弄'
            }, {
                date: '2016-05-01',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1519 弄'
            }, {
                date: '2016-05-03',
                name: '王小虎',
                address: '上海市普陀区金沙江路 1516 弄'
            }];
            //TODO: 数据查询(按照项目需求,设置数据查询函数)
        }, methods: {
            handleSizeChange(val) {
                this.pageInfo.limit = val;
                console.log(this.pageInfo);
                //TODO: 数据查询(按照项目需求,设置数据查询函数)
                //数据查询结束之后,total和list都会发生变化
            }
            ,
            handleCurrentChange(val) {
                this.pageInfo.page = val;
                console.log(this.pageInfo);
                //TODO: 数据查询(按照项目需求,设置数据查询函数)
                //数据查询结束之后,total和list都会发生变化
            }
        }
        , data() {
            return {
                //分页信息
                pageInfo: {
                    page: this.page,
                    limit: this.limit,
                }
                //数据总条数,需要注意每一次查询都可能发生变化
                , total: 100
                //数据列表
                , list: []
            }
        }
    }
</script>

调用Demo

<template>
  <div>
    <page-table :url="pageInfo.url">
      <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </page-table>
  </div>
</template>

<script>
    import PageTable from '@/components/widget/PageTable.vue'

    export default {
        components: {
            PageTable
        },
        data() {
            return {
                pageInfo: {
                    url: 'http://www.baidu.com'
                    , page: 1
                    , limit: 10
                }
            }
        }
    }
</script>

相关文章: