UNPKG

kero

Version:

<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>

533 lines (500 loc) 16.1 kB
/** * Module : kero DataTable getData * Author : liuyk(liuyk@yonyou.com) * Date : 2016-07-30 14:34:01 */ /** * 获取DataTable的数据信息 * @memberof DataTable * @return {array} 数据信息对应的数组,每项对应一条数据 * @example * datatable.getData() */ const getData = function() { var datas = [], rows = this.rows(); for (var i = 0; i < rows.length; i++) { datas.push(rows[i].getData()) } return datas } // 将page转为row对象格式 const page2data = function(page, pageIndex) { var data = {} data.focus = page.focus; data.index = pageIndex; data.select = page.selectedIndices; return data; } /** * 按照特定规则获取数据 * @memberof DataTable * @param {string} rule * DataTable.SUBMIT.current('current') :当前选中行 * DataTable.SUBMIT.focus('focus') :当前focus行 * DataTable.SUBMIT.all('all') :所有行 * DataTable.SUBMIT.select('select') :当前页选中行 * DataTable.SUBMIT.change('change') :发生改变的行 * DataTable.SUBMIT.empty('empty') :不获取数据,返回空数组 * DataTable.SUBMIT.allSelect('allSelect') :所有页选中行 * DataTable.SUBMIT.allPages('allPages') :所有页的数据 * @return {array} 按照规则获取到的数据信息 * @example * datatable.getDataByRule(‘all’) */ const getDataByRule = function(rule) { var returnData = {}, datas = null, rows; returnData.meta = this.meta returnData.params = this.params rule = rule || DataTable.SUBMIT.current; // 存在多页及不存在多页分开处理 if (this.pageCache) { var pages = this.getPages(); if (rule == DataTable.SUBMIT.current || rule == DataTable.SUBMIT.focus) { datas = [] var pageIndex = this.pageIndex(); var currPage = pages[pageIndex]; if (currPage) { var currIndex = this.focusIndex() if (rule == DataTable.SUBMIT.current) { if (currIndex == -1) currIndex = this.getSelectedIndex() } var data = page2data(currPage, pageIndex); data.rows = []; for (var i = 0, count = currPage.rows.length; i < count; i++) { var row = currPage.rows[i].getData(); if (i != currIndex) row.data = {} data.rows.push(row); } datas.push(data); } } else if (rule == DataTable.SUBMIT.all || rule == DataTable.SUBMIT.allPages) { datas = [] for (var i = 0; i < pages.length; i++) { var currPage = pages[i] var data = page2data(currPage, i); data.rows = []; for (var i = 0; i < currPage.rows.length; i++) { data.rows.push(currPage.rows[i].getData()) } datas.push(data) } } else if (rule == DataTable.SUBMIT.select) { datas = [] var pageIndex = this.pageIndex(); var currPage = pages[pageIndex]; if (currPage) { var data = page2data(currPage, pageIndex); data.rows = []; for (var i = 0, count = currPage.rows.length; i < count; i++) { var row = currPage.rows[i].getData(); if (data.select.indexOf(i) < 0) row.data = {} data.rows.push(row); } datas.push(data); } } else if (rule == DataTable.SUBMIT.allSelect) { datas = [] for (var i = 0; i < pages.length; i++) { var currPage = pages[i] var data = page2data(currPage, i); data.rows = []; for (var j = 0, count = currPage.rows.length; j < count; j++) { var row = currPage.rows[j].getData(); if (data.select.indexOf(j) < 0) row.data = {} data.rows.push(row); } datas.push(data) } } else if (rule == DataTable.SUBMIT.change) { datas = [] for (var i = 0; i < pages.length; i++) { var currPage = pages[i] var data = page2data(currPage, i); data.rows = []; for (var j = 0, count = currPage.rows.length; j < count; j++) { var row = currPage.rows[j].getData(); if (row.status == Row.STATUS.NORMAL) { row.data = {} } data.rows.push(row) } datas.push(data) } } else if (rule === DataTable.SUBMIT.empty) { datas = [] } if (pages.length < 1 || !pages[this.pageIndex()]) { datas = [{ index: this.pageIndex(), select: [], focus: -1, rows: [] }]; } returnData.pages = datas; } else { if (rule == DataTable.SUBMIT.current) { datas = [] var currIndex = this.focusIndex() if (currIndex == -1) currIndex = this.getSelectedIndex() rows = this.rows(); for (var i = 0, count = rows.length; i < count; i++) { if (i == currIndex) datas.push(rows[i].getData()) else datas.push(rows[i].getEmptyData()) } } else if (rule == DataTable.SUBMIT.focus) { datas = [] rows = this.rows(); for (var i = 0, count = rows.length; i < count; i++) { if (i == this.focusIndex()) datas.push(rows[i].getData()) else datas.push(rows[i].getEmptyData()) } } else if (rule == DataTable.SUBMIT.all) { datas = this.getData() } else if (rule == DataTable.SUBMIT.select) { datas = this.getSelectedDatas(true) } else if (rule == DataTable.SUBMIT.change) { datas = this.getChangedDatas() } else if (rule === DataTable.SUBMIT.empty) { datas = [] } returnData.rows = datas returnData.select = this.getSelectedIndexs() returnData.focus = this.getFocusIndex() } returnData.pageSize = this.pageSize() returnData.pageIndex = this.pageIndex() returnData.isChanged = this.isChanged() returnData.master = this.master returnData.pageCache = this.pageCache return returnData } /** * 根据索引获取指定行数据信息 * @memberof DataTable * @param {number} index 需要获取的数据信息的索引 * @return {object} 获取到的指定行数据信息 * @example * datatable.getRow(1) */ const getRow = function(index) { //return this.rows()[index] //modify by licza. improve performance return this.rows.peek()[index] }; // 获取子表的数据行 const getChildRow = function(obj) { var fullField = obj.fullField, index = obj.index, row = null; if (parseInt(index) > -1) { if ((index + '').indexOf('.') > 0) { var fieldArr = fullField.split('.'); var indexArr = index.split('.'); var nowDataTable = this; var nowRow = null; for (var i = 0; i < indexArr.length; i++) { nowRow = nowDataTable.getRow(indexArr[i]); if (i < indexArr.length - 1) { if (nowRow) { nowDataTable = nowRow.getValue(fieldArr[i]); } else { nowRow = null; break; } } } row = nowRow; } else { row = this.getRow(index); } } return row; }; /** * 根据rowid获取Row对象 * @memberof DataTable * @param {string} rowid 需要获取的Row对应的rowid * @returns {Row} * @example * datatable.getRowByRowId('rowid') */ const getRowByRowId = function(rowid) { var rows = this.rows.peek(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i].rowId == rowid) return rows[i] } return null } /** * 获取Row对象对应的索引 * @memberof DataTable * @param {u.Row} 需要获取索引的row对象 * @returns {*} * @example * var row = datatable.getRow(1) * datatable.getRowIndex(row) // 1 */ const getRowIndex = function(row) { var rows = this.rows.peek(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i].rowId === row.rowId) return i; } return -1; }; /** * 根据字段及字段值获取所有数据行 * @memberof DataTable * @param {string} field 需要获取行的对应字段 * @param {string} value 需要获取行的对应字段值 * @return {array} 根据字段及字段值获取的所有数据行 * @example * datatable.getRowsByField('field1','value1') */ const getRowsByField = function(field, value) { var rows = this.rows.peek(); var returnRows = new Array(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i].getValue(field) === value) returnRows.push(rows[i]); } return returnRows; } /** * 根据多个字段及字段值获取所有数据行 * @memberof DataTable * @param {string} fields 需要获取行的对应字段及对应值数组 * @return {array} 根据字段及字段值获取的所有数据行 * @example * datatable.getRowsByFields([{field:'field1',value:'value1'},{field:'field2',value:'value2'}]) */ const getRowsByFields = function(fileds) { var rows = this.rows.peek(); var returnRows = new Array(); if (fileds && fileds.length > 0) { for (var i = 0, count = rows.length; i < count; i++) { var matchCount = 0; var l = fileds.length; for (var j = 0; j < l; j++) { if (rows[i].getValue(fileds[j]['field']) === fileds[j]['value']) matchCount++; } if (matchCount == l) returnRows.push(rows[i]); } } return returnRows; } /** * 根据字段及字段值获取第一条数据行 * @memberof DataTable * @param {string} field 需要获取行的对应字段 * @param {string} value 需要获取行的对应字段值 * @return {u.Row} 根据字段及字段值获取第一条数据行 * @example * datatable.getRowByField('field1','value1') */ const getRowByField = function(field, value) { var rows = this.rows.peek(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i].getValue(field) === value) return rows[i] } return null; } /** * 获取当前页的所有数据行 * @memberof DataTable * @return {array} 获取到的数据行 * @example * datatable.getAllRows() */ const getAllRows = function() { return this.rows.peek(); } /** * 获取所有页的所有数据行 * @memberof DataTable * @return {array} 获取到的数据行 * @example * datatable.getAllPageRows() */ const getAllPageRows = function() { var datas = [], rows; for (var i = 0; i < this.totalPages(); i++) { rows = []; if (i == this.pageIndex()) { rows = this.getData(); } else { var page = this.cachedPages[i]; if (page) { rows = page.getData(); } } for (var j = 0; j < rows.length; j++) { datas.push(rows[j]); } } return datas; } /** * 获取发生变化的数据信息 * @memberof DataTable * @param {boolean} withEmptyRow=false 未发生变化的数据是否使用空行代替,true表示以空行代替未发生变化行,false相反 * @return {array} 发生变化的数据信息 * @example * datatable.getChangedDatas() */ const getChangedDatas = function(withEmptyRow) { var datas = [], rows = this.rows(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i] && rows[i].status != Row.STATUS.NORMAL) { datas.push(rows[i].getData()) } else if (withEmptyRow == true) { datas.push(rows[i].getEmptyData()) } } return datas }; /** * 获取发生改变的Row对象 * @memberof DataTable * @return {array} 发生改变的Row对象 * @example * datatable.getChangedRows() */ const getChangedRows = function() { var changedRows = [], rows = this.rows.peek(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i] && rows[i].status != Row.STATUS.NORMAL) { changedRows.push(rows[i]) } } return changedRows } const getDeleteRows = function() { var deleteRows = [], rows = this.rows.peek(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i] && rows[i].status == Row.STATUS.FALSE_DELETE) { deleteRows.push(rows[i]) } } return deleteRows } /** * 根据字段获取对应Row对象的字段值 * @memberof DataTable * @param {string} fieldName 需要获取的值对应的字段 * @param {u.Row} [row=默认为当前行] 对应的数据行 * @return {string} 获取到的字段值 * @example * datatable.getValue('field1') * var row = datatable.getRow(1) * datatable.getValue('field1',row) */ const getValue = function(fieldName, row) { row = row || this.getCurrentRow() if (row) return row.getValue(fieldName) else return '' } /** * 根据行号获取行索引 * @memberof DataTable * @param {String} rowId * @example * datatable.getIndexByRowId('rowid') */ const getIndexByRowId = function(rowId) { var rows = this.rows(); for (var i = 0, count = rows.length; i < count; i++) { if (rows[i].rowId == rowId) return i } return -1 } /** * 获取所有行数据信息 * @memberof DataTable * @return {array} 所有行数据信息 * @example * datatable.getAllDatas() */ const getAllDatas = function() { var rows = this.getAllRows() var datas = [] for (var i = 0, count = rows.length; i < count; i++) if (rows[i]) datas.push(rows[i].getData()) return datas } /** * 根据索引获取rowid * @memberof DataTable * @param {array} indices 需要获取rowid的索引值 * @return {array} 获取到的rowid * @example * datatable.getRowIdsByIndices([1,2,5]) */ const getRowIdsByIndices = function(indices) { var rowIds = [] for (var i = 0; i < indices.length; i++) { if (this.getRow(indices[i])) rowIds.push(this.getRow(indices[i]).rowId) } return rowIds } /** * 根据索引获取row * @memberof DataTable * @param {array} indices 需要获取rowid的索引值 * @return {array} 获取到的row * @example * datatable.getRowIdsByIndices([1,2,5]) */ const getRowsByIndices = function(indices) { var rows = [] for (var i = 0; i < indices.length; i++) { rows.push(this.getRow(indices[i])) } return rows } export const getDataFunObj = { getData: getData, getDataByRule: getDataByRule, getRow: getRow, getChildRow: getChildRow, getRowByRowId: getRowByRowId, getRowIndex: getRowIndex, getRowsByField: getRowsByField, getRowByField: getRowByField, getAllRows: getAllRows, getAllPageRows: getAllPageRows, getChangedDatas: getChangedDatas, getChangedRows: getChangedRows, getDeleteRows: getDeleteRows, getValue: getValue, getIndexByRowId: getIndexByRowId, getAllDatas: getAllDatas, getRowIdsByIndices: getRowIdsByIndices, getRowsByIndices: getRowsByIndices, getRowsByFields:getRowsByFields }