多表格勾选回显,父表格为主,筛选子表格数据

在业务需求中:将申请单号和信息放置主表格,将表格明细放置子表格,通过勾选数据,提交选中的数据(用于汇总数据、审批)。

需求分析如下

  1. 主表格未被选中时,需将所有子表格数据展示。
  2. 勾选主表格,显示对应的子表格。
  3. 取消勾选的主表格,原先勾选的子表格的勾选取消。
    在这里插入图片描述

实践步骤:

  1. 查看时将父级数据添加到主表格数据源中。将子集的数据保存在子表格的数据源中,并在添加一个保存数据,用于在数据源变动后,数据是完整的。
  $.ajax({
          type: "post",
          url: this.baseURL + "XXX",
          dataType: "json",
          data: JSON.stringify(para),
          contentType: "application/json;charset=utf-8",
          success: function (res) {
            if (res.flag == 'success') {
            //主表格数据源
              _this.nqDetailData1 = res.data.personList;
              //子表格数据源
              _this.nqDetailData2 = res.data.detilList;
              //子表格完整数据源备份
              _this.nqDetailData2All = res.data.detilList;
            }
          }
        });
  1. 复选主要功能如下:
    主要思维: 在主表格勾选时,下面的子表格能根据主表格的 id 切换数据,但是由于主表格和子表格的数据都会有勾选。我将在主表格事件中复制子表格勾选的数据,以便在子表格数据发生变动后,勾选无法回显问题。
	//主表格事件
      handleSelChange1(val) {
        this.multipleSelection = val;  //存储勾选的值
        //如果子表格有勾选的值,则拷贝到 selectAllList 变量中,作用就是在 子表格 multipleSelection2 的数据变动时,selectAllList 能保存住上一次勾选的信息,使得在子表格刷新时 勾选 不见了。
        if (this.multipleSelection2.length > 0) {
          this.selectAllList = Object.assign([], this.multipleSelection2);
        }
        // 选择主表格,加载下面的表格数据
        //如果主表格未被选中时,需将所有子表格数据展示,选择时将子表格对应的数据显示。
        if (this.multipleSelection.length > 0) {
        //勾选主表格时:
          let newNqDetailData2 = [];
          this.multipleSelection.forEach(element => {
            this.nqDetailData2All.forEach(item => {
              if (element.id == item.personId) {
                newNqDetailData2.push(item);
              }
            })
          })
          this.nqDetailData2 = newNqDetailData2;
        } else {
        //未勾选主表格。
           this.nqDetailData2=this.nqDetailData2All;
        }

        // 将未勾选的父表格中勾选的子表格明细部分去掉。
        if (this.selectAllList.length > 0) {
          let removeEle = []; //获取到要移除的数组的值。
          this.selectAllList.forEach(element => {
            let exist = this.multipleSelection.some(item => element.personId == item.id);
            if (!exist) {
              removeEle.push(element);
            }
          });

          // 将未勾选的 removeEle 的值 从 selectAllList  去除。
          let a = [];
          removeEle.forEach(element => {
            this.selectAllList = this.selectAllList.filter(item => element != item)
          })
        }

		//当子表格刷新时,将上一次保存的勾选值复现。
        if (this.selectAllList.length > 0) {
          this.$nextTick(() => {
            this.selectAllList.forEach(row => {
              this.$refs.nqDetailData2.toggleRowSelection(row, true);
            });
          });
        }

      },
      //子表格事件
      handleSelChange2(val) {
     	 //子表格保存勾选值
        this.multipleSelection2 = val;
      },
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值