update Table

update Table
This commit is contained in:
梁灏 2016-11-29 15:35:06 +08:00
parent cb31ede039
commit 9f853e3ec8
2 changed files with 33 additions and 23 deletions

View file

@ -321,39 +321,35 @@
$body.scrollLeft = $body.scrollLeft - 10; $body.scrollLeft = $body.scrollLeft - 10;
} }
}, },
sortData (data, type, index) {
const key = this.cloneColumns[index].key;
data.sort((a, b) => {
if (this.cloneColumns[index].sortMethod) {
return this.cloneColumns[index].sortMethod(a, b);
} else {
return type === 'asc' ? a[key] > b[key] : a[key] < b[key];
}
});
return data;
},
handleSort (index, type) { handleSort (index, type) {
this.cloneColumns.forEach((col) => col._sortType = 'normal'); this.cloneColumns.forEach((col) => col._sortType = 'normal');
const key = this.cloneColumns[index].key; const key = this.cloneColumns[index].key;
if (this.cloneColumns[index].sortable !== 'custom') { // custom is for remote sort if (this.cloneColumns[index].sortable !== 'custom') { // custom is for remote sort
if (type === 'asc') { if (type === 'normal') {
this.rebuildData.sort((a, b) => {
if (this.cloneColumns[index].sortMethod) {
return this.cloneColumns[index].sortMethod(a, b);
} else {
return a[key] > b[key];
}
});
} else if (type === 'desc') {
this.rebuildData.sort((a, b) => {
if (this.cloneColumns[index].sortMethod) {
return this.cloneColumns[index].sortMethod(a, b);
} else {
return a[key] < b[key];
}
});
} else if (type === 'normal') {
this.rebuildData = this.makeData(); this.rebuildData = this.makeData();
} else {
this.rebuildData = this.sortData(this.rebuildData, type, index);
} }
} }
this.cloneColumns[index]._sortType = type; this.cloneColumns[index]._sortType = type;
this.$emit('on-sort-change', { this.$emit('on-sort-change', {
column: JSON.parse(JSON.stringify(this.columns[this.cloneColumns[index]._index])), column: JSON.parse(JSON.stringify(this.columns[this.cloneColumns[index]._index])),
key: key, key: key,
order: type order: type
}) });
}, },
handleFilterHide (index) { // clear checked that not filter now handleFilterHide (index) { // clear checked that not filter now
if (!this.cloneColumns[index]._isFiltered) this.cloneColumns[index]._filterChecked = []; if (!this.cloneColumns[index]._isFiltered) this.cloneColumns[index]._filterChecked = [];
@ -378,7 +374,7 @@
}, },
handleFilter (index) { handleFilter (index) {
const column = this.cloneColumns[index]; const column = this.cloneColumns[index];
let filterData = this.makeData(); let filterData = this.makeDataWithSort();
// filter others first, after filter this column // filter others first, after filter this column
filterData = this.filterOtherData(filterData, index); filterData = this.filterOtherData(filterData, index);
@ -396,7 +392,7 @@
this.cloneColumns[index]._filterVisible = false; this.cloneColumns[index]._filterVisible = false;
this.cloneColumns[index]._filterChecked = []; this.cloneColumns[index]._filterChecked = [];
let filterData = this.makeData(); let filterData = this.makeDataWithSort();
filterData = this.filterOtherData(filterData, index); filterData = this.filterOtherData(filterData, index);
this.rebuildData = filterData; this.rebuildData = filterData;
}, },
@ -405,6 +401,20 @@
data.forEach((row, index) => row._index = index); data.forEach((row, index) => row._index = index);
return data; return data;
}, },
makeDataWithSort () {
let data = this.makeData();
let sortType = 'normal';
let sortIndex = -1;
for (let i = 0; i < this.cloneColumns.length; i++) {
if (this.cloneColumns[i]._sortType !== 'normal') {
sortType = this.cloneColumns[i]._sortType;
sortIndex = i;
break;
}
}
if (sortType !== 'normal') data = this.sortData(data, sortType, sortIndex);
return data;
},
makeObjData () { makeObjData () {
let data = {}; let data = {};
this.data.forEach((row, index) => { this.data.forEach((row, index) => {

View file

@ -99,7 +99,7 @@
key: 'age', key: 'age',
align: 'right', align: 'right',
// fixed: 'left', // fixed: 'left',
sortable: 'custom', sortable: true,
width: 100, width: 100,
filters: [ filters: [
{ {
@ -235,7 +235,7 @@
// }); // });
// this.data.splice(0, 1) // this.data.splice(0, 1)
// this.columns.splice(2,1) // this.columns.splice(2,1)
}, 2000); }, 3000);
} }
} }
</script> </script>