通过el-table实现表格穿梭框

本文介绍了如何使用Element-UI中的el-transfer组件配合el-table创建具有穿梭功能的表格,展示了如何通过JavaScript管理两侧数据的选中状态和数据交换操作。
摘要由CSDN通过智能技术生成

element-ui自带的el-transfer界面比较简单,通过el-table实现表格形式的穿梭框功能
首先是效果图
在这里插入图片描述
示例图样式比较简单,但是el-table是完全通过div包裹的,所以里面可以自己添加更多的其他组件实现想要的功能

			<div style="display: flex;margin-left: 10%">
              <div style="flex: 1; margin-right: 10px;">
                <el-table :data="designerUserList" @selection-change="handleSelectionChange">
                  <el-table-column type="selection" width="55" />
                  <el-table-column prop="nickName" label="昵称"></el-table-column>
                  <el-table-column prop="userName" label="用户名"></el-table-column>
                  <el-table-column prop="deptName" label="部门"></el-table-column>
                  <el-table-column prop="postName" label="职位"></el-table-column>
                </el-table>
              </div>
              <div style="flex: 1;;margin-top: 10%;margin-left: 1%">
                <el-button @click="removeData()"><el-icon><ArrowLeftBold /></el-icon></el-button>
                <el-button @click="addData()"><el-icon><ArrowRightBold /></el-icon></el-button>
              </div>
              <div style="flex: 1;">
                <el-table :data="designerUserListNew" @selection-change="handleSelectionChangeNew">
                  <el-table-column type="selection" width="55" />
                  <el-table-column prop="nickName" label="昵称"></el-table-column>
                  <el-table-column prop="userName" label="用户名"></el-table-column>
                  <el-table-column prop="deptName" label="部门"></el-table-column>
                  <el-table-column prop="postName" label="职位"></el-table-column>
                </el-table>
              </div>
            </div>

js方法

<script setup>
    const designerUserList = ref([]);
    const designerUserListNew = ref([]);
    const selectedDesignerUserList = ref([]);
    const selectedDesignerUserListNew = ref([]);
    
	// table选中事件
    const handleSelectionChange = (selection) => {
      console.log('Selected Rows:', selection);
      selectedDesignerUserList.value = selection
    };

    // table选中事件
    const handleSelectionChangeNew = (selection) => {
      console.log('Selected Rows:', selection);
      selectedDesignerUserListNew.value = selection
    };

    // 添加数据到右侧
    function addData() {
      selectedDesignerUserList.value.forEach(selectedItem => {
        const index = designerUserList.value.findIndex(item => item.userId === selectedItem.userId);
        if (index !== -1) {
          designerUserList.value.splice(index, 1);
          designerUserListNew.value.push(selectedItem);
        }
      });
    }

    // 从右侧移除数据到左侧
    function removeData() {
      selectedDesignerUserListNew.value.forEach(selectedItem => {
        const index = designerUserListNew.value.findIndex(item => item.userId === selectedItem.userId);
        if (index !== -1) {
          designerUserListNew.value.splice(index, 1);
          designerUserList.value.push(selectedItem);
        }
      });
    }
</script>
  • 14
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以考以下步骤将 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` 初始值为空数组。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值