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
    }
  })
}

得到的效果:

相关推荐
晚安日记wanna3 分钟前
TS const 类型参数一道面试题的四层追问
前端·面试·typescript
用户921080262866 分钟前
前端 Vue 专栏 09:Vue Router 与前端路由
前端
無限進步D37 分钟前
Java Web 前端 简介
java·开发语言·前端·css·html·css3·web
码士集团小青42 分钟前
从落地到“半停用“:qiankun 微前端在一个 Vue 3 + Vite 项目中的完整实践与反思
前端
the局外人1 小时前
掌控自己的 K 线数据:TradingView 本地部署与数据源接入
前端·vue.js·websocket
deli0072 小时前
配色对比度检查器:一眼看清文字和背景谁看不清
前端
梦诺2 小时前
vue3 keepAlive+记录滚动条
前端·javascript·vue.js
葡萄城技术团队2 小时前
SpreadJS V19.2 新特性揭秘:甘特表的进度线
前端
计算机魔术师2 小时前
黄仁勋台上接特朗普电话开免提,全场听到一句话:AI 不会减速
前端
yivifu2 小时前
HTML元素的textContent和innerText两个属性的差别
前端·html