UNPKG

kero

Version:

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

249 lines (234 loc) 7.46 kB
/** * 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 };