From 9ef1faaec93ec596bb97dd5809077aaea514dcc8 Mon Sep 17 00:00:00 2001 From: njleonzhang Date: Tue, 3 Jan 2017 20:08:43 +0800 Subject: [PATCH] toggle sortable --- packages/table/src/table-header.js | 38 ++++++++++++++++++++++++++---- packages/table/src/table.vue | 8 ++++++- test/unit/specs/table.spec.js | 8 +++---- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/packages/table/src/table-header.js b/packages/table/src/table-header.js index 05ff8e513..b672d979b 100644 --- a/packages/table/src/table-header.js +++ b/packages/table/src/table-header.js @@ -112,9 +112,9 @@ export default { } { column.sortable - ? - this.handleHeaderClick($event, column, 'ascending')}> - this.handleHeaderClick($event, column, 'descending')}> + ? this.handleHeaderClick($event, column) }> + + : '' } @@ -148,7 +148,9 @@ export default { layout: { required: true }, - border: Boolean + border: Boolean, + defaultSortProp: String, + defaultSortOrder: String }, components: { @@ -182,6 +184,23 @@ export default { this.filterPanels = {}; }, + mounted() { + const states = this.store.states; + states.sortProp = this.defaultSortProp; + states.sortOrder = this.defaultSortOrder; + + this.$nextTick(_ => { + for (let i = 0, length = this.columns.length; i < length; i++) { + if (this.columns[i].property === this.defaultSortProp) { + this.columns[i].order = this.defaultSortOrder; + break; + } + } + + this.store.commit('changeSortCondition'); + }); + }, + beforeDestroy() { const panels = this.filterPanels; for (let prop in panels) { @@ -334,7 +353,16 @@ export default { document.body.style.cursor = ''; }, - handleHeaderClick(event, column, order) { + toggleOrder(column) { + if (column.order === 'ascending') { + return 'descending'; + } + return 'ascending'; + }, + + handleHeaderClick(event, column) { + let order = this.toggleOrder(column); + let target = event.target; while (target && target.tagName !== 'TH') { target = target.parentNode; diff --git a/packages/table/src/table.vue b/packages/table/src/table.vue index f7d0aea72..b06769752 100644 --- a/packages/table/src/table.vue +++ b/packages/table/src/table.vue @@ -15,6 +15,8 @@ :store="store" :layout="layout" :border="border" + :default-sort-prop="defaultSortProp" + :default-sort-order="defaultSortOrder" :style="{ width: layout.bodyWidth ? layout.bodyWidth + 'px' : '' }"> @@ -166,7 +168,11 @@ expandRowKeys: Array, - defaultExpandAll: Boolean + defaultExpandAll: Boolean, + + defaultSortProp: String, + + defaultSortOrder: String }, components: { diff --git a/test/unit/specs/table.spec.js b/test/unit/specs/table.spec.js index 06dc12016..3d9771d17 100644 --- a/test/unit/specs/table.spec.js +++ b/test/unit/specs/table.spec.js @@ -1105,9 +1105,9 @@ describe('Table', () => { }); setTimeout(_ => { - const elm = vm.$el.querySelector('.caret-wrapper > .ascending'); - + const elm = vm.$el.querySelector('.caret-wrapper'); elm.click(); + setTimeout(_ => { const lastCells = vm.$el.querySelectorAll('.el-table__body-wrapper tbody tr td:last-child'); expect(toArray(lastCells).map(node => node.textContent)).to.eql(['100', '95', '92', '92', '80']); @@ -1143,7 +1143,7 @@ describe('Table', () => { const vm = createTable('', '', '', 'sortable'); it('ascending', done => { - const elm = vm.$el.querySelector('.caret-wrapper > .ascending'); + const elm = vm.$el.querySelector('.caret-wrapper'); elm.click(); setTimeout(_ => { @@ -1155,7 +1155,7 @@ describe('Table', () => { }); it('descending', done => { - const elm = vm.$el.querySelector('.caret-wrapper > .descending'); + const elm = vm.$el.querySelector('.caret-wrapper'); elm.click(); setTimeout(_ => {