kero
Version:
<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>
533 lines (500 loc) • 16.1 kB
JavaScript
/**
* 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
}