VUE框架之el-table多个字段联动过滤筛选---前端实现

 
多字段的筛选原理:


< el-table ref = "multipleTable" : data = "pageData"
@ filter-change = "tableFilter" " >
< el-table-column type = "selection" />
< el-table-column prop = "tenantryname" />
< el-table-column prop = "roomArea" />
< el-table-column prop = "satgetime" />
< el-table-column prop = "recetime" />
< el-table-column prop = "total" />
< el-table-column prop = "costtypeShow"
: filters = "this.receivablesstatusList" column-key = "costtype" >
</ el-table-column >
< el-table-column prop = "invoicetypeShow"
: filters = "this.invoicetypestatusList" column-key = "invoicetype"
        filter-placement = "bottom-end" >
</ el-table-column >
< el-table-column prop = "applystatusShow"
: filters = "this.applystatusList" column-key = "applystatus"
        filter-placement = "bottom-end" >
</ el-table-column >
< el-table-column prop = "invoiceShow" label = ""
: filters = "this.billstatusList" column-key = "invoice" width = "100" >
< template slot-scope = "scope" >
< el-tag close-transition > {{scope.row.invoiceShow}} </ el-tag >
</ template >
</ el-table-column >
< el-table-column prop = "clearstateShow" label = ""
: filters = "this.coststatusList" column-key = "clearstate" width = "150" >
</ el-table-column >
< el-table-column prop = "remark" label = "" width = "200" />
</ el-table >
 
 //解释:this.applystatusList ,this.applystatusList ,this.billstatusList,this.coststatusList 是保存筛选条件数组
 

//调用过滤方法
     tableFilter(filters) {
        let isFalg = false;
//用于保存筛选结果数组
        this.resultDatarray = [];
        let key;
//查找所有的过滤条件数组,找到他的key(就是对应的过滤字段)
        for (var index in filters) {
          key = index;
        }
//以key命名,保存为本地数据---this.xxxx数组
 this[key] = filters[key];
        /////-----按照第一个过滤条件筛选--------
//数据源:this.receivableList;

        if (this.costtype.length > 0) {
//用于判断是否进入筛选
          isFalg = true;
          for (let i1 in this.costtype) {
            for (let j1 in this.receivableList) {
//---------查询对应的字段,符合条件的存放到 结果临时结果集 this.resultDatarray
              if (this.receivableList[j1].costtype == this.costtype[i1]) {
                this.resultDatarray.push(this.receivableList[j1]);
              }
            }
          }
          if (this.resultDatarray.length == 0) {
筛选了,但没有结果,不用继续下一个筛选条件
            return;
          }
        }
 
////------第二个筛选条件----------------
        if (this.invoicetype.length > 0) {
//用于判断是否进入筛选
          isFalg = true;
          let temp = [];
//如果第一个筛选条件执行了,并且有筛选结果,则从筛选结果进行第二个筛选条件
          if (this.resultDatarray.length > 0) {
            for (let i2 in this.resultDatarray) {
              for (let j2 in this.invoicetype) {
                if (this.resultDatarray[i2].invoicetype == this.invoicetype[j2]) {
                  temp.push(this.resultDatarray[i2]);
                }
              }
            }
        //把筛选结果赋值给结果
            this.resultDatarray = temp;
//如果没有第一个筛选条件,则从数据源进行第二个筛选条件
          } else {
            for (let i2 in this.receivableList) {
              for (let j2 in this.invoicetype) {
                if (this.receivableList[i2].invoicetype == this.invoicetype[j2]) {
                  this.resultDatarray.push(this.receivableList[i2]);
                }
              }
            }
          }
          if (this.resultDatarray.length == 0) {
            return;
          }
        }
        ////----------------------
        if (this.applystatus.length > 0) {
          isFalg = true;
          let temp = [];
          if (this.resultDatarray.length > 0) {
            for (let i3 in this.resultDatarray) {
              for (let j3 in this.applystatus) {
                if (this.resultDatarray[i3].applystatus == this.applystatus[j3]) {
                    temp.push(this.resultDatarray[i3]);
                }
              }
            }
            this.resultDatarray = temp;
          } else {
            for (let i3 in this.receivableList) {
              for (let j3 in this.applystatus) {
                if (this.receivableList[i3].applystatus == this.applystatus[j3]) {
                  this.resultDatarray.push(this.receivableList[i3]);
                }
              }
            }
          }
          if (this.resultDatarray.length == 0) {
            return;
          }
        }
        ////----------------------
        if (this.invoice.length > 0) {
          isFalg = true;
          let temp = [];
          if (this.resultDatarray.length > 0) {
            for (let i4 in this.resultDatarray) {
              for (let j4 in this.invoice) {
                if (this.resultDatarray[i4].invoice == this.invoice[j4]) {
                    temp.push(this.resultDatarray[i4]);
                }
              }
            }
            this.resultDatarray = temp;
          } else {
            for (let i4 in this.receivableList) {
              for (let j4 in this.invoice) {
                if (this.receivableList[i4].invoice == this.invoice[j4]) {
                  this.resultDatarray.push(this.receivableList[i4]);
                }
              }
            }
          }
          if (this.resultDatarray.length == 0) {
            return;
          }
        }
        ////----------------------
        if (this.clearstate.length > 0) {
          isFalg = true;
          let temp = [];
          if (this.resultDatarray.length > 0) {
            for (let i5 in this.resultDatarray) {
              for (let j5 in this.clearstate) {
                if (this.resultDatarray[i5].clearstate == this.clearstate[j5]) {
                    temp.push(this.resultDatarray[i5]);
                }
              }
            }
            this.resultDatarray = temp;
          } else {
            for (let i5 in this.receivableList) {
              for (let j5 in this.clearstate) {
                if (this.receivableList[i5].clearstate == this.clearstate[j5]) {
                  this.resultDatarray.push(this.receivableList[i5]);
                }
              }
            }
          }
          if (this.resultDatarray.length == 0) {
            return;
          }
        }
        //如果有筛选结果,则把结果集作为参数给下一个方法
        if (isFalg) {
          this.getSplicPageList(this.resultDatarray);
        } else {
        //如果没有筛选条件,则把数据源作为参数给下一个方法
          this.getSplicPageList(this.receivableList);
        }
      },

猜你喜欢

转载自blog.csdn.net/quyunde/article/details/80583272