首页 > 其他分享 >element plus -- el-table 中分页选中回显

element plus -- el-table 中分页选中回显

时间:2023-11-15 19:46:19浏览次数:35  
标签:el const 回显 -- isAdd value multipleSelection productId row

需求:

切换分页或者根据筛选条件过滤后 选中项依然保持选中状态

代码:

 <el-row class="pro-list-container">
    <el-table
      :data="productAttrs"
      ref="multipleTable"
      class="pro-table"
      :header-cell-style="{ background: 'var(--el-fill-color-light)' }"
      @select="handleCheckClick"
      @select-all="handleAllClick"
      @row-click="handleRowClick"
    >
      <el-table-column type="selection" width="50" />
      <el-table-column prop="name" label="产品名称" min-width="120 " >
        <template #default="scope">
          <el-row class="product-name">
            <el-image class="pro-img" v-if="scope.row.pic" :src="scope.row.pic"></el-image>
            <img class="pro-img" v-else src="../../../../../../assets/image/product_empty.png" />
            <el-row class="pro-text">
              <span class="pro-title" @click="handleTargetDetail(scope.row)">{{ scope.row.name }}</span>
              <span class="pro-three" v-if="scope.row.threeLevelName">{{ scope.row.threeLevelName }}</span>
              <span class="pro-three" v-else>{{ scope.row.twoLevelName }}</span>
            </el-row>
          </el-row>
        </template>
      </el-table-column>
      <el-table-column prop="productSn" label="物料编号" />
      <el-table-column prop="panelMaterial" label="面板材质" />
      <el-table-column prop="panelButtonType" label="按键类型" />
      <el-table-column prop="price" label="市场价">
        <template #default="scope">
          <span>¥{{ scope.row.price }}</span>
        </template>
      </el-table-column>
      <el-table-column prop="isChecked" label="是否选中">
        <template #default="scope">
          <span>{{ scope.row.isChecked }}</span>
        </template>
      </el-table-column>
    </el-table>
    <el-row class="pro-footer">
      <el-button class="con-btn" type="primary" @click="handleGetCheckList(false)">确定</el-button>
      <IocPagination
        class="pagination-fixed"
        :total="total"
        v-model:current-page="currentPage"
        v-model:page-size="pageSize"
        @handleCurrentChange="handleCurrentChange"
        @handleSizeChange="handleSizeChange"
      />
    </el-row>
  </el-row>

主要方法:

// row:表格行;isAdd:是否勾选
const rowChangeAll = (row, isAdd) => {
  const index = multipleSelection.value.findIndex(item => item.productId === row.productId)
  // 不存在只能加,存在只能减
  if (index === -1) {
    if (isAdd) {
      multipleSelection.value.push(row)
    }
  } else {
    if (!isAdd) {
      multipleSelection.value.splice(index, 1)
    }
  }
  console.log(multipleSelection.value, 'multipleSelection.value')
}


// 单选
const handleCheckClick = (selection, row) => {
  const isAdd = selection.some(selectRow => selectRow.productId === row.productId)
  rowChangeAll(row, isAdd)
}
//全选
const handleAllClick = selection => {
  console.log(selection, '全选')
  // 默认当页全选
  let isAdd = true
  let changeSelect = selection.slice()
  if (!changeSelect.length) {
    // 取消当页全选,获取表格当前页所有数据
    isAdd = false
    changeSelect = productAttrs.value.slice()
  }
  // 全选时,存在之前已经选上;只加不删
  changeSelect.forEach(row => {
    rowChangeAll(row, isAdd)
  })
}

const handleRowClick = row => {
  row.isChecked = !row.isChecked
  multipleTable.value.toggleRowSelection(row)
}

watch(
  () => props.checkData,
  newValue => {
    nextTick(() => {
      multipleSelection.value = newValue
    })
  },
  {
    deep: true
  }
)
watch(
  () => props.tableData,
  newValue => {
    nextTick(() => {
      newValue.forEach(select => {
        const resRow = multipleSelection.value.find(row => select.productId === row.productId)
        if (resRow) {
          select.isChecked = true
          multipleTable.value.toggleRowSelection(select, true)
        }
      })
      productAttrs.value = newValue
    })
  },
  { deep: true }
)

 

标签:el,const,回显,--,isAdd,value,multipleSelection,productId,row
From: https://www.cnblogs.com/zhu-xl/p/17834614.html

相关文章

  • 线程的锁
    乐观锁:调用时,假设资源没有被线程调用,调用前,调用方法将内存中资源的值和预期的原值进行比较,如果一致则更新,否则不做任何操作悲观锁:调用时,假设资源总是被线程调用,每次使用时都加锁,例如sychronized场景:乐观锁适用于重试代价不大/数据争用不严......
  • 【论文阅读笔记】【Image Retrieval】 Global Features are All You Need for Image R
    SuperGlobalICCV2023读论文思考的问题论文试图解决什么问题?图片检索方法通常由粗粒度图片检索和精确的结果重排列两个模块组成。人们通常认为图片的localfeature在结果重排列中是不可或缺的,但对大量的localfeature的计算需要较高的计算资源和时间能否只用图片......
  • windows bat批处理 hack小工具的文件编写(除了library要自己调整外都可以用)
    @echooffcolor0Amodeconcols=1500lines=1500mshtavbscript:msgbox("welcometothe江南的江万能工具箱")(window.close)title"hackjiang":HACKclsecho[][][][][][][][][][][][][][][][][][][][][]......
  • 11.15鲜花
    最近和HZOI2023还在衡实的一些人混的挺熟的,不过有点抽象回来吧HZOI新高一没去本部的人,我最骄傲的信仰历历在目的森林,眼泪莫名在流淌依稀记得CS1.6还有给力的MC把我的世界地下城都打退,熬夜颓游戏也不累昨天中午被通报扣手,恼了抱着天依玩偶睡觉,晚上1点醒了发现我把天依当枕......
  • Jsoncpp的使用
    目录动态库和静态库生成Jsoncpp的使用value类构造函数检测保存的数据类型将value对象转换为实际类型对json数组的操作对json对象的操作将Value对象数据序列化为stringfastwriter类reader类VS的配置简单的示例代码动态库和静态库生成https://github.com/open-source-parsers/jso......
  • Java流程控制12:打印三角形及Debug
    publicclassTestDemo{publicstaticvoidmain(String[]args){//打印三角形5行for(inti=1;i<=5;i++){for(intj=5;j>=i;j--){System.out.print("");}for(intj=......
  • 【笔记】判环
    【笔记】判环整理一下主流且比较好写的两种方法:一、Tarjan(有无向图都推荐这种写法)有向图就用强连通分量,无向图的话同样魔改一下:每一条边不能反着再走一遍。有向图:#include<bits/stdc++.h>#defineF(i,l,r)for(inti=l;i<=r;++i)#defineG(i,r,l)for(inti=r;i>=l;--i)us......
  • 记录--产品:请给我实现一个在web端截屏的功能!
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助一、故事的开始最近产品又开始整活了,本来是毫无压力的一周,可以小摸一下鱼的,但是突然有一天跟我说要做一个在网页端截屏的功能。作为一个工作多年的前端,早已学会了尽可能避开麻烦的需求,只做增删改查就行!我立马开......
  • SQL server 恢复数据库
    1、查找已置疑的数据库文件存放位置;2、将SQL数据库停止;3、将置疑的数据库的数据文件RongShiYKT.mdf、RongShiYKT_Log.Ldf文件拷贝到其他目录备份;4、重启SQL数据库,将置疑的数据分离5、重建一个与置疑数据库同名称的新数据库RongShiYKT;6、停止SQL服务器,将备份的旧数据文件RongS......
  • 11.15
    (本来只是觉得丁真爆典好玩所以记一下,但这玩意爆率咋这老高)ex丁真语录tkth:醋的英语咋说啊DZ:fat(还挺6的)某人:你**在干啥啊DZ:fat(更6了)某些人:。。。DZ:fat—>胖—>粗—>醋(莫名感到一阵冷意)(后来又加了句)其实sorewater也行玩汤的时候就不多说了,唐的太厉害了,要不然闲话真......