UNPKG

kero

Version:

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

500 lines (477 loc) 16 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() */ var getData = function getData() { var datas = [], rows = this.rows(); for (var i = 0; i < rows.length; i++) { datas.push(rows[i].getData()); } return datas; }; // 将page转为row对象格式 var page2data = function page2data(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’) */ var getDataByRule = function getDataByRule(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) */ var getRow = function getRow(index) { //return this.rows()[index] //modify by licza. improve performance return this.rows.peek()[index]; }; // 获取子表的数据行 var getChildRow = function getChildRow(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') */ var getRowByRowId = function getRowByRowId(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 */ var getRowIndex = function getRowIndex(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') */ var getRowsByField = function getRowsByField(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'}]) */ var getRowsByFields = function getRowsByFields(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') */ var getRowByField = function getRowByField(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() */ var getAllRows = function getAllRows() { return this.rows.peek(); }; /** * 获取所有页的所有数据行 * @memberof DataTable * @return {array} 获取到的数据行 * @example * datatable.getAllPageRows() */ var getAllPageRows = function getAllPageRows() { 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() */ var getChangedDatas = function getChangedDatas(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() */ var getChangedRows = function getChangedRows() { 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; }; var getDeleteRows = function getDeleteRows() { 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) */ var getValue = function getValue(fieldName, row) { row = row || this.getCurrentRow(); if (row) return row.getValue(fieldName);else return ''; }; /** * 根据行号获取行索引 * @memberof DataTable * @param {String} rowId * @example * datatable.getIndexByRowId('rowid') */ var getIndexByRowId = function getIndexByRowId(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() */ var getAllDatas = function getAllDatas() { 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]) */ var getRowIdsByIndices = function getRowIdsByIndices(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]) */ var getRowsByIndices = function getRowsByIndices(indices) { var rows = []; for (var i = 0; i < indices.length; i++) { rows.push(this.getRow(indices[i])); } return rows; }; export var 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 };