el-table 穿梭框的实现(可直接复制)

9 篇文章 0 订阅
本文展示了如何使用Element UI库创建一个带有双向选择功能的对话框组件。组件包含两个表格,用户可以在表格间通过按钮转移选中项。同时,提供了关闭对话框、页面切换等操作的方法。示例代码详细解释了数据处理和事件监听过程。
摘要由CSDN通过智能技术生成
<template>
  <el-dialog
    :title="title"
    :visible.sync="dialog"
    width="60%"
    :close-on-click-modal="false"
    :empty-text="loadInfo"
    center
    size="mini"
    style="lookDiaSty"
    @close="dialogClose"
  >
    <el-table
      :data="table1"
      @selection-change="handleSelectionChange1"
      style="width: 100%">
       <el-table-column
      type="selection"
      width="55">
       </el-table-column>
      <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </el-table>
    <div class="btns">
      <el-button type="primary" :disabled="currentTable1.length == 0" @click="toRight">→</el-button>
      <el-button type="primary" :disabled="currentTable2.length == 0" @click="toLeft">←</el-button>
    </div>
    <el-table
      :data="table2"
      @selection-change="handleSelectionChange2"
      style="width: 100%">
       <el-table-column
      type="selection"
      width="55">
       </el-table-column>
      <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </el-table>
    <span slot="footer" class="dialog-footer">
        <el-button type="primary">确定</el-button>
      <el-button @click="dialogClose">返回</el-button>
    </span>
  </el-dialog>
</template>
<script>
export default {
  name: "orderDialog",
  props: {
    dialog: {
      type: Boolean,
      default: false,
    },
    title: {
      type: String,
      default: "详情",
    },
    table1: Array,
    table2: Array,
  },
  data() {
    return {
      // dialog: '',
      currentTable1:[],
      currentTable2:[],
      table2:[],
      table1: [{
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            date: '2016-05-04',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1517 弄'
          }, {
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1519 弄'
          }, {
            date: '2016-05-03',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1516 弄'
          }]
    };
  },
  methods: {
    dialogClose() {
      // 子组件中不能直接改变props中的值
      this.$emit("update:dialog", false);
    },
    changePage(val) {
      this.page = val;
      this.$emit("changeDetailsPage", val);
    },
    handleSelectionChange1(val){
      this.currentTable1 = val;
    },
    handleSelectionChange2(val){
      this.currentTable2 = val;
    },
    toRight(){
      this.currentTable1.forEach(item => {
        this.table2.push(item)
      })
      for(let i=0; i<this.table2.length; i++){
        for(let j=0; j<this.table1.length; j++){
          if(this.table2[i].date == this.table1[j].date){
            this.table1.splice(j,1);
          }
        }
      }
      this.currentTable1 = [];
    },
    toLeft() {
      this.currentTable2.forEach(item => {
        this.table1.push(item);
      })
      for(let i=0; i<this.table1.length; i++){
        for(let j=0; j<this.table2.length; j++){
          if(this.table1[i].date == this.table2[j].date){
            this.table2.splice(j,1);
          }
        }
      }
      this.currentTable2 = [];
    }
  },
};
</script>
<style lang="scss">
.el-pagination {
  position: absolute;
  right: 1%;
}
.el-dialog__body{
  display: flex;
  flex-direction: row;
  justify-content: space-between;
  .el-table{
    margin:0 10px;
  }
  .btns{
    display: flex;
    flex-direction: column;
    justify-content: center;
    align-items: center;
    .el-button{
      margin:10px 0;
    }
  }
}

</style>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值