zoukankan      html  css  js  c++  java
  • el-pagination分页优化

    表格分页优化:

    <template>
      <el-pagination
        small
        background
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="currentPage"
        :page-sizes="pageSizes"
        :page-size="pageSize"
        layout="total, sizes, prev, pager, next, jumper"
        :total="pageTotal"
      />
    </template>
    <script>
    export default {
      props: {
        resetPageSize: {// 重置页面
          type: Boolean,
          default: false
        },
        dataTotal: {// 总条数
          type: [String, Number],
          default: 0
        },
        tableBegin: {// 总数据
          type: Array,
          default () {
            return []
          }
        },
        pageSizes: {// 分页条数:自定义[10,20,30]
          type: Array,
          default () {
            return [15, 25, 50, 100]
          }
        }
      },
      data () {
        return {
          currentPage: 1,
          pageSize: 15
        }
      },
      computed: {
        pageTotal () { // 分页前总条数:后台读取或直接计算传入数据
          return this.dataTotal || this.tableBegin.length
        }
      },
      watch: {
        tableBegin: {
          immediate: true,
          handler () { // 加载数据:初始化、更新数据
            this.resetSize()
            this.updateData()
          }
        },
        resetPageSize: {
          immediate: false,
          handler () { // 切换路由等:重置分页
            this.resetSize()
          }
        }
      },
      methods: {
        // 跳转到第几页
        handleCurrentChange (val) {
          this.currentPage = val
          this.updateData()
        },
        // 设置分页条数
        handleSizeChange (val) {
          this.resetSize()
          this.pageSize = val
          this.updateData()
        },
        // 重置分页
        resetSize(){
          this.currentPage = 1
          this.pageSize = this.pageSizes[0] || 15
        },
        // 更新数据
        updateData(){
          const begin = (this.currentPage - 1) * this.pageSize
          const end = this.currentPage * this.pageSize
          const tableData = this.tableBegin.slice(begin, end)
          if (this.dataTotal) { // 后台请求:不返回数据
            this.$emit('table-pagination-update', this.currentPage, this.pageSize)
          } else {
            this.$emit('table-pagination-change', tableData, this.currentPage, this.pageSize)
          }
          this.$emit('change', tableData, this.currentPage, this.pageSize)
        }
      }
    }
    </script>

    如何使用:

        <!-- 页码 -->
        <pagination
          style="margin-top:10px"
          :page-sizes="pageSizes"
          :table-begin="tableBegin"
          @table-pagination-change="getTablePagination"
        />
      </div>
    </template>
    
    <script>
    import pagination from 'module-comp/tablePagination'
    export default {
      components: {
        pagination
      },
    
    
    
        // 分页方法
        getTablePagination (data, currentPage, pageSize) {
          this.tableData = data
          this.currentPage = currentPage
          this.pageSize = pageSize
        },

     后台控制返回:

         <pagination
            ref="pager"
            style="margin-top:20px"
            :data-total="dataTotal"
            :reset-page-size="resetPageSize"
            @table-pagination-update="tablePaginationLoad"
          />
    
        // 表格分页:点击分页后拉新业务
        tablePaginationLoad (pagenum, pagesize) {
          this.pagenum = pagenum - 1
          this.pagesize = pagesize
        this.featureSearchChange(this.keyWords,this.businessIdSet,false)
        },
    
     // 搜索:所有数据的刷新
        featureSearchChange (val, businessId, resetPageSize) {
          if (resetPageSize) { // 搜索时切换业务
            this.pagenum = 0
            this.resetPageSize = !this.resetPageSize
          }
          const businessIdSet = businessId || ''
          const paramet = {
            'business.id': this.globalPage ? businessIdSet : this.businessIdSet,
            'pagenum': this.pagenum,
            'pagesize': this.pagesize,
            'authority': this.authority, // 个人或公共
            'keyword': val || ''
          }
          this.onLoadData(paramet)
        },
        // 重置分页
        // resetSize(){
        //   this.$refs.pager.resetSize()
        // },
        // 加载数据getAllData()
        onLoadData (paramet) {
          if (paramet) {
            this.loadingData = true
            getAllData(paramet).then(res => {
              if (res && res.data && res.data.err_code === '0' && res.data.info) {
                const result = res.data.info
                this.dataTotal = res.data.num || 0 // 总条数
                const tableData = [] // 展示数据
                if (result && result.length > 0) { // 省略遍历自定义result
                  this.tableBegin = tableData
                  this.loadingData = false
                } else {
                  this.tableBegin = []
                  this.loadingData = false
                }
              } else {
                this.tableBegin = []
                this.dataTotal = 0 // 总条数
                this.$message.error(res.data ? res.data.err_desc : '获取特征数据失败')
                this.loadingData = false
              }
            }).catch(() => {
              this.loadingData = false
              this.$message.error('获取数据失败')
            })
          }
        }
      }

    -end-

  • 相关阅读:
    类的空间问题
    面向对象初识
    collections模块,shelve模块
    一段水印文字的练习
    jquery选择器中(:button)的含义
    关于通过jquery来理解position的relative及absolute
    [小明学算法]1.动态规划--最长递增子序列问题
    [小明学算法]2.贪心算法----
    [Unity的序列化]2.技能编辑器的实现
    [Unity的序列化]1.什么是序列化
  • 原文地址:https://www.cnblogs.com/wheatCatcher/p/11837247.html
Copyright © 2011-2022 走看看