toggle sortable

pull/2182/head
njleonzhang 2017-01-03 20:08:43 +08:00
parent f1881ef463
commit 9ef1faaec9
3 changed files with 44 additions and 10 deletions

View File

@ -112,9 +112,9 @@ export default {
}
{
column.sortable
? <span class="caret-wrapper">
<i class="sort-caret ascending" on-click={ ($event) => this.handleHeaderClick($event, column, 'ascending')}></i>
<i class="sort-caret descending" on-click={ ($event) => this.handleHeaderClick($event, column, 'descending')}></i>
? <span class="caret-wrapper" on-click={ ($event) => this.handleHeaderClick($event, column) }>
<i class="sort-caret ascending"></i>
<i class="sort-caret descending"></i>
</span>
: ''
}
@ -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;

View File

@ -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' : '' }">
</table-header>
</div>
@ -166,7 +168,11 @@
expandRowKeys: Array,
defaultExpandAll: Boolean
defaultExpandAll: Boolean,
defaultSortProp: String,
defaultSortOrder: String
},
components: {

View File

@ -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(_ => {