实现两个表格的数据传递(类似于穿梭框)

类似于element的

第一个表格信息以及按钮:

复制代码
<div style="height: 80%">
  <el-table :data="tableData1" border :cell-style="{'text-align':'center'}" style="width: 100%;"
            ref="multipleTable1"
            @selection-change="handleSelectionChange1"
            tooltip-effect="dark"
            height="100%">
    <el-table-column type="selection" width="50" label="序号" align="center"></el-table-column>
    <el-table-column prop="wellId" label="井号" align="center"></el-table-column>
    <el-table-column prop="fracturingPressure" label="破裂压力(Mpa)" align="center"></el-table-column>
    <el-table-column prop="maxWellSafetyInjectionPressure" label="井口安全最大注入压力(Mpa)"
                     align="center"></el-table-column>
    <el-table-column prop="countMethod" label="计算方法" align="center"></el-table-column>
  </el-table>
  <div class="bottomButton">
    <el-button style="margin-right: 20px" type="danger" @click="toggleSelection1"
               :disabled="multipleSelection1.length ? false : true">
      <span>清空选择</span>
    </el-button>
    <el-button style="margin-right: 20px" type="primary" @click="addMethod"><span>添加至计算</span>
    </el-button>
  </div>
</div>

第二个表格信息及按钮:

复制代码
<div style="height: 80%">
  <el-table :data="tableData2" border :cell-style="{'text-align':'center'}" style="width: 100%;"
            ref="multipleTable2"
            tooltip-effect="dark"
            @selection-change="handleSelectionChange2"
            height="100%">
    <el-table-column type="selection" width="50" label="序号" align="center"></el-table-column>
    <el-table-column prop="wellId" label="井号" align="center" width="120"></el-table-column>
    <el-table-column prop="interval" label="层段" align="center"></el-table-column>
    <el-table-column prop="safetyFactor" label="安全系数" align="center"></el-table-column>
    <el-table-column prop="skinFactor" label="表皮系数" align="center"></el-table-column>
    <el-table-column prop="addPressureDrop" label="附加压力降(Mpa)" align="center"></el-table-column>
    <el-table-column prop="avgFormationFracturePressure" label="平均地层破裂压力(Mpa)"
                     align="center"></el-table-column>
    <el-table-column prop="maxWellSafetyInjectionPressure" label="井口最大安全注入压力(Mpa)"
                     align="center"></el-table-column>
    <el-table-column prop="countMethod" label="计算方法" align="center"></el-table-column>
  </el-table>
  <div class="bottomButton">
    <el-button style="margin-right: 20px" type="danger" @click="removeMethod"
               :disabled="multipleSelection2.length ? false : true">
      <span>删除选择行</span>
    </el-button>
    <el-button style="margin-right: 20px" type="primary"><span>计算</span></el-button>
    <el-button style="margin-right: 20px" type="primary"><span>保存</span></el-button>
    <el-button style="margin-right: 20px" type="primary"><span>导出</span></el-button>
  </div>
</div>

实现多选绑定的方法:

复制代码
handleSelectionChange1(val) {
  this.multipleSelection1 = val;
},
handleSelectionChange2(val) {
  this.multipleSelection2 = val;
},

清空第一个表格中选中数据的方法:

复制代码
toggleSelection1() {
  this.$refs.multipleTable1.clearSelection();
},

实现将选中数据添加到第二个表格中,以及第二个表格实现回退效果的方法:

复制代码
addMethod() {
    //concat拼接数组到指定数组中
  this.tableData2 = this.tableData2.concat(this.multipleSelection1);
  this.handleRemoveTabList(this.multipleSelection1, this.tableData1);
  // 按钮禁用
  this.multipleSelection1 = [];
},
removeMethod() {
  this.tableData1 = this.tableData1.concat(this.multipleSelection2);
  this.handleRemoveTabList(this.multipleSelection2, this.tableData2);
  // 按钮禁用
  this.multipleSelection2 = [];

},
//第一个是选中的数组;第二个是表格数组
handleRemoveTabList(isNeedArr, originalArr) {
  if (isNeedArr.length && originalArr.length) {
    for (let i = 0; i < isNeedArr.length; i++) {
      for (let k = 0; k < originalArr.length; k++) {
        // 注意,id为唯一值,如果不为唯一值那么会出错
        if (isNeedArr[i]["id"] === originalArr[k]["id"]) {
            //splice() 方法用于添加或删除数组中的元素
          originalArr.splice(k, 1);
        }
      }
    }
  }
},

相关推荐
Hilaku8 分钟前
如何用隐形字符给公司内部文档加盲水印?(抓内鬼神器🤣)
前端·javascript·面试
猫头虎-前端技术12 分钟前
小白也能做AI产品?我用 MateChat 给学生做了一个会“拍照解题 + 分步教学”的AI智能老师
前端·javascript·vue.js·前端框架·ecmascript·devui·matechat
栀秋66614 分钟前
ES6+新增语法特性:重塑JavaScript的开发范式
前端·javascript
未来之窗软件服务18 分钟前
幽冥大陆(三十七)文件系统路径格式化——东方仙盟筑基期
前端·javascript·文件系统·仙盟创梦ide·东方仙盟
前端加油站23 分钟前
使劲折腾Element Plus的Table组件
前端·javascript·vue.js
十五喵36 分钟前
智慧物业|物业管理|基于SprinBoot+vue的智慧物业管理系统(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·毕设·智慧物业管理系统
用户841794814561 小时前
如何用 vxe-table 实现粘贴数据自动进入新增行与新增列
vue.js
朕的剑还未配妥2 小时前
vue2中transition使用方法解析,包含底部弹窗示例、样式未生效踩坑记录
前端·vue.js
w***74172 小时前
SpringBoot + vue 管理系统
vue.js·spring boot·后端
灵犀坠2 小时前
前端核心知识体系梳理:从Vue 3到现代CSS与JavaScript
前端·javascript·vue.js