diff --git a/packages/table/src/table-store.js b/packages/table/src/table-store.js index 10984ecb3..1ba4af966 100644 --- a/packages/table/src/table-store.js +++ b/packages/table/src/table-store.js @@ -1,5 +1,6 @@ import Vue from 'vue'; import debounce from 'throttle-debounce/debounce'; +import merge from 'element-ui/src/utils/merge'; import { orderBy, getColumnById, getRowIdentity } from './util'; const sortData = (data, states) => { @@ -407,6 +408,33 @@ TableStore.prototype.cleanSelection = function() { } }; +TableStore.prototype.clearFilter = function() { + const states = this.states; + const { tableHeader, fixedTableHeader, rightFixedTableHeader } = this.table.$refs; + let panels = {}; + + if (tableHeader) panels = merge(panels, tableHeader.filterPanels); + if (fixedTableHeader) panels = merge(panels, fixedTableHeader.filterPanels); + if (rightFixedTableHeader) panels = merge(panels, rightFixedTableHeader.filterPanels); + + const keys = Object.keys(panels); + if (!keys.length) return; + + keys.forEach(key => { + panels[key].filteredValue = []; + }); + + states.filters = {}; + + this.commit('filterChange', { + column: {}, + values: [], + silent: true + }); + + this.table.$emit('filter-clear'); +}; + TableStore.prototype.updateAllSelected = function() { const states = this.states; const { selection, rowKey, selectable, data } = states; diff --git a/packages/table/src/table.vue b/packages/table/src/table.vue index b4fe1d331..e0e57528c 100644 --- a/packages/table/src/table.vue +++ b/packages/table/src/table.vue @@ -14,6 +14,7 @@