vue3 element plus table selection展示数据,默认选中功能

当打开表格数据时,可能会根据后台返回的数据,默认选中符合条件的行
这样我们就用到了el-table-column,设 type 属性为 selection
1.表格的第一行,设置为:

 <el-table-column type="selection" width="25" />

在这里插入图片描述
2.table上定义ref属性,并且定义这个变量

><script setup lang="ts">
const orgidslistRef = ref<InstanceType<typeof ElTable>>();
<script />

3.在事件中配置一下

  //遍历表格的数据,再遍历需要在表格中反显的数据,两者的id一致
  //创建一个空数组用来存放默认数据
  //allprojectsortids指的是存放表格显示数据的数组,和table绑定的data数据来源一致
  //item我这里是存放条件数组
  //假设:item=[1,2,3],我们需要把allprojectsortids数组中id在item中的行默认选中,即可进行 下面的操作,具体判断操作自行修改.
  const listNew = [];//需要注意的是,这个数组中存放的数据要包含allprojectsortids数组中符合条件行全部的数据,不能只存放id,直接把那一行的数据全部存里面.
async  function edititemcondition(){
 await orgidslistRef.value.clearSelection();//清空选中状态
  allprojectsortids.value.forEach(it => {
    if (item.value.projectsortidslist_ext.indexOf(it.value) > -1) {
      // 把判断出来的默认表格数据push到创建的数组中
      listNew.push(it);
    }
  });


  //方法一 一定设置async  
  // await orgidslistRef.value.clearSelection();//清空选中状态
   //使用for循环方法处理复杂字段 推荐使用
   //orgidslistRef.value定义的ref
   // allprojectsortids.value原表格数据
   // listNew选中的数据
   
  for (let i = 0, i <  listNew.length; i++) {
    orgidslistRef.value.toggleRowSelection(
      allprojectsortids.value.find(item => {
        return listNew[i].value === item.value; // 注意这里寻找的字段要唯一,示例仅参考
      }),
      true
    );
  }


  //方法二
  if (listNew.length > 0) {
    //再遍历数组,将数据放入方法中
    listNew.forEach(row => {
      setTimeout(() => {
        orgidslistRef .value.toggleRowSelection(row, true);
      }, 0);
    });
  }  }

//修改选中的行,重新赋值
在这里插入图片描述

function multipleOrgidslist_ext(val) {
//val选中行的数据
  console.log("%c搜索", "color:red;font-size:30px", val);
  if (val) {
    item.value.orgidslist_ext = [];
    const temp = [];
    for (let i = 0; i < val.length; i++) {
      temp.push(val[i].value);
    }
    item.value.projectsortidslist_ext= temp;
  }
}
//定义的数组
const allprojectsortids = ref(
[
  {
    date: '2016-05-03',
    id:1,
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
  id:2,
    date: '2016-05-02',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id:3,
    date: '2016-05-04',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id:4,
    date: '2016-05-01',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },
  {
    id:5,
    date: '2016-05-08',
    name: 'Tom',
    address: 'No. 189, Grove St, Los Angeles',
  },

]
)

//结果
在这里插入图片描述
注意:支持树形结构

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
可以考以下步骤将 Vue3 中的 Element Plus 穿梭框转换为表格穿梭框: 1. 创建表格及其数据 首先,需要创建一个表格及其数据,例如: ```html <el-table :data="tableData" style="width: 100%"> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> ``` ```javascript data() { return { tableData: [ { name: 'John', age: 20, address: 'New York' }, { name: 'Mary', age: 22, address: 'Los Angeles' }, { name: 'Tom', age: 25, address: 'Chicago' } ], leftList: [], rightList: [] }; } ``` 注意,这里还定义了 `leftList` 和 `rightList` 数组,用于存储穿梭框的选中项。 2. 创建表格穿梭框 接下来,需要创建一个包含两个穿梭框和操作按钮的组件,例如: ```html <template> <div class="table-transfer"> <div class="table-transfer-left"> <el-table ref="leftTable" :data="leftList" style="width: 100%" @selection-change="handleSelectionChange('left')" > <el-table-column type="selection"></el-table-column> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> </div> <div class="table-transfer-buttons"> <el-button type="primary" icon="arrow-right" @click="transferRight"></el-button> <el-button type="primary" icon="arrow-left" @click="transferLeft"></el-button> </div> <div class="table-transfer-right"> <el-table ref="rightTable" :data="rightList" style="width: 100%" @selection-change="handleSelectionChange('right')" > <el-table-column type="selection"></el-table-column> <el-table-column prop="name" label="Name"></el-table-column> <el-table-column prop="age" label="Age"></el-table-column> <el-table-column prop="address" label="Address"></el-table-column> </el-table> </div> </div> </template> <script> export default { data() { return { leftList: [], rightList: [] }; }, methods: { transferRight() { const selection = this.$refs.leftTable.getSelection(); this.leftList = this.leftList.filter(item => !selection.includes(item)); this.rightList = this.rightList.concat(selection); }, transferLeft() { const selection = this.$refs.rightTable.getSelection(); this.rightList = this.rightList.filter(item => !selection.includes(item)); this.leftList = this.leftList.concat(selection); }, handleSelectionChange(type) { const table = type === 'left' ? this.$refs.leftTable : this.$refs.rightTable; const selection = table.getSelection(); this.$set(this, type + 'List', selection); } } }; </script> <style scoped> .table-transfer { display: flex; justify-content: space-between; align-items: center; } .table-transfer-left { width: 45%; } .table-transfer-buttons { display: flex; flex-direction: column; justify-content: center; align-items: center; width: 10%; } .table-transfer-right { width: 45%; } </style> ``` 其中,`leftList` 和 `rightList` 分别代表左侧表格和右侧表格的数据,`transferRight` 和 `transferLeft` 分别代表将选中项从左侧移至右侧和从右侧移至左侧的方法,`handleSelectionChange` 方法用于监听选中项的变化。 3. 将穿梭框替换为表格穿梭框 最后,将原来的穿梭框替换为表格穿梭框即可。例如,将原来的代码: ```html <el-transfer v-model="value" :data="list"></el-transfer> ``` 替换为: ```html <TableTransfer :leftList="tableData" :rightList="[]"></TableTransfer> ``` 注意,这里的 `TableTransfer` 是前面创建的表格穿梭框组件。同时,传入的 `leftList` 应该是表格的数据,`rightList` 初始值为空数组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值