diff --git a/src/components/table/table.vue b/src/components/table/table.vue index 88ad85c..b511728 100644 --- a/src/components/table/table.vue +++ b/src/components/table/table.vue @@ -358,18 +358,32 @@ handleFilterHide (index) { // clear checked that not filter now if (!this.cloneColumns[index]._isFiltered) this.cloneColumns[index]._filterChecked = []; }, - handleFilter (index) { - const column = this.cloneColumns[index]; - const filterData = this.makeData(); - - this.rebuildData = filterData.filter((row) => { - let status = false; + filterData (data, column) { + return data.filter((row) => { + let status = !column._filterChecked.length; for (let i = 0; i < column._filterChecked.length; i++) { status = column.filterMethod(column._filterChecked[i], row); if (status) break; } return status; }); + }, + filterOtherData (data, index) { + this.cloneColumns.forEach((col, colIndex) => { + if (colIndex !== index) { + data = this.filterData(data, col); + } + }); + return data; + }, + handleFilter (index) { + const column = this.cloneColumns[index]; + let filterData = this.makeData(); + + // filter others first, after filter this column + filterData = this.filterOtherData(filterData, index); + this.rebuildData = this.filterData(filterData, column); + this.cloneColumns[index]._isFiltered = true; this.cloneColumns[index]._filterVisible = false; }, @@ -381,7 +395,10 @@ this.cloneColumns[index]._isFiltered = false; this.cloneColumns[index]._filterVisible = false; this.cloneColumns[index]._filterChecked = []; - this.rebuildData = this.makeData(); + + let filterData = this.makeData(); + filterData = this.filterOtherData(filterData, index); + this.rebuildData = filterData; }, makeData () { let data = deepCopy(this.data); diff --git a/test/routers/table.vue b/test/routers/table.vue index 353c97e..91afb40 100644 --- a/test/routers/table.vue +++ b/test/routers/table.vue @@ -8,7 +8,7 @@
= 25; + return row.name.length == 2; } else if (value === 2) { - return row.age < 25; + return row.name.length == 3; } } }, @@ -103,14 +103,22 @@ width: 100, filters: [ { - label: '家', - value: 'home' + label: '大于25岁', + value: 1 }, { - label: '公司', - value: 'company' + label: '小于25岁', + value: 2 } ], + filterMultiple: false, + filterMethod (value, row) { + if (value === 1) { + return row.age >= 25; + } else if (value === 2) { + return row.age < 25; + } + } // render (row) { // return `${row.age}` // } -- libgit2 0.21.4