vue3实现el-table翻页选中数据不变及根据已有数据默认选中

html 复制代码
<el-table ref="dataTable" border stripe highlight-current-row v-loading="dataListLoading"
              :data="dataList"
              :row-key="getRowKey"
              @row-click="rowClick"
              @select="getSelected"
              @select-all="getSelected">
      <el-table-column v-if="isShow" type="selection" width="55"  :reserve-selection="true" />
      <el-table-column prop="customerAbbreviation" header-align="center" align="center" label="客户编码"/>
      <el-table-column prop="customerName" header-align="center" align="center" label="客户姓名"/>
      <el-table-column prop="kernelEmployeeName" header-align="center" align="center" label="主要维护人"/>
    </el-table>

1、实现翻页选中数据不变

在el-table中添加:row-key='getRowKey'属性,在type=selection的el-table-column中添加:reserve-selection='ture'

javascript 复制代码
// 保持选中状态
function getRowKey(row){
  return row.id
}

2、根据已有数据默认选中

点击父组件放大镜:

javascript 复制代码
// 客户选择
function showCustomerSelect() {
  customerSelectVisible.value = true
  nextTick(() => {
    proxy.$refs.customerSelectRef.init()
  })
}

点击放大镜初始化子组件客户列表代码:

javascript 复制代码
function init() {
  dialogVisible.value = true
  nextTick(() => {
    initData()
    //table列表数据
    getDataList() 
    
    //根据选中数据默认选中
    const tageData = props.selectTagData
    dataList.value.forEach(item=>{
      if(tageData.length>0){
        tageData.forEach(selected=>{
          if(selected.id === item.id){
            proxy.$refs.dataTable.toggleRowSelection(item,true)
          }else{
            proxy.$refs.dataTable.clearSelection()
          }
        })
      }else{
        proxy.$refs.dataTable.clearSelection()
      }
    })
  })
}

在获取table列表数据的方法中添加对应代码如下:

javascript 复制代码
// 获取数据列表
function getDataList() {
  dataListLoading.value = true
  listCustomer({
    pageNum: pageIndex.value,
    pageSize: pageSize.value,
    name: dataForm.value.name,
    type:dataForm.value.type
  }).then(response => {
    if (response && response.code === 200) {
      dataList.value = response.data.records
      totalPage.value = response.data.total
      //主要代码
      //checkData.value最新需要选中的数据,props.selectTagData原来选中的数据
      //根据选中数据默认选中
      const tageData = props.selectTagData
      dataList.value.forEach(item=>{
        tageData.forEach(selected=>{
          if(selected.id === item.id){
            proxy.$refs.dataTable.toggleRowSelection(item,true)
          }
        })
      })
      dataListLoading.value = false
    }
  })
}

得到的效果:

相关推荐
必须会一定会3 分钟前
Agent Handoff M5 发布验收:`CHANGES.md`、`npm pack`、`release:check` 与干净环境安装验证
前端·人工智能·npm·node.js·ai编程
有脚就行20 分钟前
第07篇-ReAct模式详解-推理与行动的交替循环
前端·react.js·前端框架
未来之窗软件服务37 分钟前
Web 技能的自主测试系统开好处发架构思维-东方仙盟
大数据·前端·架构·仙盟创梦ide·东方仙盟
吠品40 分钟前
OkHttp 多文件上传的一个实现
java·服务器·前端
lilian23344 分钟前
Harmony os 技术实战|拼豆制图46:图片解码失败为何不能悄悄返回示例图
前端·javascript·华为·harmonyos
zzzzzz3102 小时前
react-bits:从 36K Stars 的组件库,看动画交互组件该如何被评估
前端·react.js·动效
Setsuna_F_Seiei9 小时前
前端的 AI 学习之路 01 之 Agent API 调用 - 和 Agent 的基础对话
前端·人工智能·ai编程
threerocks10 小时前
AI 原生软件开发生命周期手册 - 如何借助 AI,逐阶段改造软件开发生命周期
前端·javascript·后端
徐小夕10 小时前
3分钟从想法到Agent上线:我们开源了一款AI可视化工作流“IDE”
前端·算法·github
why技术12 小时前
eli5,我觉得这个全网在吹的技能,使用体验真的很一般啊。
前端·人工智能·后端