UNPKG

15.1 kBJavaScriptView Raw
1/**
2 * Module : kero DataTable getData
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-07-30 14:34:01
5 */
6
7/**
8 * 获取DataTable的数据信息
9 * @memberof DataTable
10 * @return {array} 数据信息对应的数组,每项对应一条数据
11 * @example
12 * datatable.getData()
13 */
14const getData = function() {
15 var datas = [],
16 rows = this.rows();
17 for (var i = 0; i < rows.length; i++) {
18 datas.push(rows[i].getData())
19 }
20 return datas
21}
22
23
24// 将page转为row对象格式
25const page2data = function(page, pageIndex) {
26 var data = {}
27 data.focus = page.focus;
28 data.index = pageIndex;
29 data.select = page.selectedIndices;
30 return data;
31}
32
33/**
34 * 按照特定规则获取数据
35 * @memberof DataTable
36 * @param {string} rule
37 * DataTable.SUBMIT.current('current') :当前选中行
38 * DataTable.SUBMIT.focus('focus') :当前focus行
39 * DataTable.SUBMIT.all('all') :所有行
40 * DataTable.SUBMIT.select('select') :当前页选中行
41 * DataTable.SUBMIT.change('change') :发生改变的行
42 * DataTable.SUBMIT.empty('empty') :不获取数据,返回空数组
43 * DataTable.SUBMIT.allSelect('allSelect') :所有页选中行
44 * DataTable.SUBMIT.allPages('allPages') :所有页的数据
45 * @return {array} 按照规则获取到的数据信息
46 * @example
47 * datatable.getDataByRule(‘all’)
48 */
49
50const getDataByRule = function(rule) {
51 var returnData = {},
52 datas = null,
53 rows;
54 returnData.meta = this.meta
55 returnData.params = this.params
56 rule = rule || DataTable.SUBMIT.current;
57 // 存在多页及不存在多页分开处理
58 if (this.pageCache) {
59 var pages = this.getPages();
60 if (rule == DataTable.SUBMIT.current || rule == DataTable.SUBMIT.focus) {
61 datas = []
62 var pageIndex = this.pageIndex();
63 var currPage = pages[pageIndex];
64 if (currPage) {
65 var currIndex = this.focusIndex()
66 if (rule == DataTable.SUBMIT.current) {
67 if (currIndex == -1)
68 currIndex = this.getSelectedIndex()
69 }
70 var data = page2data(currPage, pageIndex);
71 data.rows = [];
72 for (var i = 0, count = currPage.rows.length; i < count; i++) {
73 var row = currPage.rows[i].getData();
74 if (i != currIndex)
75 row.data = {}
76 data.rows.push(row);
77 }
78 datas.push(data);
79 }
80 } else if (rule == DataTable.SUBMIT.all || rule == DataTable.SUBMIT.allPages) {
81 datas = []
82 for (var i = 0; i < pages.length; i++) {
83 var currPage = pages[i]
84 var data = page2data(currPage, i);
85 data.rows = [];
86 for (var i = 0; i < currPage.rows.length; i++) {
87 data.rows.push(currPage.rows[i].getData())
88 }
89 datas.push(data)
90 }
91 } else if (rule == DataTable.SUBMIT.select) {
92 datas = []
93 var pageIndex = this.pageIndex();
94 var currPage = pages[pageIndex];
95 if (currPage) {
96 var data = page2data(currPage, pageIndex);
97 data.rows = [];
98 for (var i = 0, count = currPage.rows.length; i < count; i++) {
99 var row = currPage.rows[i].getData();
100 if (data.select.indexOf(i) < 0)
101 row.data = {}
102 data.rows.push(row);
103 }
104 datas.push(data);
105 }
106 } else if (rule == DataTable.SUBMIT.allSelect) {
107 datas = []
108 for (var i = 0; i < pages.length; i++) {
109 var currPage = pages[i]
110 var data = page2data(currPage, i);
111 data.rows = [];
112 for (var j = 0, count = currPage.rows.length; j < count; j++) {
113 var row = currPage.rows[j].getData();
114 if (data.select.indexOf(j) < 0)
115 row.data = {}
116 data.rows.push(row);
117 }
118 datas.push(data)
119 }
120 } else if (rule == DataTable.SUBMIT.change) {
121 datas = []
122 for (var i = 0; i < pages.length; i++) {
123 var currPage = pages[i]
124 var data = page2data(currPage, i);
125 data.rows = [];
126 for (var j = 0, count = currPage.rows.length; j < count; j++) {
127 var row = currPage.rows[j].getData();
128 if (row.status == Row.STATUS.NORMAL) {
129 row.data = {}
130 }
131 data.rows.push(row)
132 }
133 datas.push(data)
134 }
135 } else if (rule === DataTable.SUBMIT.empty) {
136 datas = []
137 }
138 if (pages.length < 1 || !pages[this.pageIndex()]) {
139 datas = [{
140 index: this.pageIndex(),
141 select: [],
142 focus: -1,
143 rows: []
144 }];
145 }
146 returnData.pages = datas;
147 } else {
148 if (rule == DataTable.SUBMIT.current) {
149 datas = []
150 var currIndex = this.focusIndex()
151 if (currIndex == -1)
152 currIndex = this.getSelectedIndex()
153 rows = this.rows();
154 for (var i = 0, count = rows.length; i < count; i++) {
155 if (i == currIndex)
156 datas.push(rows[i].getData())
157 else
158 datas.push(rows[i].getEmptyData())
159 }
160
161 } else if (rule == DataTable.SUBMIT.focus) {
162 datas = []
163 rows = this.rows();
164 for (var i = 0, count = rows.length; i < count; i++) {
165 if (i == this.focusIndex())
166 datas.push(rows[i].getData())
167 else
168 datas.push(rows[i].getEmptyData())
169 }
170 } else if (rule == DataTable.SUBMIT.all) {
171 datas = this.getData()
172 } else if (rule == DataTable.SUBMIT.select) {
173 datas = this.getSelectedDatas(true)
174 } else if (rule == DataTable.SUBMIT.change) {
175 datas = this.getChangedDatas()
176 } else if (rule === DataTable.SUBMIT.empty) {
177 datas = []
178 }
179
180 returnData.rows = datas
181 returnData.select = this.getSelectedIndexs()
182 returnData.focus = this.getFocusIndex()
183 }
184
185
186
187
188 returnData.pageSize = this.pageSize()
189 returnData.pageIndex = this.pageIndex()
190 returnData.isChanged = this.isChanged()
191 returnData.master = this.master
192 returnData.pageCache = this.pageCache
193 return returnData
194}
195
196
197/**
198 * 根据索引获取指定行数据信息
199 * @memberof DataTable
200 * @param {number} index 需要获取的数据信息的索引
201 * @return {object} 获取到的指定行数据信息
202 * @example
203 * datatable.getRow(1)
204 */
205const getRow = function(index) {
206 //return this.rows()[index] //modify by licza. improve performance
207 return this.rows.peek()[index]
208};
209
210// 获取子表的数据行
211const getChildRow = function(obj) {
212 var fullField = obj.fullField,
213 index = obj.index,
214 row = null;
215 if (parseInt(index) > -1) {
216 if ((index + '').indexOf('.') > 0) {
217 var fieldArr = fullField.split('.');
218 var indexArr = index.split('.');
219 var nowDataTable = this;
220 var nowRow = null;
221 for (var i = 0; i < indexArr.length; i++) {
222 nowRow = nowDataTable.getRow(indexArr[i]);
223 if (i < indexArr.length - 1) {
224 if (nowRow) {
225 nowDataTable = nowRow.getValue(fieldArr[i]);
226 } else {
227 nowRow = null;
228 break;
229 }
230 }
231 }
232 row = nowRow;
233 } else {
234 row = this.getRow(index);
235 }
236 }
237 return row;
238};
239
240/**
241 * 根据rowid获取Row对象
242 * @memberof DataTable
243 * @param {string} rowid 需要获取的Row对应的rowid
244 * @returns {Row}
245 * @example
246 * datatable.getRowByRowId('rowid')
247 */
248const getRowByRowId = function(rowid) {
249 var rows = this.rows.peek();
250 for (var i = 0, count = rows.length; i < count; i++) {
251 if (rows[i].rowId == rowid)
252 return rows[i]
253 }
254 return null
255}
256
257/**
258 * 获取Row对象对应的索引
259 * @memberof DataTable
260 * @param {u.Row} 需要获取索引的row对象
261 * @returns {*}
262 * @example
263 * var row = datatable.getRow(1)
264 * datatable.getRowIndex(row) // 1
265 */
266const getRowIndex = function(row) {
267 var rows = this.rows.peek();
268 for (var i = 0, count = rows.length; i < count; i++) {
269 if (rows[i].rowId === row.rowId)
270 return i;
271 }
272 return -1;
273};
274
275/**
276 * 根据字段及字段值获取所有数据行
277 * @memberof DataTable
278 * @param {string} field 需要获取行的对应字段
279 * @param {string} value 需要获取行的对应字段值
280 * @return {array} 根据字段及字段值获取的所有数据行
281 * @example
282 * datatable.getRowsByField('field1','value1')
283 */
284const getRowsByField = function(field, value) {
285 var rows = this.rows.peek();
286 var returnRows = new Array();
287 for (var i = 0, count = rows.length; i < count; i++) {
288 if (rows[i].getValue(field) === value)
289 returnRows.push(rows[i]);
290 }
291 return returnRows;
292}
293
294/**
295 * 根据字段及字段值获取第一条数据行
296 * @memberof DataTable
297 * @param {string} field 需要获取行的对应字段
298 * @param {string} value 需要获取行的对应字段值
299 * @return {u.Row} 根据字段及字段值获取第一条数据行
300 * @example
301 * datatable.getRowByField('field1','value1')
302 */
303const getRowByField = function(field, value) {
304 var rows = this.rows.peek();
305 for (var i = 0, count = rows.length; i < count; i++) {
306 if (rows[i].getValue(field) === value)
307 return rows[i]
308 }
309 return null;
310}
311
312/**
313 * 获取当前页的所有数据行
314 * @memberof DataTable
315 * @return {array} 获取到的数据行
316 * @example
317 * datatable.getAllRows()
318 */
319const getAllRows = function() {
320 return this.rows.peek();
321}
322
323/**
324 * 获取所有页的所有数据行
325 * @memberof DataTable
326 * @return {array} 获取到的数据行
327 * @example
328 * datatable.getAllPageRows()
329 */
330const getAllPageRows = function() {
331 var datas = [],
332 rows;
333 for (var i = 0; i < this.totalPages(); i++) {
334 rows = [];
335 if (i == this.pageIndex()) {
336 rows = this.getData();
337 } else {
338 var page = this.cachedPages[i];
339 if (page) {
340 rows = page.getData();
341 }
342 }
343 for (var j = 0; j < rows.length; j++) {
344 datas.push(rows[j]);
345 }
346 }
347 return datas;
348}
349
350/**
351 * 获取发生变化的数据信息
352 * @memberof DataTable
353 * @param {boolean} withEmptyRow=false 未发生变化的数据是否使用空行代替,true表示以空行代替未发生变化行,false相反
354 * @return {array} 发生变化的数据信息
355 * @example
356 * datatable.getChangedDatas()
357 */
358const getChangedDatas = function(withEmptyRow) {
359 var datas = [],
360 rows = this.rows();
361 for (var i = 0, count = rows.length; i < count; i++) {
362 if (rows[i] && rows[i].status != Row.STATUS.NORMAL) {
363 datas.push(rows[i].getData())
364 } else if (withEmptyRow == true) {
365 datas.push(rows[i].getEmptyData())
366 }
367 }
368 return datas
369};
370
371/**
372 * 获取发生改变的Row对象
373 * @memberof DataTable
374 * @return {array} 发生改变的Row对象
375 * @example
376 * datatable.getChangedRows()
377 */
378const getChangedRows = function() {
379 var changedRows = [],
380 rows = this.rows.peek();
381 for (var i = 0, count = rows.length; i < count; i++) {
382 if (rows[i] && rows[i].status != Row.STATUS.NORMAL) {
383 changedRows.push(rows[i])
384 }
385 }
386 return changedRows
387}
388
389const getDeleteRows = function() {
390 var deleteRows = [],
391 rows = this.rows.peek();
392 for (var i = 0, count = rows.length; i < count; i++) {
393 if (rows[i] && rows[i].status == Row.STATUS.FALSE_DELETE) {
394 deleteRows.push(rows[i])
395 }
396 }
397 return deleteRows
398}
399
400/**
401 * 根据字段获取对应Row对象的字段值
402 * @memberof DataTable
403 * @param {string} fieldName 需要获取的值对应的字段
404 * @param {u.Row} [row=默认为当前行] 对应的数据行
405 * @return {string} 获取到的字段值
406 * @example
407 * datatable.getValue('field1')
408 * var row = datatable.getRow(1)
409 * datatable.getValue('field1',row)
410 */
411const getValue = function(fieldName, row) {
412 row = row || this.getCurrentRow()
413 if (row)
414 return row.getValue(fieldName)
415 else
416 return ''
417}
418
419
420/**
421 * 根据行号获取行索引
422 * @memberof DataTable
423 * @param {String} rowId
424 * @example
425 * datatable.getIndexByRowId('rowid')
426 */
427const getIndexByRowId = function(rowId) {
428 var rows = this.rows();
429 for (var i = 0, count = rows.length; i < count; i++) {
430 if (rows[i].rowId == rowId)
431 return i
432 }
433 return -1
434}
435
436/**
437 * 获取所有行数据信息
438 * @memberof DataTable
439 * @return {array} 所有行数据信息
440 * @example
441 * datatable.getAllDatas()
442 */
443const getAllDatas = function() {
444 var rows = this.getAllRows()
445 var datas = []
446 for (var i = 0, count = rows.length; i < count; i++)
447 if (rows[i])
448 datas.push(rows[i].getData())
449 return datas
450}
451
452
453/**
454 * 根据索引获取rowid
455 * @memberof DataTable
456 * @param {array} indices 需要获取rowid的索引值
457 * @return {array} 获取到的rowid
458 * @example
459 * datatable.getRowIdsByIndices([1,2,5])
460 */
461const getRowIdsByIndices = function(indices) {
462 var rowIds = []
463 for (var i = 0; i < indices.length; i++) {
464 rowIds.push(this.getRow(indices[i]).rowId)
465 }
466 return rowIds
467}
468/**
469 * 根据索引获取row
470 * @memberof DataTable
471 * @param {array} indices 需要获取rowid的索引值
472 * @return {array} 获取到的row
473 * @example
474 * datatable.getRowIdsByIndices([1,2,5])
475 */
476const getRowsByIndices = function(indices) {
477 var rows = []
478 for (var i = 0; i < indices.length; i++) {
479 rows.push(this.getRow(indices[i]))
480 }
481 return rows
482}
483
484
485export const getDataFunObj = {
486 getData: getData,
487 getDataByRule: getDataByRule,
488 getRow: getRow,
489 getChildRow: getChildRow,
490 getRowByRowId: getRowByRowId,
491 getRowIndex: getRowIndex,
492 getRowsByField: getRowsByField,
493 getRowByField: getRowByField,
494 getAllRows: getAllRows,
495 getAllPageRows: getAllPageRows,
496 getChangedDatas: getChangedDatas,
497 getChangedRows: getChangedRows,
498 getDeleteRows: getDeleteRows,
499 getValue: getValue,
500 getIndexByRowId: getIndexByRowId,
501 getAllDatas: getAllDatas,
502 getRowIdsByIndices: getRowIdsByIndices,
503 getRowsByIndices: getRowsByIndices
504}