element跨分页操作选择详解


Posted in Javascript onJune 29, 2020

本文实例为大家分享了element跨分页操作选择的具体代码,供大家参考,具体内容如下

业务需求:在批量导出或者批量删除的时候会涉及到跨分页导出或者批量删除,这是你会发现,当你选择后点击分页,发现之前选择的数据已经没有了,现在就是要满足分页点击分页后原始数据保留

<template>
  <div>
    <el-table
      :data="tableData"
      tooltip-effect="dark"
      style="width: 100%;"
      header-align="left"
      border
      ref="table"
      row-key="serviceDateId"
      @selection-change="handleSelectionChange"
      @row-dblclick="toDetail"
      @sort-change="sortChange"
    >
    <el-table-column type="selection" el-table-column width="50" fixed="left"></el-table-column>
    <el-table-column label="序号" width="80" fixed="left">
      <template slot-scope="{row,$index}">
        <span>{{$index + 1}}</span>
      </template>
    </el-table-column>
    <el-table-column label="服务日期" prop="serviceDate" sortable="custom" min-width="120" ></el-table-column>
    <el-table-column label="服务对象" prop="vsoName" min-width="120"></el-table-column>
    <el-table-column label="身份证号" prop="idCard" sortable="custom" min-width="200"></el-table-column>
    <el-table-column label="服务内容" prop="serviceContentName" min-width="200"></el-table-column>
    <el-table-column label="服务结果" prop="serviceResultName" min-width="100"></el-table-column>
    <el-table-column label="志愿者" prop="volunteerName" sortable="custom" min-width="120" show-overflow-tooltip></el-table-column>
    <el-table-column label="志愿者所属组织" prop="objName" min-width="200" show-overflow-tooltip></el-table-column>
    <el-table-column fixed="right" label="操作" width="150" header-align="center">
      <template slot-scope="{row,$index}">
        <span @click="handleEdit(row)" class="table-btn" v-has="{class: '编辑'}">编辑</span>
        <span @click="handleRemove($index, row)" class="table-btn"
          v-has="{class: '删除'}">删除</span>
      </template>
    </el-table-column>
  </el-table>
  <pagination
    v-show="total>0"
    :total="total"
    :page.sync="form.pageNum"
    :limit.sync="form.pageSize"
    @pagination="getData(form)"
  />
  </div>
</template>
<script>
export default {
  data(){
    return{
      ruleForm: {
        username: '',
        password:''
      },
      form: {
        pageNum: 1, // 分页页数
        pageSize: 10, // 分页数量
      },
      multipleSelection: [], //多选的行数据
      multipleSelectionAll:[],// 当前页选中的数据
      idKey: 'idCard',
    }
  },
  methods: {
   setSelectRow() {
      if (!this.multipleSelectionAll || this.multipleSelectionAll.length <= 0) {
        return;
      }
      // 标识当前行的唯一键的名称
      let idKey = this.idKey;
      let selectAllIds = [];
      let that = this;
      this.multipleSelectionAll.forEach(row=>{
        selectAllIds.push(row[idKey]);
      })
      this.$refs.table.clearSelection();
      for(var i = 0; i < this.tableData.length; i++) {  
        if (selectAllIds.indexOf(this.tableData[i][idKey]) >= 0) {
        // 设置选中,记住table组件需要使用ref="table"
          this.$refs.table.toggleRowSelection(this.tableData[i], true);
        }
      }
    },
      // 记忆选择核心方法
    changePageCoreRecordData () {
      // 标识当前行的唯一键的名称
      let idKey = this.idKey;
      let that = this;
      //如果总记忆中还没有选择的数据,那么就直接取当前页选中的数据,不需要后面一系列计算
      if (!this.multipleSelectionAll.length) {
        this.multipleSelectionAll = this.multipleSelection;
        return;
      }
      // 总选择里面的key集合
      let selectAllIds = [];
      this.multipleSelectionAll.forEach(row=>{
        selectAllIds.push(row[idKey]);
      })
      let selectIds = []
      // 获取当前页选中的id
      this.multipleSelection.forEach(row=>{
        selectIds.push(row[idKey]);
        // 如果总选择里面不包含当前页选中的数据,那么就加入到总选择集合里
        if (selectAllIds.indexOf(row[idKey]) < 0) {
          that.multipleSelectionAll.push(row);
        }
      })
      let noSelectIds = [];
      // 得到当前页没有选中的id
      this.tableData.forEach(row=>{
        if (selectIds.indexOf(row[idKey]) < 0) {
          noSelectIds.push(row[idKey]);
        }
      })
      noSelectIds.forEach(id=>{
        if (selectAllIds.indexOf(id) >= 0) {
          for(let i = 0; i< that.multipleSelectionAll.length; i ++) {
            if (that.multipleSelectionAll[i][idKey] == id) {
            // 如果总选择中有未被选中的,那么就删除这条
            that.multipleSelectionAll.splice(i, 1);
            break;
            }
          }
        }
      })
    },
    // 多选的行数据
    handleSelectionChange(val) {
      this.multipleSelection = val
        setTimeout(()=>{
      this.changePageCoreRecordData();
      }, 50)
    },
    // 获取表格数据
    getData(form) {
      let parmas = _.cloneDeep(form);
      parmas.liveArea = typeof(parmas.liveArea) === 'object'?parmas.liveArea.join(''):parmas.liveArea;
      recordSearch(form).then(res => {
        if (res.rows) {
          this.tableData = res.rows;
          this.total = res.total;
          this.exportData = _.cloneDeep(form);
          setTimeout(()=>{
            this.setSelectRow();
          }, 50)
        }
        else {
          this.tableData = [];
          this.total = 0;
        }
      })
    }
  },
  mounted(){
    this.getData(this.form)
  }
}
</script>
<style lang="sass" scoped>
  
</style>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript radio 联动效果
Mar 04 Javascript
ExtJS 2.0实用简明教程 之获得ExtJS
Apr 29 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
Mar 07 Javascript
Ext JS 4实现带week(星期)的日期选择控件(实战一)
Aug 21 Javascript
jquery中radio checked问题
Mar 16 Javascript
轻松学习jQuery插件EasyUI EasyUI表单验证
Dec 01 Javascript
JS实现合并两个数组并去除重复项只留一个的方法
Dec 17 Javascript
JavaScript类的写法
Sep 17 Javascript
微信小程序访问node.js接口服务器搭建教程
Apr 25 Javascript
浅谈JsonObject中的key-value数据解析排序问题
Dec 06 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
Sep 10 Javascript
如何使用Jquery动态生成二级选项列表
Feb 06 jQuery
vue实现数字滚动效果
Jun 29 #Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 #Javascript
Vue实现可移动水平时间轴
Jun 29 #Javascript
uniapp与webview之间的相互传值的实现
Jun 29 #Javascript
基于Element封装一个表格组件tableList的使用方法
Jun 29 #Javascript
iview实现图片上传功能
Jun 29 #Javascript
vue+animation实现翻页动画
Jun 29 #Javascript
You might like
PHP与已存在的Java应用程序集成
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
PHP中去掉字符串首尾空格的方法
2012/05/19 PHP
Laravel中encrypt和decrypt的实现方法
2017/09/24 PHP
浅析PHP开发规范
2018/02/05 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
XENON基于JSON变种
2010/07/27 Javascript
Jquery replace 字符替换实现代码
2010/12/02 Javascript
jQuery Tools tab(幻灯片)
2012/07/14 Javascript
使用jQuery的attr方法来修改onclick值
2014/07/07 Javascript
jQuery表单域属性过滤器用法分析
2015/02/10 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
vue.js实例todoList项目
2017/07/07 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
vue打包使用Nginx代理解决跨域问题
2018/08/27 Javascript
vue 属性拦截实现双向绑定的实例代码
2018/10/24 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
nuxt 实现在其它js文件中使用store的方式
2020/11/05 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
2020/12/14 Vue.js
python smtplib发送带附件邮件小程序
2018/05/22 Python
python的格式化输出(format,%)实例详解
2018/06/01 Python
python3 cvs将数据读取为字典的方法
2018/12/22 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python数据库编程 Mysql实现通讯录
2020/03/27 Python
HTML5 Notification(桌面提醒)功能使用实例
2014/03/17 HTML / CSS
Html5中localStorage存储JSON数据并读取JSON数据的实现方法
2017/02/13 HTML / CSS
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
C语言笔试题回忆
2015/04/02 面试题
升职自荐信范文
2013/10/05 职场文书
国际政治个人自荐信范文
2013/11/26 职场文书
2014年留守儿童工作总结
2014/12/10 职场文书
就业意向书范本
2015/05/11 职场文书
导游词之台湾阿里山
2019/10/23 职场文书