elementUi Table Pagination 分页 实现分页多选

列表页面导出excel数据,需要支持多页导出

思路如下:

1 所有选中的数据存到一个数组中  selectDataArrL

2 切换 currentPage(页码) 或 pageSize(条数) 的时候 给当前数据添加选中状态  this.$refs.multipleTable.toggleRowSelection()

3 整理需要导出的数据

实现步骤:

1. 存储选中的内容

<el-table :data="list" border stripe highlight-current-row
          @select-all="selectAll"   // 全选
          height="480px"
          @select="selectChange" // 单选
          ref="multipleTable"
          style="width: 100%;">
    <el-table-column
            type="selection"
            width="55">
    </el-table-column>
    <el-table-column v-for="item in tableHeadData" :label="item.name" :width="item.width"  v-if="item.isShow">
        <template slot-scope="scope">
            <span>{{scope.row[item.value]}}</span>
        </template>
    </el-table-column>
</el-table>

  

// 单独选择
selectChange (arr,row) {
  // 判断存数据数组是否为空,进而进行删除和添加的判断
    if (this.selectDataArrL.length > 0) {
        this.selectDataArrL.forEach((item, index) => {
            if (item.fulfillmentControl == row.fulfillmentControl) {
                this.selectDataArrL.splice(index,1)
            } else {
                this.selectDataArrL.push(row)
            }
        })
    } else {
        this.selectDataArrL.push(row)
    }
},

  

// 全选
selectAll (arr) {
  // 判断全选选中数据是否为空
    if (arr.length > 0) {
        this.selectDataArrL = this.selectDataArrL.concat(arr)
    } else {
        this.selectDataArrL.forEach((item,index) => {
            this.list.forEach(ms => {
                if (item.fulfillmentControl == ms.fulfillmentControl) {
                    this.selectDataArrL = this.selectDataArrL.filter(item => item.fulfillmentControl != ms.fulfillmentControl)
                }
            })
        })
    }
},

  

2. 实现选中内容打勾✔状态;切换页码或者条数重新请求数据

let data = {
    currentPage: this.currentPage,
    pageSize: this.pageSize,
}
axios.post(url, data).then((response) => {
  // 尝试同步赋值无效,然后采用延时赋值
  // this.list 代表列表数据
    setTimeout(() => {
        this.selectDataArrL.forEach(item =>{
            this.list.forEach(listitem => {
                if (item.fulfillmentControl == listitem.fulfillmentControl) {
                    this.$refs.multipleTable.toggleRowSelection(listitem, true)
                }
            })
        })
    },0)
})

  

3. 导出数据整理

let ids = []
vm.selectDataArrL.forEach(item => {
  // 如果页面中先单选3条数据,后全选10条数据,就会存起来13条数据;取消全选会全部取消13条
   // 导出数据整理,通过判断去除重复数据
    if (ids.indexOf(item.fulfillmentControl) < 0) {
        ids.push(item.fulfillmentControl)
    }
})

  

 原链接: https://www.cnblogs.com/guozongzhang/p/10653320.html

 

posted @ 2019-05-21 18:27  星星糖  阅读(4999)  评论(0编辑  收藏  举报