zoukankan      html  css  js  c++  java
  • 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=" 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

  • 相关阅读:
    [LeetCode] Majority Element II
    [Nginx] 事件模型
    [Nginx] 进程模型
    [C++] 函数中的字符串指针与数组
    [LeetCode] Shortest Distance to a Character
    [LeetCode] Number of Lines To Write String
    Ubuntu 16.04中安装谷歌Chrome浏览器
    Python、机器学习、计算机视觉、深度学习入门
    Sublime安装与配置
    [20160807][系统设计的三次迭代]
  • 原文地址:https://www.cnblogs.com/star-x/p/10901561.html
Copyright © 2011-2022 走看看