kero
Version:
<img src="http://tinper.org/assets/images/kero.png" width="120" style="max-width:100%;"/>
249 lines (234 loc) • 7.46 kB
JavaScript
/**
* Module : kero dataTable rowSelect
* Author : liuyk(liuyk@yonyou.com)
* Date : 2016-08-01 14:34:01
*/
import { isArray, isNumber } from 'tinper-sparrow/src/util';
import { utilFunObj } from './util';
/**
* 设置所有行选中
* @memberof DataTable
* @example
* datatable.setAllRowsSelect()
*/
var setAllRowsSelect = function setAllRowsSelect() {
var indices = new Array(this.rows().length);
for (var i = 0; i < indices.length; i++) {
indices[i] = i;
}
this.setRowsSelect(indices);
this.allSelected(true);
this.trigger(DataTable.ON_ROW_ALLSELECT, {});
};
/**
* 根据索引设置选中行,清空之前已选中的所有行
* @memberof DataTable
* @param {number} index 需要选中行的索引
* @example
* datatable.setRowSelect(1)
*/
var setRowSelect = function setRowSelect(index) {
if (index instanceof Row) {
index = this.getIndexByRowId(index.rowId);
}
this.setRowsSelect([index]);
this.setRowFocus(this.getSelectedIndex());
};
/**
* 根据索引数组设置选中行,清空之前已选中的所有行
* @memberof DataTable
* @param {array} indices 需要选中行的索引数组
* @example
* datatable.setRowsSelect([1,2])
*/
var setRowsSelect = function setRowsSelect(indices) {
indices = indices || -1;
if (indices == -1) {
this.setAllRowsUnSelect({
quiet: true
});
return;
}
indices = utilFunObj._formatToIndicesArray(this, indices);
var sIns = this.selectedIndices();
if (isArray(indices) && isArray(sIns) && indices.join() == sIns.join()) {
// 避免与控件循环触发
return;
}
if (isArray(indices)) {
var rowNum = this.rows().length;
for (var i = 0; i < indices.length; i++) {
if (indices[i] < 0 || indices[i] >= rowNum) indices.splice(i, 1);
}
}
this.setAllRowsUnSelect({
quiet: true
});
try {
this.selectedIndices(indices);
} catch (e) {}
this.updatePageSelect();
var rowIds = this.getRowIdsByIndices(indices);
this.currentRowChange(-this.currentRowChange());
this.trigger(DataTable.ON_ROW_SELECT, {
indices: indices,
rowIds: rowIds
});
this.updateCurrIndex();
this.setRowFocus(indices[0]);
};
/**
* 根据索引添加选中行,不会清空之前已选中的行
* @memberof DataTable
* @param {number} index 需要选中行的索引
* @example
* datatable.addRowSelect(1)
*/
var addRowSelect = function addRowSelect(index) {
if (index instanceof Row) {
index = this.getIndexByRowId(index.rowId);
}
this.addRowsSelect([index]);
};
/**
* 根据索引数组添加选中行,不会清空之前已选中的行
* @memberof DataTable
* @param {array} indices 需要选中行的索引数组
* @example
* datatabel.addRowsSelect([1,2])
*/
var addRowsSelect = function addRowsSelect(indices) {
indices = utilFunObj._formatToIndicesArray(this, indices);
var selectedIndices = this.selectedIndices().slice();
var needTrigger = false;
for (var i = 0; i < indices.length; i++) {
var ind = indices[i],
toAdd = true;
for (var j = 0; j < selectedIndices.length; j++) {
if (selectedIndices[j] == ind) {
toAdd = false;
}
}
//indices[i]存在并且大于-1
if (toAdd && indices[i] > -1) {
needTrigger = true;
selectedIndices.push(indices[i]);
}
}
this.selectedIndices(selectedIndices);
this.updatePageSelect();
var rowIds = this.getRowIdsByIndices(selectedIndices);
if (needTrigger) {
this.trigger(DataTable.ON_ROW_SELECT, {
indices: selectedIndices,
rowIds: rowIds
});
}
this.updateCurrIndex();
};
/**
* 全部取消选中
* @memberof DataTable
* @param {object} [options] 可选参数
* @param {boolean} [options.quiet] 如果为true则不触发事件,否则触发事件
* @example
* datatable.setAllRowsUnSelect() // 全部取消选中
* datatable.setAllRowsUnSelect({quiet:true}) // 全部取消选中,不触发事件
*/
var setAllRowsUnSelect = function setAllRowsUnSelect(options) {
this.selectedIndices([]);
this.updatePageSelect();
if (!(options && options.quiet)) {
this.trigger(DataTable.ON_ROW_ALLUNSELECT);
}
this.updateCurrIndex();
this.allSelected(false);
};
/**
* 根据索引取消选中
* @memberof DataTable
* @param {number} index 需要取消选中的行索引
* @example
* datatable.setRowUnSelect(1)
*/
var setRowUnSelect = function setRowUnSelect(index) {
if (index instanceof Row) {
index = this.getIndexByRowId(index.rowId);
}
this.setRowsUnSelect([index]);
};
/**
* 根据索引数组取消选中
* @memberof DataTable
* @param {array} indices 需要取消选中的行索引数组
* @example
* datatable.setRowsUnSelect([1,2])
*/
var setRowsUnSelect = function setRowsUnSelect(indices) {
indices = utilFunObj._formatToIndicesArray(this, indices);
var selectedIndices = this.selectedIndices().slice();
// 避免与控件循环触发
if (selectedIndices.indexOf(indices[0]) == -1) return;
for (var i = 0; i < indices.length; i++) {
var index = indices[i];
var pos = selectedIndices.indexOf(index);
if (pos != -1) selectedIndices.splice(pos, 1);
}
this.selectedIndices(selectedIndices);
this.updatePageSelect();
var rowIds = this.getRowIdsByIndices(indices);
this.trigger(DataTable.ON_ROW_UNSELECT, {
indices: indices,
rowIds: rowIds
});
this.updateCurrIndex();
this.allSelected(false);
};
/**
* 当全部选中时取消选中,否则全部选中
* @memberof DataTable
*/
var toggleAllSelect = function toggleAllSelect() {
if (this.allSelected()) {
this.setAllRowsUnSelect();
} else {
this.setAllRowsSelect();
}
};
/***
* 数据行发生改变时更新focusindex
* @memberof DataTable
* @param {number} index 发生改变的数据行位置
* @param {string} type +表示新增行,-表示减少行
* @param {number} num 新增/减少的行数
*/
var updateSelectedIndices = function updateSelectedIndices(index, type, num) {
if (!isNumber(num)) {
num = 1;
}
var selectedIndices = this.selectedIndices().slice();
if (selectedIndices == null || selectedIndices.length == 0) return;
for (var i = 0, count = selectedIndices.length; i < count; i++) {
if (type == '+') {
if (selectedIndices[i] >= index) selectedIndices[i] = parseInt(selectedIndices[i]) + num;
} else if (type == '-') {
if (selectedIndices[i] >= index && selectedIndices[i] <= index + num - 1) {
selectedIndices.splice(i, 1);
} else if (selectedIndices[i] > index + num - 1) selectedIndices[i] = selectedIndices[i] - num;
}
}
this.selectedIndices(selectedIndices);
this.updatePageSelect();
};
export var rowSelectFunObj = {
setAllRowsSelect: setAllRowsSelect,
setRowSelect: setRowSelect,
setRowsSelect: setRowsSelect,
addRowSelect: addRowSelect,
addRowsSelect: addRowsSelect,
setAllRowsUnSelect: setAllRowsUnSelect,
setRowUnSelect: setRowUnSelect,
setRowsUnSelect: setRowsUnSelect,
toggleAllSelect: toggleAllSelect,
updateSelectedIndices: updateSelectedIndices
};