UNPKG

7.43 kBJavaScriptView Raw
1/**
2 * Module : kero dataTable rowSelect
3 * Author : liuyk(liuyk@yonyou.com)
4 * Date : 2016-08-01 14:34:01
5 */
6import { isArray, isNumber } from 'tinper-sparrow/src/util';
7import { utilFunObj } from './util';
8
9/**
10 * 设置所有行选中
11 * @memberof DataTable
12 * @example
13 * datatable.setAllRowsSelect()
14 */
15var setAllRowsSelect = function setAllRowsSelect() {
16 var indices = new Array(this.rows().length);
17 for (var i = 0; i < indices.length; i++) {
18 indices[i] = i;
19 }
20 this.setRowsSelect(indices);
21 this.allSelected(true);
22 this.trigger(DataTable.ON_ROW_ALLSELECT, {});
23};
24
25/**
26 * 根据索引设置选中行,清空之前已选中的所有行
27 * @memberof DataTable
28 * @param {number} index 需要选中行的索引
29 * @example
30 * datatable.setRowSelect(1)
31 */
32var setRowSelect = function setRowSelect(index) {
33 if (index instanceof Row) {
34 index = this.getIndexByRowId(index.rowId);
35 }
36 this.setRowsSelect([index]);
37 this.setRowFocus(this.getSelectedIndex());
38};
39
40/**
41 * 根据索引数组设置选中行,清空之前已选中的所有行
42 * @memberof DataTable
43 * @param {array} indices 需要选中行的索引数组
44 * @example
45 * datatable.setRowsSelect([1,2])
46 */
47var setRowsSelect = function setRowsSelect(indices) {
48 indices = indices || -1;
49 if (indices == -1) {
50 this.setAllRowsUnSelect({
51 quiet: true
52 });
53 return;
54 }
55 indices = utilFunObj._formatToIndicesArray(this, indices);
56 var sIns = this.selectedIndices();
57 if (isArray(indices) && isArray(sIns) && indices.join() == sIns.join()) {
58 // 避免与控件循环触发
59 return;
60 }
61
62 if (isArray(indices)) {
63 var rowNum = this.rows().length;
64 for (var i = 0; i < indices.length; i++) {
65 if (indices[i] < 0 || indices[i] >= rowNum) indices.splice(i, 1);
66 }
67 }
68
69 this.setAllRowsUnSelect({
70 quiet: true
71 });
72 try {
73 this.selectedIndices(indices);
74 } catch (e) {}
75 this.updatePageSelect();
76 var rowIds = this.getRowIdsByIndices(indices);
77 this.currentRowChange(-this.currentRowChange());
78 this.trigger(DataTable.ON_ROW_SELECT, {
79 indices: indices,
80 rowIds: rowIds
81 });
82 this.updateCurrIndex();
83};
84
85/**
86 * 根据索引添加选中行,不会清空之前已选中的行
87 * @memberof DataTable
88 * @param {number} index 需要选中行的索引
89 * @example
90 * datatable.addRowSelect(1)
91 */
92var addRowSelect = function addRowSelect(index) {
93 if (index instanceof Row) {
94 index = this.getIndexByRowId(index.rowId);
95 }
96 this.addRowsSelect([index]);
97};
98
99/**
100 * 根据索引数组添加选中行,不会清空之前已选中的行
101 * @memberof DataTable
102 * @param {array} indices 需要选中行的索引数组
103 * @example
104 * datatabel.addRowsSelect([1,2])
105 */
106var addRowsSelect = function addRowsSelect(indices) {
107 indices = utilFunObj._formatToIndicesArray(this, indices);
108 var selectedIndices = this.selectedIndices().slice();
109 var needTrigger = false;
110 for (var i = 0; i < indices.length; i++) {
111 var ind = indices[i],
112 toAdd = true;
113 for (var j = 0; j < selectedIndices.length; j++) {
114 if (selectedIndices[j] == ind) {
115 toAdd = false;
116 }
117 }
118 //indices[i]存在并且大于-1
119 if (toAdd && indices[i] > -1) {
120 needTrigger = true;
121 selectedIndices.push(indices[i]);
122 }
123 }
124 this.selectedIndices(selectedIndices);
125 this.updatePageSelect();
126 var rowIds = this.getRowIdsByIndices(selectedIndices);
127 if (needTrigger) {
128 this.trigger(DataTable.ON_ROW_SELECT, {
129 indices: selectedIndices,
130 rowIds: rowIds
131 });
132 }
133 this.updateCurrIndex();
134};
135
136/**
137 * 全部取消选中
138 * @memberof DataTable
139 * @param {object} [options] 可选参数
140 * @param {boolean} [options.quiet] 如果为true则不触发事件,否则触发事件
141 * @example
142 * datatable.setAllRowsUnSelect() // 全部取消选中
143 * datatable.setAllRowsUnSelect({quiet:true}) // 全部取消选中,不触发事件
144 */
145var setAllRowsUnSelect = function setAllRowsUnSelect(options) {
146 this.selectedIndices([]);
147 this.updatePageSelect();
148 if (!(options && options.quiet)) {
149 this.trigger(DataTable.ON_ROW_ALLUNSELECT);
150 }
151 this.updateCurrIndex();
152 this.allSelected(false);
153};
154
155/**
156 * 根据索引取消选中
157 * @memberof DataTable
158 * @param {number} index 需要取消选中的行索引
159 * @example
160 * datatable.setRowUnSelect(1)
161 */
162var setRowUnSelect = function setRowUnSelect(index) {
163 if (index instanceof Row) {
164 index = this.getIndexByRowId(index.rowId);
165 }
166 this.setRowsUnSelect([index]);
167};
168
169/**
170 * 根据索引数组取消选中
171 * @memberof DataTable
172 * @param {array} indices 需要取消选中的行索引数组
173 * @example
174 * datatable.setRowsUnSelect([1,2])
175 */
176var setRowsUnSelect = function setRowsUnSelect(indices) {
177 indices = utilFunObj._formatToIndicesArray(this, indices);
178 var selectedIndices = this.selectedIndices().slice();
179
180 // 避免与控件循环触发
181 if (selectedIndices.indexOf(indices[0]) == -1) return;
182
183 for (var i = 0; i < indices.length; i++) {
184 var index = indices[i];
185 var pos = selectedIndices.indexOf(index);
186 if (pos != -1) selectedIndices.splice(pos, 1);
187 }
188 this.selectedIndices(selectedIndices);
189 this.updatePageSelect();
190 var rowIds = this.getRowIdsByIndices(indices);
191 this.trigger(DataTable.ON_ROW_UNSELECT, {
192 indices: indices,
193 rowIds: rowIds
194 });
195 this.updateCurrIndex();
196 this.allSelected(false);
197};
198
199/**
200 * 当全部选中时取消选中,否则全部选中
201 * @memberof DataTable
202 */
203var toggleAllSelect = function toggleAllSelect() {
204 if (this.allSelected()) {
205 this.setAllRowsUnSelect();
206 } else {
207 this.setAllRowsSelect();
208 }
209};
210
211/***
212 * 数据行发生改变时更新focusindex
213 * @memberof DataTable
214 * @param {number} index 发生改变的数据行位置
215 * @param {string} type +表示新增行,-表示减少行
216 * @param {number} num 新增/减少的行数
217 */
218var updateSelectedIndices = function updateSelectedIndices(index, type, num) {
219 if (!isNumber(num)) {
220 num = 1;
221 }
222 var selectedIndices = this.selectedIndices().slice();
223 if (selectedIndices == null || selectedIndices.length == 0) return;
224 for (var i = 0, count = selectedIndices.length; i < count; i++) {
225 if (type == '+') {
226 if (selectedIndices[i] >= index) selectedIndices[i] = parseInt(selectedIndices[i]) + num;
227 } else if (type == '-') {
228 if (selectedIndices[i] >= index && selectedIndices[i] <= index + num - 1) {
229 selectedIndices.splice(i, 1);
230 } else if (selectedIndices[i] > index + num - 1) selectedIndices[i] = selectedIndices[i] - num;
231 }
232 }
233 this.selectedIndices(selectedIndices);
234 this.updatePageSelect();
235};
236export var rowSelectFunObj = {
237 setAllRowsSelect: setAllRowsSelect,
238 setRowSelect: setRowSelect,
239 setRowsSelect: setRowsSelect,
240 addRowSelect: addRowSelect,
241 addRowsSelect: addRowsSelect,
242 setAllRowsUnSelect: setAllRowsUnSelect,
243 setRowUnSelect: setRowUnSelect,
244 setRowsUnSelect: setRowsUnSelect,
245 toggleAllSelect: toggleAllSelect,
246 updateSelectedIndices: updateSelectedIndices
247};
\No newline at end of file