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


    1. <el-table ref="dataTable" border stripe highlight-current-row v-loading="dataListLoading"
    2. :data="dataList"
    3. :row-key="getRowKey"
    4. @row-click="rowClick"
    5. @select="getSelected"
    6. @select-all="getSelected">
    7. <el-table-column v-if="isShow" type="selection" width="55" :reserve-selection="true" />
    8. <el-table-column prop="customerAbbreviation" header-align="center" align="center" label="客户编码"/>
    9. <el-table-column prop="customerName" header-align="center" align="center" label="客户姓名"/>
    10. <el-table-column prop="kernelEmployeeName" header-align="center" align="center" label="主要维护人"/>
    11. el-table>

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

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

    1. // 保持选中状态
    2. function getRowKey(row){
    3. return row.id
    4. }

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

    点击父组件放大镜:

    1. // 客户选择
    2. function showCustomerSelect() {
    3. customerSelectVisible.value = true
    4. nextTick(() => {
    5. proxy.$refs.customerSelectRef.init()
    6. })
    7. }

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

    1. function init() {
    2. dialogVisible.value = true
    3. nextTick(() => {
    4. initData()
    5. //table列表数据
    6. getDataList()
    7. //根据选中数据默认选中 dataList.value为需要选择的数据表数据
    8. const tageData = props.selectTagData //父组件传递过来的选中数据
    9. dataList.value.forEach(item=>{
    10. if(tageData.length>0){
    11. tageData.forEach(selected=>{
    12. if(selected.id === item.id){
    13. proxy.$refs.dataTable.toggleRowSelection(item,true)
    14. }else{
    15. proxy.$refs.dataTable.clearSelection()
    16. }
    17. })
    18. }else{
    19. proxy.$refs.dataTable.clearSelection()
    20. }
    21. })
    22. })
    23. }

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

    1. // 获取数据列表
    2. function getDataList() {
    3. dataListLoading.value = true
    4. listCustomer({
    5. pageNum: pageIndex.value,
    6. pageSize: pageSize.value,
    7. name: dataForm.value.name,
    8. type:dataForm.value.type
    9. }).then(response => {
    10. if (response && response.code === 200) {
    11. dataList.value = response.data.records
    12. totalPage.value = response.data.total
    13. //主要代码
    14. //checkData.value最新需要选中的数据,props.selectTagData原来选中的数据
    15. //根据选中数据默认选中
    16. const tageData = props.selectTagData
    17. dataList.value.forEach(item=>{
    18. tageData.forEach(selected=>{
    19. if(selected.id === item.id){
    20. proxy.$refs.dataTable.toggleRowSelection(item,true)
    21. }
    22. })
    23. })
    24. dataListLoading.value = false
    25. }
    26. })
    27. }

    得到的效果:

    3、再次点击放大镜选择其他选项或是取消已选选项

    1. //弹窗列表-客户选择列表
    2. <el-table ref="dataTable" border stripe highlight-current-row v-loading="dataListLoading"
    3. :data="dataList"
    4. :row-key="getRowKey"
    5. @row-click="rowClick"
    6. @select="getSelected"
    7. @select-all="getSelected">
    8. <el-table-column v-if="isShow" type="selection" width="55" :reserve-selection="true" />
    9. <el-table-column prop="customerAbbreviation" header-align="center" align="center" label="客户编码"/>
    10. <el-table-column prop="customerName" header-align="center" align="center" label="客户姓名"/>
    11. <el-table-column prop="kernelEmployeeName" header-align="center" align="center" label="主要维护人"/>
    12. el-table>
    1. const customerData = ref([])
    2. function getSelected(selection, row){
    3. if(initial.value>0 ){
    4. let isCheck = false //是否取消 true=取消 false=不取消
    5. customerData.value.forEach(imgItem => {
    6. if (imgItem.id === row.id) {
    7. // 先findIndex拿到index,否则直接否则直接splice(imgItem,1)是会删除失败的!
    8. customerData.value.splice(customerData.value.findIndex((item) => item.id === row.id), 1)
    9. isCheck = true
    10. }
    11. })
    12. if(!isCheck){
    13. customerData.value.push(row)
    14. }
    15. }else{
    16. customerData.value.push(row)
    17. }
    18. }

  • 相关阅读:
    【leetcode】331. 验证二叉树的前序序列化
    rocky9.1 深度学习环境配置
    Mybatis 拦截器 说明和使用 (二)
    【STM32】基于HAL库建立自己的低功耗模式配置库(STM32L4系列低功耗所有配置汇总)
    力扣5. 最长回文子串(双指针、动态规划)
    Redis 高性能设计之epoll和IO多路复用深度解析
    python+cuda编程(二)
    MySQL读写分离与主从延迟
    JAVA【设计模式】桥接模式
    思腾云计算
  • 原文地址:https://blog.csdn.net/zyj_15067066062/article/details/134014071