UNPKG

8.18 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable page
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-08-01 14:34:01
5 */
6
7// 设置当前页
8var setCurrentPage = function setCurrentPage(pageIndex, notCacheCurrentPage) {
9 var nowTotalRow = this.totalRow();
10 if (pageIndex != this.pageIndex() && notCacheCurrentPage != true) this.cacheCurrentPage();
11 this.pageIndex(pageIndex);
12 var cachedPage = this.cachedPages[this.pageIndex()];
13 if (cachedPage) {
14 // 取当前页的选中行重设选中行
15 var selectedIndices = cachedPage.selectedIndices;
16 this.removeAllRows();
17 this.setRows(cachedPage.rows);
18 this.setRowsSelect(selectedIndices);
19 }
20 this.totalRow(nowTotalRow);
21};
22
23// 更新分页信息,通过fire调用,不对外提供
24var updatePages = function updatePages(pages) {
25 var pageSize = this.pageSize(),
26 pageIndex = 0,
27 page,
28 r,
29 row;
30 var page, index, i, rows, focus, selectIndices, status, j, row, originRow;
31 for (i = 0; i < pages.length; i++) {
32 index = pages[i].index;
33 rows = pages[i].rows;
34 focus = pages[i].current;
35 selectIndices = pages[i].select;
36 status = pages[i].status;
37 if (status === 'del') {
38 this.cachedPages[index] = null;
39 continue;
40 }
41 if (!this.cachedPages[index]) {
42 page = new Page({
43 parent: this
44 });
45 page.rows = rows;
46 for (var j = 0; j < page.rows.length; j++) {
47 page.rows[j].rowId = page.rows[j].id;
48 delete page.rows[j].id;
49 }
50 this.cachedPages[index] = page;
51 page.selectedIndices = selectIndices;
52 page.focus = focus;
53 } else {
54 page = this.cachedPages[index];
55 page.selectedIndices = selectIndices;
56 page.focus = focus;
57 for (var j = 0; j < rows.length; j++) {
58 r = rows[j];
59 if (!r.id) r.id = Row.getRandomRowId();
60 if (r.status == Row.STATUS.DELETE) {
61
62 var row = page.getRowByRowId(r.id);
63 if (row) {
64 // 针对后台不传回总行数的情况下更新总行数
65 var oldTotalRow = this.totalRow();
66 var newTotalRow = oldTotalRow - 1;
67 this.totalRow(newTotalRow);
68 if (row.status == Row.STATUS.NEW) {
69 this.newCount -= 1;
70 if (this.newCount < 0) this.newCount = 0;
71 }
72 }
73 this.removeRowByRowId(r.id);
74 page.removeRowByRowId(r.id);
75 } else {
76 row = page.getRowByRowId(r.id);
77 if (row) {
78 page.updateRow(row, r);
79 // if(row.status == Row.STATUS.NEW){
80 // // 针对后台不传回总行数的情况下更新总行数
81 // var oldTotalRow = this.totalRow();
82 // var newTotalRow = oldTotalRow + 1;
83 // this.totalRow(newTotalRow);
84 // }
85 if (row.status == Row.STATUS.NEW && r.status != Row.STATUS.NEW) {
86 this.newCount -= 1;
87 if (this.newCount < 0) this.newCount = 0;
88 }
89 row.setStatus(Row.STATUS.NORMAL);
90 if (r.status == Row.STATUS.NEW) {
91 row.setStatus(Row.STATUS.NEW);
92 }
93 } else {
94 r.rowId = r.id;
95 delete r.id;
96 page.rows.push(r);
97 if (r.status != Row.STATUS.NEW) {
98 row.setStatus(Row.STATUS.NORMAL);
99 } else {
100 this.newCount += 1;
101 }
102 // 针对后台不传回总行数的情况下更新总行数
103 var oldTotalRow = this.totalRow();
104 var newTotalRow = oldTotalRow + 1;
105 this.totalRow(newTotalRow);
106 }
107 }
108 }
109 }
110 }
111};
112
113// 前端分页方法,不建议使用,建议在后端进行分页
114var setPages = function setPages(allRows) {
115 var pageSize = this.pageSize(),
116 pageIndex = 0,
117 page;
118 this.cachedPages = [];
119 for (var i = 0; i < allRows.length; i++) {
120 pageIndex = Math.floor(i / pageSize);
121 if (!this.cachedPages[pageIndex]) {
122 page = new Page({
123 parent: this
124 });
125 this.cachedPages[pageIndex] = page;
126 }
127 page.rows.push(allRows[i]);
128 }
129 if (this.pageIndex() > -1) this.setCurrentPage(this.pageIndex());
130 this.totalRow(allRows.length);
131 this.totalPages(pageIndex + 1);
132};
133
134// 判断是否存在索引对应的Page
135var hasPage = function hasPage(pageIndex) {
136 return this.pageCache && this.cachedPages[pageIndex] ? true : false;
137};
138
139// 清空cachedPages
140var clearCache = function clearCache() {
141 this.cachedPages = [];
142};
143
144// 更新当前分页的page对象
145var cacheCurrentPage = function cacheCurrentPage() {
146 if (this.pageCache && this.pageIndex() > -1) {
147 var page = new Page({
148 parent: this
149 });
150 page.focus = this.getFocusIndex();
151 page.selectedIndices = this.selectedIndices().slice();
152 var rows = this.rows.peek();
153 for (var i = 0; i < rows.length; i++) {
154 var r = rows[i].getData();
155 r.rowId = r.id;
156 delete r.id;
157 page.rows.push(r);
158 }
159 this.cachedPages[this.pageIndex()] = page;
160 }
161};
162
163//根据datatable的选中行更新每页的选中行
164var updatePagesSelect = function updatePagesSelect() {
165 var selectRows = this.getSelectedRows();
166 var pages = this.getPages();
167 for (var i = 0; i < pages.length; i++) {
168 var rows = pages[i].rows;
169 var selectedIndices = [];
170 for (var j = 0; j < selectRows.length; j++) {
171 var nowSelectRow = selectRows[j];
172 for (var k = 0; k < rows.length; k++) {
173 var row = rows[k];
174 if (nowSelectRow == row) {
175 selectedIndices.push(k);
176 break;
177 }
178 }
179 }
180 pages[i].selectedIndices = selectedIndices;
181 }
182};
183
184//根据datatable的rows更新当前页的rows
185var updatePageRows = function updatePageRows() {
186 if (this.pageCache) {
187 var pageIndex = this.pageIndex();
188 var page = this.getPages()[pageIndex];
189 if (page) {
190 page.rows = this.rows();
191 }
192 }
193};
194
195//根据datatable的选中行更新page的选中行
196var updatePageSelect = function updatePageSelect() {
197 if (this.pageCache) {
198 var pageIndex = this.pageIndex();
199 var page = this.getPages()[pageIndex];
200 if (page) {
201 var selectedIndices = this.selectedIndices().slice();
202 page.selectedIndices = selectedIndices;
203 }
204 }
205};
206
207//根据datatable的focus更新page的focus
208var updatePageFocus = function updatePageFocus() {
209 if (this.pageCache) {
210 var pageIndex = this.pageIndex();
211 var page = this.getPages()[pageIndex];
212 if (page) {
213 page.focus = this.getFocusIndex();
214 }
215 }
216};
217
218// 根据datatable更新page对象
219var updatePageAll = function updatePageAll() {
220 this.updatePageRows();
221 this.updatePageSelect();
222 this.updatePageFocus();
223};
224
225export var pageFunObj = {
226 setCurrentPage: setCurrentPage,
227 updatePages: updatePages,
228 setPages: setPages,
229 hasPage: hasPage,
230 clearCache: clearCache,
231 cacheCurrentPage: cacheCurrentPage,
232 updatePagesSelect: updatePagesSelect,
233 updatePageRows: updatePageRows,
234 updatePageSelect: updatePageSelect,
235 updatePageFocus: updatePageFocus,
236 updatePageAll: updatePageAll
237};
\No newline at end of file