Vue 关于element穿梭框进行的修改成table表格穿梭框

13 篇文章 0 订阅

Vue 关于element穿梭框进行的修改成table表格穿梭框

直接先看样式图
在这里插入图片描述

    <!--弹出层 -->
    <el-dialog title="标题" :visible.sync="introductionVisible" width="70%">
      <el-form :model="introductionForm" label-width="100px">
        <el-row style="display:flex;justify-content:space-around">
          <el-col :span="10" style="border:1px solid #EBEEF5">
            <span style="display:block;font-size:16px;text-align:center;padding:10px;border-bottom:1px solid #EBEEF5;margin-bottom:10px">请选择</span>
            <el-col :span="16">
              <el-form-item label="姓名">
                <el-input size="mini" v-model="studentName" :style="{width: '120px'}"></el-input>
              </el-form-item>
            </el-col>
            <el-col :span="24" style="margin-right:10px" >
              <el-form-item label="所属单位">
                <select-builder table="org" v-model="orgId" :style="{width: '120px'}"></select-builder>
				*[HTML]:自己封装的组件,没有的话也可以用input
                  <el-radio-group v-model="search_range">
                    <el-radio :label="0" style="margin-left: 10px; margin-right:10px;">本级</el-radio>
                    <el-radio :label="1">全部</el-radio>
                  </el-radio-group>
              </el-form-item>
            </el-col>
            <el-col :span="24" style="display:flex;justify-content:space-around;margin:-10px 0 10px 0">
                <el-button type="primary" size="mini">查询</el-button>
            </el-col>
            <el-table :data="data1" border ref="selection" @selection-change="checkAll" style="width: 100%">
              <el-table-column type="selection" width="30"> </el-table-column>
              <el-table-column prop="name" label="人员姓名" > </el-table-column>
              <el-table-column prop="date" label="机构路径" ></el-table-column>
            </el-table>
          </el-col>
          <el-col :span="2" style="display:flex;flex-direction:column;justify-content:center">
            <el-button icon="el-icon-d-arrow-right" :disabled="nowSelectData.length?false:true" size="mini" type="primary" @click="handelSelect"></el-button>
            <el-button icon="el-icon-d-arrow-left" :disabled="nowSelectRightData.length?false:true" size="mini" type="primary" @click="handleRemoveSelect" style="margin-top:10px;margin-left:0px;"></el-button>
          </el-col>
          <el-col :span="10" style="border:1px solid #EBEEF5;min-height:460px">
            <span style="display:block;font-size:16px;text-align:center;padding:10px;border-bottom:1px solid #EBEEF5;margin-bottom:10px">已选择</span>
            <el-table :data="selectArr" border ref="selection" @selection-change="checkRightAll" style="width: 100%">
              <el-table-column type="selection" width="30"></el-table-column>
              <el-table-column prop="name" label="人员姓名"></el-table-column>
              <el-table-column prop="date" label="机构路径"></el-table-column>
            </el-table>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="introductionVisible = false">取 消</el-button>
        <el-button type="primary" @click="introductionVisible = false">确 定</el-button>
      </div>
    </el-dialog>

js

<script>
  export default {
  data() {
    return {
      studentName:'',
      orgId:'',
      search_range:'',
      selectArr:[],  // 右边列表
      options: [],
      value: '',
      data1:[{
          date: '11000KV-三站1',
          name: '王小虎1',
        }, {
          date: '11000KV-三站2',
          name: '王小虎2',
        }, {
          date: '11000KV-三站3',
          name: '王小虎3',
        }, {
          date: '11000KV-三站4',
          name: '王小虎4',
        }, {
          date: '11000KV-三站5',
          name: '王小虎5',
        }, {
          date: '11000KV-三站6',
          name: '王小虎6',
        }, {
          date: '11000KV-三站7',
          name: '王小虎7',
        }],
      nowSelectData: [], // 左边选中列表数据
      nowSelectRightData: [], // 右边选中列表数据
    };
  },
  methods: {
    checkAll(val){
      this.nowSelectData = val;
    },
    checkRightAll(val) {
      this.nowSelectRightData = val;
    },
    // 选中
    handelSelect(){   
      this.selectArr = this.handleConcatArr(this.selectArr, this.nowSelectData) 
      this.handleRemoveTabList(this.nowSelectData,  this.data1);
      this.nowSelectData = [];
   },
    // 取消
    handleRemoveSelect() {
      this.data1 = this.handleConcatArr(this.data1, this.nowSelectRightData) 
      this.handleRemoveTabList(this.nowSelectRightData,  this.selectArr);
      this.nowSelectRightData = [];
    },
    handleConcatArr(selectArr, nowSelectData) {
      let arr = [];
      arr = arr.concat(selectArr, nowSelectData);   
      return arr;
    },
    handleRemoveTabList(isNeedArr,  originalArr) {
      if(isNeedArr.length && originalArr.length) {
         for(let i=0; i<isNeedArr.length; i++) {
            for(let k=0; k<originalArr.length; k++) {
              if(isNeedArr[i]["name"] === originalArr[k]["name"]) {
                originalArr.splice(k, 1);   
              }
            }
         }
      }
    }
  },
 
};
</script>
  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
可以考以下步骤将 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` 初始值为空数组。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值