el-table 多选回显,分页回显

news/2024/6/18 20:00:22 标签: vue.js, javascript, 前端

实现el-table多选分页回显功能,左侧是分页的数据源,右侧是选择后的人员数据,切换下一页,选中的数据会在左侧表格回显。

实现:

javascript"><template>
  <el-dialog :title="title" :visible.sync="show" :before-close="cancel" center
             width="1050px" custom-class="bind-dialog"
  >
    <div  class="content">
      <div class="left-user" >
        <el-table ref="table" :data="tableData" border :row-key="getRowKeys" style="width: 100%;height: 100%"
                  class="cust-table" size="mini"   @select="handleSelectionChange" @select-all="selectAll">
          <el-table-column :reserve-selection="true" type="selection" width="50" align="center" center></el-table-column>
          <el-table-column v-for="(item, index) in tableTitle" :label="item.label" :prop="item.prop" :key="index"
                           align="center" center :width="item.width"
          >
            <template slot-scope="scope">
              <div v-if="scope.row[item.prop]==null || scope.row[item.prop] ===''">-</div>
              <div v-else>
                {{ scope.row[item.prop] }}
              </div>
            </template>
          </el-table-column>
        </el-table>
      </div>
      <div class="right-user">
        <el-tag
          v-for="tag in selectedUsers"
          :key="tag.userId"
          class="mr8 mb8"
          @close="delUser(tag)"
          closable
        >
          {{ tag.nickName }}
        </el-tag>
      </div>
    </div>
    <pagination
      class="mt12"
      v-show="total>0"
      :total="total"
      :page.sync="page.pageNum"
      :limit.sync="page.pageSize"
      @pagination="queryList"
    />
    <span slot="footer" class="dialog-footer">
       <el-button @click="cancel">取消</el-button>
       <el-button type="primary" @click="confirm">确定</el-button>
     </span>
  </el-dialog>
</template>

el-table的ref、row-key、select、select-all、type="selection"、:reserve-selection="true"都是需要设置的,并且表格绑定的data初始值不能为null,可以设置[]

设置row-key

javascript">  getRowKeys(row) {
      return row.userId
    },

表格选择数据,@select="handleSelectionChange" @select-all="selectAll"  选择单个和全选都要写

javascript"> handleSelectionChange(arr, row) {
     
      const bool = this.selectedUsers.some(user => user.userId === row.userId) // 存在返回true 否则返回false
      if (bool) {
        // 存在删除
        this.selectedUsers = this.selectedUsers.filter(user => user.userId !== row.userId)
      } else {
        // 添加
        this.selectedUsers.push(row)
      }
    },
    selectAll(arr){
      if (arr.length !== 0) {
        // 全选
        arr.forEach(item => {
          const bool = this.selectedUsers.some(user => user.userId === item.userId) // 存在返回true 否则返回false
          if (!bool) {
            // 不存在添加
            this.selectedUsers.push(item)
          }
        })
      } else {
        // 取消全选
        this.tableData.forEach(item => {
          this.selectedUsers = this.selectedUsers.filter(user => user.userId !== item.userId)
        })
      }
    },

删除右侧选中数据的时候,不仅要对右侧选中数组处理,还要把左侧数组的选中状态设为未选中;

javascript"> delUser(node) {
      this.selectedUsers = this.selectedUsers.filter(user => user.userId !== node.userId)
      this.tableData.forEach(item => {
        if (node.userId === item.userId) {
          // 存在添加
          this.$refs.table.toggleRowSelection(item, false)
        }
      })
    },

在数据编辑的时候,回显设置。注意切换table的page的时候要清除table的选中状态,重新设置选中状态,因为当右侧删除选中的数据不是当前页,分页切换的时候要刷新table的选中状态。

javascript">    queryList() {
      this.loading = true
      let queryParams = {
        pageNum: this.page.pageNum,
        pageSize: this.page.pageSize,
      }
      queryUserData(queryParams).then((res) => {
          if (res.code === 200) {
            this.tableData = res.rows
            this.total = res.total
            // 切换分页的时候要清楚table的选中状态,在根据selectedUsers的值设置table选中状态
            this.$refs.table.clearSelection()
            if (this.selectedUsers.length > 0) {
              this.$nextTick(()=>{
                for (let i = 0; i < this.tableData.length; i++) {
                  this.selectedUsers.forEach(item=>{
                    if (item.userId == this.tableData[i].userId){
                      this.$refs.table.toggleRowSelection(this.tableData[i], true);
                    }
                  })

                }
              })
            }
          }
        })
        .finally(() => {
          this.loading = false
        })
    },

css样式设置

javascript"><style lang="scss" scoped>
.bind-dialog {
  .content {
    display: flex;
    height: 406px;

    .left-user {
      flex: 1;
      margin-right: 12px;
    }
 

    .right-user {
      width: 310px;
      padding: 12px;
      height: 100%;
      box-sizing: border-box;
      border: 1px solid #dfe6ec;
      border-radius: 6px;
      overflow: hidden auto;
    }
  }
  .mt12{
    margin-bottom: 12px;
  }
  .mr8{
    margin-right: 8px;
  }
  .mb8{
    margin-bottom: 8px;
  }
}
</style>


http://www.niftyadmin.cn/n/5519850.html

相关文章

.NET C# 实现国密算法加解密

.NET C# 实现国密算法加解密 概述1. SM12. SM23. SM34. SM45. SM76. SM97. ZUC C#代码实现1 SM22 SM33 SM4 概述 国密算法&#xff08;SM算法&#xff09;是中国国家密码管理局制定的一系列密码算法标准。这些算法被广泛应用于各种信息安全领域&#xff0c;包括通信、电子商务…

服务器如何有效解决源IP暴露问题

在现代互联网环境中&#xff0c;服务器的安全性至关重要。源IP暴露不仅增加了服务器遭受DDoS攻击、恶意扫描和数据泄露的风险&#xff0c;还可能影响业务的正常运行。本文将探讨如何利用技术手段&#xff0c;尤其是CDN和防火墙策略&#xff0c;来有效地解决服务器源IP暴露的问题…

HarmongOS打包[保姆级]

创建应用 首先进入 华为开发者联盟-HarmonyOS开发者官网 然后进行登录。 登录成功后&#xff0c;鼠标悬停在在登录右上角那个位置后再点击管理中心&#xff0c;进入下面这个界面。 再点击&#xff1a;应用服务–>应用发布–>新建–>完善信息 构建和生成私钥和证书请求…

【收藏版】常用中间件及业务场景梳理汇总

中间件是指在分布式应用系统中,介于操作系统和应用程序之间的一类软件,为应用程序提供服务并简化其开发。中间件通常用于实现各种业务场景,例如数据处理、消息传递、负载均衡、安全管理等。 以下是一些常见的中间件及其使用场景和方法的详细介绍: 文章目录 1. 数据库中间件…

【单片机毕业设计选题24006】-基于STM32的智能鱼缸系统

系统功能: 采用STM32最小系统板控制&#xff0c;采集传感器数据显示在OLED上 并可通过按键或蓝牙APP控制两路继电器和舵机。 1. 使用DHT11模块采集环境温湿度 2. 使用DS18B20采集鱼缸水温 3. 继电器控制水泵&#xff08;水位过低时加水&#xff09; 4. 继电器模拟控制增氧…

web前端 Socket:深入探索与实战应用

web前端 Socket&#xff1a;深入探索与实战应用 在Web开发领域&#xff0c;Socket技术以其独特的实时通信能力&#xff0c;为前端开发者提供了全新的交互体验。然而&#xff0c;对于初学者来说&#xff0c;Socket的复杂性和多变的应用场景往往令人感到困惑和挑战。本文将从四个…

蚓链数字化营销教你寻找快准直达市场路径小绝招

在当今数字化的商业世界中&#xff0c;蚓链数字化营销成为了企业开拓市场、实现增长的有力工具。它犹如一盏明灯&#xff0c;为您照亮寻找快速直达市场路径的方向。 绝招一&#xff1a;深入的市场调研。利用蚓链数字化营销的大数据分析能力&#xff0c;全面了解目标市场的规模、…

跨域问题以及解决方案

文章目录 1.什么是跨域访问&#xff1f;2. AJAX 请求无法跨域访问的原因&#xff1a;同源策略3. 解决AJAX跨域访问的方案包括哪些3.1 代理服务器方案的实现原理 1.什么是跨域访问&#xff1f; (1) 在a页面中想获取b页面中的资源&#xff0c;如果a页面和b页面所处的协议、域名、…