vue+iview Table表格多选切换分页保持勾选状态

第一种情况(配合后端做选中数据处理)

定义三个参数,是否为全选(isSelectAll)、不是全选时选择的数据(selectObject: [])、反选数据(unSelectObject:[])

HTML

			<Alert show-icon v-show="openTip">
			              已选择
              <span class="select-count" v-if="isSelectAll">{{ total-unSelectObject.length }}							</span><span class="select-count" v-if="!isSelectAll">{{ selectObject.length }}</span><a class="select-clear" @click="clearSelectAll">清空</a>
              <span class="button">
                <Button @click="onSelectAll" type="primary">全选</Button>
              </span>
              <span class="button">
                <Button @click="selectAllcancel" type="primary">取消全选</Button>
              </span>
            </Alert>
            <Table
              :loading="loading"
              border
              :columns="columns"
              :data="data"
              @on-select-all="selectAll"
              @on-select-all-cancel="cancelAll"
              @on-select="TableSelectRow"
              @on-select-cancel="TableSelectCancelRow"
            >
            </Table>
            <Row type="flex" justify="end" class="page">
              <Page
                :current="searchForm.pageIndex"
                :total="total"
                :page-size="searchForm.pageSize"
                @on-change="changePage"
                @on-page-size-change="changePageSize"
                :page-size-opts="[10, 20, 50]"
                size="small"
                show-total
                show-elevator
                show-sizer
              ></Page>
            </Row>

data

	data: [],
	isSelectAll: false,
	condition: '',
    selectObject: [],
    unSelectObject: [],
	selectEquipsIds: '0',

JS

	// 全选
    onSelectAll() {
      this.isSelectAll = true
      this.getDataList()
    },
	//取消全选
    selectAllcancel() {
      this.isSelectAll = false
      this.selectEquipsIds = '0'
      this.getDataList()
    },
	//全选当前页
    selectAll() {
      if (this.isSelectAll) {
        for (let i = this.data.length - 1; i >= 0; i--) {
          var _index = this.unSelectObject.indexOf(this.data[i].id)
          if (_index != -1) {
            this.unSelectObject.splice(_index, 1)
          }
        }
        console.log(this.unSelectObject)
      } else {
        for (let i = this.data.length - 1; i >= 0; i--) {
          this.selectObject.push(this.data[i].id)
        }
        console.log(this.selectObject)
      }
    },
    // 取消当前页
    cancelAll() {
      if (this.isSelectAll) {
        for (let i = this.data.length - 1; i >= 0; i--) {
          this.unSelectObject.push(this.data[i].id)
        }
         console.log(this.unSelectObject)
      } else {
        for (let i = this.data.length - 1; i >= 0; i--) {
          var _index = this.selectObject.indexOf(this.data[i].id)
          if (_index != -1) {
            this.selectObject.splice(_index, 1)
          }
        }
        console.log(this.selectObject)
      }
    },
    // 选中一行
    TableSelectRow(selection, row) {
      if (this.isSelectAll) {
        var _index = this.unSelectObject.indexOf(row.id)
        if (_index != -1) {
          this.unSelectObject.splice(_index, 1)
          console.log(this.unSelectObject)
        }
      } else {
        if (!this.selectObject.includes(row.id)) {
          this.selectObject.push(row.id)
          console.log(this.selectObject)
        }
      }
    },
    // 取消选中一行
    TableSelectCancelRow(selection, row) {
      if (this.isSelectAll) {
        this.unSelectObject.push(row.id)
      } else {
        var _index = this.selectObject.indexOf(row.id)
        if (_index != -1) {
          this.selectObject.splice(_index, 1)
          console.log(this.selectObject)
        }
      }
    },
    // 判断是否选中
    sortData() {
      if (this.isSelectAll) {
        for (let i = this.data.length - 1; i >= 0; i--) {
          if (!this.unSelectObject.includes(this.data[i].id)) {
            this.data[i]._checked = true
          }
        }
      } else {
        if (this.selectObject.length) {
          this.data.forEach((ele) => {
            if (this.selectObject.includes(ele.id)) ele._checked = true
          })
        }
      }
    },
	getDataList() {
      // 多条件搜索用户列表
      this.loading = true
      api().then((res) => {
        this.loading = false
        if (res.success) {
          this.data = res.result?.records
          this.sortData()  //分页时保留选中状态
          if (this.data.length == 0 && this.searchForm.pageIndex > 1) {
            this.searchForm.pageIndex -= 1
            this.getDataList()
          }
        }
      })
    },

实现效果

全选效果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
单独选择效果
在这里插入图片描述
在这里插入图片描述
整页全选选择效果
在这里插入图片描述
在这里插入图片描述
整页全选+单选
在这里插入图片描述
在这里插入图片描述

第二种情况(只给后端传需要传的数据)

定义一个参数,已选数据(selectObject:[])

HTML

		<div class="table-div"> 
			<Table :columns="columns" 
				:data="tableList" 
				@on-select-all="selectAll" 
				@on-select-all-cancel="cancelAll" 
				@on-select="TableSelectRow" 
				@on-select-cancel="TableSelectCancelRow" />
		</div>
		<Row type="flex" justify="end" class="page">
              <Page
                :current="searchForm.pageIndex"
                :total="total"
                :page-size="searchForm.pageSize"
                @on-change="changePage"
                @on-page-size-change="changePageSize"
                :page-size-opts="[10, 20, 50]"
                size="small"
                show-total
                show-elevator
                show-sizer
              ></Page>
            </Row>

data

	data: [],
    selectObject: [],

JS

	// 判断是否选中 
			sortData() {
				if (this.selectEquipsIds.length) {
					this.tableList.forEach(ele => {
						if (this.selectEquipsIds.includes(ele.id)) ele._checked = true;
					})
				}
			},
			// 选中一行
			TableSelectRow(selection, row) {
				if (!this.selectEquipsIds.includes(row.id)) {
					this.selectEquipsIds.push(row.id);
					 
				}
			},
			// 取消选中一行
			TableSelectCancelRow(selection, row) {
				var _index = this.selectEquipsIds.indexOf(row.id);
				if (_index != -1) {
					this.selectEquipsIds.splice(_index, 1);
					 
				}
			},
			// 选中所有
			selectAll() {
				for (let i = this.tableList.length - 1; i >= 0; i--) {
					this.TableSelectRow(null, this.tableList[i]);
				}
			},
			// 取消选中所有
			cancelAll() {
				for (let i = this.tableList.length - 1; i >= 0; i--) {
					this.TableSelectCancelRow(null, this.tableList[i]);
				}
			},
			// 翻页查询
			onChange(param) {
				this.page.PageIndex = param;
				this.getDataList();
			},
			// 选择分页数
			onPageSizeChange(param) {
				this.page.PageSize = param;
				this.getDataList();
			},
			// 查询表格数据 
			getDataList() {
		      // 多条件搜索用户列表
		      this.loading = true
		      api().then((res) => {
		        this.loading = false
		        if (res.success) {
		          this.data = res.result?.records
		          this.sortData()
		          // this.total = res.result.total
		          if (this.data.length == 0 && this.searchForm.pageIndex > 1) {
		            this.searchForm.pageIndex -= 1
		            this.getDataList()
		          }
		        }
		      })
		    },
		},

以上均已实测可用。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值