Element分页跨页全选操作(跨页记住已经勾选)

1.HTLM 添加按钮全选,要有一个全选标识状态

<el-button
        type="success"
              @click="selectAll"
            >
              {{ sign === 1 ? '全 选' : '取 消 全 选' }}
    </el-button>

    Table
     <el-table
              v-loading="loading"
              ref="accessControlTable"
              :data="tableData"
              :max-height="tableHeight"
              :span-method="arraySpanMethod"
              header-cell-class-name="custom-table"
              @selection-change="handleSelectionChange"
              @select="selectExceptCardIds"
              @select-all="selecetAll"
            >
              <el-table-column
                type="selection"
                width="30"
              />
              <el-table-column
                prop="id"
                type="index"
                align="center"
                width="50"
                label="序号"/>
            ...
        </el-table>

2.JS相关代码如下:

// 数据
  data() {
    return {
            tableData: [],
            sign: 1, // 是否点击全选,1未点击全选,2,点击全选
            checkedArr: [], // 勾选的行数组
            uncheckedArr: [], // 取消勾选的行数组
    }

表格数据获取接口返回值要做如下操作
// 切换分页及分页条数全选

  this.sign === 2 && this.chooseAllPages()
  this.sign === 1 && this.checkedSelected()

相关操作方法如下:

// 选中事件
    handleSelectionChange(val) {
      console.log('多选id===handleSelectionChange', val)
    },
// 合并表格最后三列
    arraySpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 6) {
        return [0, 0]
      } else if (columnIndex === 5) {
        return [1, 2]
      }
    },
// 全选切换
    selectAll() {
      this.sign = this.sign === 1 ? 2 : 1
      console.log('sign', this.sign)
      this.chooseAllPages()
      this.checkedArr = []
      this.uncheckedArr = []
    },
    // 全选所有页面
    chooseAllPages() {
      if (this.sign === 2) {
        // 全选
        this.$nextTick(() => {
          this.tableData.forEach(row => {
            // 没有取消过的勾选
            if (this.uncheckedArr.map(v => v.id).indexOf(row.id) < 0) {
              this.$refs.accessControlTable.toggleRowSelection(row, true)
            }
          })
        })
      } else {
        // 取消全选
        this.$nextTick(() => {
          this.$refs.accessControlTable.clearSelection()
        })
      }
    },
// 切换分页时选择之前选中
    checkedSelected() {
      console.log('切换分页时选择之前选中')
      this.$nextTick(() => {
        if (this.checkedArr.length === 0) return
        this.tableData.forEach(row => {
          if (this.checkedArr.map(v => v.id).indexOf(row.id) >= 0) {
            this.$refs.accessControlTable.toggleRowSelection(row, true)
          }
        })
      })
    },
// 全选后取消单个选择事件,当用户手动勾选数据行的 Checkbox 时触发的事件
    selectExceptCardIds(selection, row) {
      // selection 当前页面所有选中的项
      // row 当前点击操作的项
      console.log('全选后取消单个选择事件,当用户手动勾选数据行的 Checkbox 时触发的事件', selection, row)
      // 所有页面不全选
      if (this.sign === 1) {
        if (selection.indexOf(row) >= 0) {
          // 新增(勾选上)
          selection.map(el => {
            if (this.checkedArr.map(v => v.id).indexOf(el.id) === -1) {
              this.checkedArr.push(el)
            }
          })
          console.log('所有选中的', this.checkedArr)
        } else {
          // 取消勾选
          this.checkedArr.map((el2, index) => {
            if (el2.id === row.id) {
              this.checkedArr.splice(index, 1)
            }
          })
          console.log('删除后选中的', this.checkedArr)
        }
      } else {
        // 所有页面全选
        if (selection.indexOf(row) >= 0) {
          // 重新勾选上
          this.uncheckedArr.map((el, index) => {
            if (el.id === row.id) {
              this.uncheckedArr.splice(index, 1)
            }
          })
        } else {
          // 取消勾选
          this.uncheckedArr.push(row)
        }
        console.log('剔除的id集合', this.uncheckedArr)
      }
    },
// 当前页面全选
    selecetAll(selection) {
      console.log('当前页面全选', selection)
      if (this.sign === 1) {
        // 不是全选按钮状态下-考虑选中哪些
        if (selection.length > 0) {
          // 选中
          selection.map(row => {
            if (this.checkedArr.map(v => v.id).indexOf(row.id) < 0) {
              this.checkedArr.push(row)
            }
          })
        } else {
          // 取消选中
          this.tableData.map(row => {
            this.checkedArr.map((el2, index) => {
              if (el2.id === row.id) {
                this.checkedArr.splice(index, 1)
              }
            })
          })
        }
        console.log('不是全选按钮状态下-考虑选中哪些', this.checkedArr)
      } else {
        // 全选按钮状态下-考虑不选中哪里
        if (selection.length === 0) {
          this.tableData.map(row => {
            this.uncheckedArr.push(row)
          })
        } else {
          selection.map(row => {
            this.uncheckedArr.map((el, index) => {
              if (el.id === row.id) {
                this.uncheckedArr.splice(index, 1)
              }
            })
          })
        }
        console.log('全选按钮状态下-考虑不选中哪里', this.uncheckedArr)
      }
    },

备注:其中id是每条记录的唯一标识,当全选按钮点击后,按钮变成取消全选,切换标识sign的值,接口传参带入全选标识和剔除行id数组uncheckedArr,若是默认状态非全选,则带入非全选标识和选中行id数组checkedArr。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • 用到的组件 1、通过CocoaPods安装 2、第三方类库安装 3、第三方服务 友盟社会化分享组件 友盟用户反馈 ...
    SunnyLeong阅读 14,615评论 1 180
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,523评论 16 22
  • 创业是很多人的梦想,多少人为了理想和不甘选择了创业来实现自我价值,我就是其中一个。 创业后,我由女人变成了超人,什...
    亦宝宝阅读 1,810评论 4 1
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,564评论 0 11
  • 可爱进取,孤独成精。努力飞翔,天堂翱翔。战争美好,孤独进取。胆大飞翔,成就辉煌。努力进取,遥望,和谐家园。可爱游走...
    赵原野阅读 2,727评论 1 1