首页 > 其他分享 >element中两个table表格和已选数据联动

element中两个table表格和已选数据联动

时间:2023-08-08 16:47:56浏览次数:34  
标签:val schemlTable multipleSelection 已选 table element 数据 id row

element中table表格和已选数据联动
需求:
1.根据条件查询表格,多选框选中项移到已选择表格,取消选择,已选项表格也取消该调数据数据
2.已选项增加删除按钮,删除之后,查询数据的表格也取消勾选
3.重新查询新数据,已选择数据不会改变,新选中的数据添加到已选择表格

          //  查询列表
          <div slot="content" class="content" v-if="scheme">
            <div class="table" style="width:100%; min-height: 300px;margin-bottom:20px;">
              <el-table
                ref="schemlTable"
                :data="schemlTable"
                stripe
                @selection-change="handleSelectionChange"
                @select="select"
                @select-all="selectAll"
              >
                <el-table-column
                  type="selection"
                  width="55"
                >
                </el-table-column>
                <el-table-column prop="majorName" label="专业" align="center"/>
                <el-table-column prop="academy" label="院校" align="center"/>
                <el-table-column prop="nature" label="学校性质" align="center"/>
                <el-table-column prop="lowestMark" label="参考分" align="center"/>
                <el-table-column label="最低位次" align="center">
                  <template slot-scope="scope">
                    <span>{{scope.row.lowestRank ? scope.row.lowestRank:'-'}}</span>
                  </template>
                </el-table-column>
              </el-table>
            </div>
          </div>
          <p>参考方案</p>
          <div v-if="multipleSelection.length !=0">
            <div class="table" style="width:100%;margin-bottom:20px;">
              <el-table
                :data="multipleSelection"
                stripe
              >
                <el-table-column type="index" label="序号" width="60px;" align="center"/>
                <el-table-column prop="majorName" label="专业" align="center"/>
                <el-table-column prop="academy" label="院校" align="center"/>
                <el-table-column prop="nature" label="学校性质" align="center"/>
                <el-table-column prop="lowestMark" label="参考分" align="center"/>
                <el-table-column align="center" label="最低位次">
                  <template slot-scope="scope">
                    <span>{{scope.row.lowestRank ? scope.row.lowestRank:'-'}}</span>
                  </template>
                </el-table-column>
                <el-table-column label="操作" align="center">
                  <template slot-scope="scope">
                    <span class="check" @click="removeChange(scope.row)">删除</span>
                  </template>
                </el-table-column>
              </el-table>
            </div>
            <templat>
              <el-button type="primary" class="btn" @click="storage">保存方案</el-button>
              <el-button class="btn" @click="cancelStorage">取消</el-button>
            </templat>
//  获取查询数据
 updateUserInfo() {
         getSchemeList(this.queryInfo).then((res) => {
          if (res.code !== 0) {
            this.$message.messageError(res.message);
            return;
          }
          this.schemlTable = res.data.volunteers;
           this.query = true;
           //  让元数据与重新查询的数据选择框联动
          const arr = this.multipleSelection;
          if (arr.length > 0) {
          // const idAll = this.schemlTable.forEach((value) => value.id);
          for (let i = 0; i < arr.length; i += 1) {
              /*  第一步:获取 需要删除“查询列表”某个数据的索引值(根据es6的findIndex查找id来获取) */
            const indexs = this.schemlTable.findIndex((value) => value.id === arr[i].id);
             // 第二步:使用 toggleRowSelection(需要切换状态行的数据,false/true) false为取消选中,true为选中
              this.$nextTick(() => {
                this.$refs.schemlTable.toggleRowSelection(this.schemlTable[indexs], true);
              });
          }
        }
 
}
 
// 已选择表格删除操作
      removeChange(row) {
        this.multipleSelection.forEach((n, index) => {
          if (n.id === row.id) {
            this.multipleSelection.splice(index, 1);
          }
          console.log(this.multipleSelection);
        });
        // 操作“已选列表”删除按钮(index为删除行的索引值,row为删除行的数据对象)
        /*  第一步:获取 需要删除“查询列表”某个数据的索引值(根据es6的findIndex查找id来获取) */
        const indexs = this.schemlTable.findIndex((value) => value.id === row.id);
        // 第二步:使用 toggleRowSelection(需要切换状态行的数据,false/true) false为取消选中,true为选中
        this.$nextTick(() => {
          this.$refs.schemlTable.toggleRowSelection(this.schemlTable[indexs], false);
        });
      },
 
	 // 全选
      selectAll() {
        this.query = false;
      },
 
      // 获取到单条数据
      select(all, val) {
        this.query = false;
        const selected = all.length && all.indexOf(val) !== -1;
        if (!selected) {
          console.log(this.multipleSelection);
          this.multipleSelection.forEach((m, index) => {
            if (m.id === val.id) {
              this.multipleSelection.splice(index, 1);
            }
          });
        }
      },
 
 
      // 查询数据数据选择
      handleSelectionChange(val) {
      //  重新查询会出现[undefined] 不知道什么原因 先去除
       val.forEach((m, i) => {
          if (!m) {
            val.splice(i, 1);
          }
        });
 
        const ids = [];
        if (this.multipleSelection.length > 0) {
          this.multipleSelection.forEach((m) => {
            ids.push(m.id);
          });
        }
        val.forEach((n) => {
          if (ids.indexOf(n.id) === -1) {
            this.multipleSelection.push(n);
          }
        });
        // 判断是全选还是查询
        if (this.query) return;
        //  判断全选和全不全
        if (val.length === 0) {
          const allIds = [];
          if (this.schemlTable.length > 0) {
            this.schemlTable.forEach((m) => {
              allIds.push(m.id);
            });
          }
          //  正常使用arr.slice(index, 1) 会改变原数组导致index改变 后面删除出问题
          //  解决方法 从后往前删除
          for (let i = this.multipleSelection.length - 1; i >= 0; i -= 1) {
            if (allIds.indexOf(this.multipleSelection[i].id) !== -1) {
              this.multipleSelection.splice(i, 1);
            }
          }
        }
      },
 

转自:https://blog.csdn.net/weixin_66709443/article/details/130334524

标签:val,schemlTable,multipleSelection,已选,table,element,数据,id,row
From: https://www.cnblogs.com/axingya/p/17614734.html

相关文章

  • Linux防火墙firewalld&iptables(2)iptables开放指定端口开放指定端口
    一、CentOs6iptables基本操作#chkconfig--list|grepiptables 查看防火墙的服务#chkconfigiptablesoff 永久关闭防火墙#chkconfigiptableson 永久开启防火墙#servicestatusiptables 查看防火墙状态#servicestartiptables 启动防火墙#servicestopiptab......
  • java mybatisplus @Table(typerHadler)的坑
    在使用JavaMyBatis-Plus的@Table注解时,如果使用了typerHadler属性,可能会遇到一些问题和坑。下面是一些常见的问题及其解决方案:1.设置了typerHadler属性但不起作用:如果在@Table注解中设置了typerHadler属性,但在实际使用中没有生效,可能是因为配置的类型处理器没有正确注册。请确保......
  • 七月学习之Iptables地址转换
    8、Iptables地址转换8.1、什么是NAT网络地址转换(NAT),意思也比较清楚:对(数据包)的网络地址(IP+PORT)进行转换例如,机器自己的IP10.1.1.2是能与外部正常通信的,但是192.168网段是私有IP段。无法与外界通信因此当源地址为192.168网段的包要出去时,机器会先将源IP换成机器自己的10.......
  • @TableField
    @TableField1.value字段值(驼峰命名方式,该值可无)2.exist是否为数据库表字段,默认true存在,false不存在3.condition字段where实体查询比较条件,默认`=`等值4.update字段updateset部分注入,该注解优于el注解使用,例1:@TableField(..,update="%s+1")......
  • Django 模板table 自增序号列
    第一种方法:<styletype="text/css">table{counter-reset:tableCount;}.counterCell:before{content:counter(tableCount);counter-increment:tableCount;}</style>标签中使用<table><tr><......
  • Linux:防火墙iptables与firewalld的启停
    Linux关闭防火墙firewall和iptables命令_永久关闭iptables防火墙_红烧柯基的博客-CSDN博客Linux防火墙——iptables以及firewalld的使用介绍_树下一少年的博客-CSDN博客干货!Linux防火墙配置(iptables和firewalld)_数据包_规则_进行 iptables与firewalld1、状态syste......
  • Element UI 在非template/render 模式下使用ICON要注意的问题
    有很多时候,我们不需要编译Vue和ElementUI,只是想简单的试用一下,做一个原型出来。我们会使用HTML方式编写,这种方式下,使用ICON需要注意一些问题。1.例如CopyDocument图标,如果是用htmltag方式调用,根据vue的组件规范,驼峰格式需要改写成小写横线分割的格式<copy-document></copy-docu......
  • 关于引用elementui中的el-date-picker组件
    最近有一个需求要用到elementui中的日期选择器组件,但是elementui中的不太满足,在网上找到一个引用里面的组件的教程https://blog.csdn.net/mouday/article/details/103932261但是引用完成后报错Moduleparsefailed:Unexpectedtoken(65:6)Youmayneedanappropriateloader......
  • element-plus el-date-picker 实现周选择
    在使用element-plus的时间选择器的时候,有时候会有选择一周的需求,可以使用以下方式进行实现。首先使用type=week属性实现基本的样式<el-date-pickerv-model="baseForm.startTime"type="week"placeholder="选择周"></el-date-picker>接下来修改其值的格式......
  • el-table 子级选中父级勾选 子级无一选中父级取消勾选
     //选中子级父级也选中      if(row.parentId!=0){          letparent=this.archiveTypeList.find((x=>x.id===row.parentId));          this.$refs.multipleTable.toggleRowSelection(parent,true);    ......