kero
Version:
<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>
237 lines (224 loc) • 8.18 kB
JavaScript
/**
* Module : kero dataTable page
* Author : liuyk(liuyk@yonyou.com)
* Date : 2016-08-01 14:34:01
*/
// 设置当前页
var setCurrentPage = function setCurrentPage(pageIndex, notCacheCurrentPage) {
var nowTotalRow = this.totalRow();
if (pageIndex != this.pageIndex() && notCacheCurrentPage != true) this.cacheCurrentPage();
this.pageIndex(pageIndex);
var cachedPage = this.cachedPages[this.pageIndex()];
if (cachedPage) {
// 取当前页的选中行重设选中行
var selectedIndices = cachedPage.selectedIndices;
this.removeAllRows();
this.setRows(cachedPage.rows);
this.setRowsSelect(selectedIndices);
}
this.totalRow(nowTotalRow);
};
// 更新分页信息,通过fire调用,不对外提供
var updatePages = function updatePages(pages) {
var pageSize = this.pageSize(),
pageIndex = 0,
page,
r,
row;
var page, index, i, rows, focus, selectIndices, status, j, row, originRow;
for (i = 0; i < pages.length; i++) {
index = pages[i].index;
rows = pages[i].rows;
focus = pages[i].current;
selectIndices = pages[i].select;
status = pages[i].status;
if (status === 'del') {
this.cachedPages[index] = null;
continue;
}
if (!this.cachedPages[index]) {
page = new Page({
parent: this
});
page.rows = rows;
for (var j = 0; j < page.rows.length; j++) {
page.rows[j].rowId = page.rows[j].id;
delete page.rows[j].id;
}
this.cachedPages[index] = page;
page.selectedIndices = selectIndices;
page.focus = focus;
} else {
page = this.cachedPages[index];
page.selectedIndices = selectIndices;
page.focus = focus;
for (var j = 0; j < rows.length; j++) {
r = rows[j];
if (!r.id) r.id = Row.getRandomRowId();
if (r.status == Row.STATUS.DELETE) {
var row = page.getRowByRowId(r.id);
if (row) {
// 针对后台不传回总行数的情况下更新总行数
var oldTotalRow = this.totalRow();
var newTotalRow = oldTotalRow - 1;
this.totalRow(newTotalRow);
if (row.status == Row.STATUS.NEW) {
this.newCount -= 1;
if (this.newCount < 0) this.newCount = 0;
}
}
this.removeRowByRowId(r.id);
page.removeRowByRowId(r.id);
} else {
row = page.getRowByRowId(r.id);
if (row) {
page.updateRow(row, r);
// if(row.status == Row.STATUS.NEW){
// // 针对后台不传回总行数的情况下更新总行数
// var oldTotalRow = this.totalRow();
// var newTotalRow = oldTotalRow + 1;
// this.totalRow(newTotalRow);
// }
if (row.status == Row.STATUS.NEW && r.status != Row.STATUS.NEW) {
this.newCount -= 1;
if (this.newCount < 0) this.newCount = 0;
}
row.setStatus(Row.STATUS.NORMAL);
if (r.status == Row.STATUS.NEW) {
row.setStatus(Row.STATUS.NEW);
}
} else {
r.rowId = r.id;
delete r.id;
page.rows.push(r);
if (r.status != Row.STATUS.NEW) {
row.setStatus(Row.STATUS.NORMAL);
} else {
this.newCount += 1;
}
// 针对后台不传回总行数的情况下更新总行数
var oldTotalRow = this.totalRow();
var newTotalRow = oldTotalRow + 1;
this.totalRow(newTotalRow);
}
}
}
}
}
};
// 前端分页方法,不建议使用,建议在后端进行分页
var setPages = function setPages(allRows) {
var pageSize = this.pageSize(),
pageIndex = 0,
page;
this.cachedPages = [];
for (var i = 0; i < allRows.length; i++) {
pageIndex = Math.floor(i / pageSize);
if (!this.cachedPages[pageIndex]) {
page = new Page({
parent: this
});
this.cachedPages[pageIndex] = page;
}
page.rows.push(allRows[i]);
}
if (this.pageIndex() > -1) this.setCurrentPage(this.pageIndex());
this.totalRow(allRows.length);
this.totalPages(pageIndex + 1);
};
// 判断是否存在索引对应的Page
var hasPage = function hasPage(pageIndex) {
return this.pageCache && this.cachedPages[pageIndex] ? true : false;
};
// 清空cachedPages
var clearCache = function clearCache() {
this.cachedPages = [];
};
// 更新当前分页的page对象
var cacheCurrentPage = function cacheCurrentPage() {
if (this.pageCache && this.pageIndex() > -1) {
var page = new Page({
parent: this
});
page.focus = this.getFocusIndex();
page.selectedIndices = this.selectedIndices().slice();
var rows = this.rows.peek();
for (var i = 0; i < rows.length; i++) {
var r = rows[i].getData();
r.rowId = r.id;
delete r.id;
page.rows.push(r);
}
this.cachedPages[this.pageIndex()] = page;
}
};
//根据datatable的选中行更新每页的选中行
var updatePagesSelect = function updatePagesSelect() {
var selectRows = this.getSelectedRows();
var pages = this.getPages();
for (var i = 0; i < pages.length; i++) {
var rows = pages[i].rows;
var selectedIndices = [];
for (var j = 0; j < selectRows.length; j++) {
var nowSelectRow = selectRows[j];
for (var k = 0; k < rows.length; k++) {
var row = rows[k];
if (nowSelectRow == row) {
selectedIndices.push(k);
break;
}
}
}
pages[i].selectedIndices = selectedIndices;
}
};
//根据datatable的rows更新当前页的rows
var updatePageRows = function updatePageRows() {
if (this.pageCache) {
var pageIndex = this.pageIndex();
var page = this.getPages()[pageIndex];
if (page) {
page.rows = this.rows();
}
}
};
//根据datatable的选中行更新page的选中行
var updatePageSelect = function updatePageSelect() {
if (this.pageCache) {
var pageIndex = this.pageIndex();
var page = this.getPages()[pageIndex];
if (page) {
var selectedIndices = this.selectedIndices().slice();
page.selectedIndices = selectedIndices;
}
}
};
//根据datatable的focus更新page的focus
var updatePageFocus = function updatePageFocus() {
if (this.pageCache) {
var pageIndex = this.pageIndex();
var page = this.getPages()[pageIndex];
if (page) {
page.focus = this.getFocusIndex();
}
}
};
// 根据datatable更新page对象
var updatePageAll = function updatePageAll() {
this.updatePageRows();
this.updatePageSelect();
this.updatePageFocus();
};
export var pageFunObj = {
setCurrentPage: setCurrentPage,
updatePages: updatePages,
setPages: setPages,
hasPage: hasPage,
clearCache: clearCache,
cacheCurrentPage: cacheCurrentPage,
updatePagesSelect: updatePagesSelect,
updatePageRows: updatePageRows,
updatePageSelect: updatePageSelect,
updatePageFocus: updatePageFocus,
updatePageAll: updatePageAll
};