crabatool 1.0.13 → 1.0.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.vscode/launch.json +17 -0
- package/{test/config.js → 8/craba.js} +41 -29
- package/8/package.json +17 -0
- package/8/readme.md +20 -0
- package/8/www/_Sys/UI/Grid/GridConfig.gspx +27 -0
- package/8/www/_Sys/UI/Grid/GridConfig.js +652 -0
- package/8/www/_Sys/UI/IFrame.gspx +7 -0
- package/8/www/_Sys/UI/IFrame.js +57 -0
- package/8/www/_Sys/UI/PanelConfig.gspx +55 -0
- package/8/www/_Sys/UI/PanelConfig.js +268 -0
- package/8/www/_Sys/UI/Print/ClientSelector.gspx +39 -0
- package/8/www/_Sys/UI/Print/ClientSelector.js +152 -0
- package/8/www/js/agency.js +2 -0
- package/8/www/js/craba.min.js +12 -0
- package/8/www/js/crabaEx.min.js +7 -0
- package/8/www/js/crabaNgp.js +1 -0
- package/8/www/js/echarts-all.js +1 -0
- package/8/www/js/math.min.js +10 -0
- package/8/www/skins/craba.min.css +174 -0
- package/8/www/skins/font/iconfont.eot +0 -0
- package/8/www/skins/font/iconfont.svg +1281 -0
- package/8/www/skins/font/iconfont.ttf +0 -0
- package/8/www/skins/font/iconfont.woff +0 -0
- package/8/www/skins/ui/icons/backTop.gif +0 -0
- package/8/www/skins/ui/icons/blank.gif +0 -0
- package/8/www/skins/ui/icons/browsers.jpg +0 -0
- package/8/www/skins/ui/icons/grid.png +0 -0
- package/8/www/skins/ui/icons/nodata.png +0 -0
- package/8/www/skins/ui/print/new.png +0 -0
- package/8/www/skins/ui/print/old.png +0 -0
- package/8/www/skins/ui/print/settings.gif +0 -0
- package/8/www/skins/ui/tree/first.gif +0 -0
- package/8/www/skins/ui/tree/firstNo.gif +0 -0
- package/8/www/skins/ui/tree/last.gif +0 -0
- package/8/www/skins/ui/tree/line.gif +0 -0
- package/8/www/skins/ui/tree/node.gif +0 -0
- package/8/www/skins/ui/tree/node0.gif +0 -0
- package/8/www/skins/ui/tree/none.gif +0 -0
- package/index.js +71 -28
- package/lib/config.js +19 -2
- package/lib/server.js +12 -10
- package/lib/utils.js +99 -21
- package/package.json +5 -3
- package/test/ngp.js +38 -3
- package/test/readme.md +10 -10
- package/test/test.js +38 -0
- package/tool/checkjs.js +93 -0
- package/{client → tool}/client.js +2 -2
- package/{merge → tool}/merge.js +11 -11
- package/{lib → tool}/ngptool.js +26 -26
- package/tool/progressbar.js +10 -6
- package/{lib → tool}/sockettool.js +9 -10
- package/tool/upgrade.js +121 -39
|
@@ -0,0 +1,652 @@
|
|
|
1
|
+
Type.registerNamespace('Craba.Web.UI.Grid');
|
|
2
|
+
|
|
3
|
+
Craba.Web.UI.Grid.GridConfigAction = function() {
|
|
4
|
+
Craba.Web.UI.Grid.GridConfigAction.initializeBase(this);
|
|
5
|
+
this._notAllowConfigCount = 0;
|
|
6
|
+
this._isToMove = false;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
Craba.Web.UI.Grid.GridConfigAction.prototype = {
|
|
10
|
+
initialize: function() {
|
|
11
|
+
Craba.Web.UI.Grid.GridConfigAction.callBaseMethod(this, 'initialize');
|
|
12
|
+
var gd = this.get_grid();
|
|
13
|
+
this._allowFrozen = gd.get_allowFrozen() && gd.get_showHeader();
|
|
14
|
+
this._frozenColumnCount = gd.get_frozenColumnCount();
|
|
15
|
+
this._maxLevel = gd.get_maxHeaderLevel();
|
|
16
|
+
|
|
17
|
+
if (!gd) throw Error.argumentNull("_grid");
|
|
18
|
+
|
|
19
|
+
this._lockUrl = 'aicon-07';
|
|
20
|
+
|
|
21
|
+
this._refresh();
|
|
22
|
+
this._modified = false;
|
|
23
|
+
this._frozenModified = false;
|
|
24
|
+
|
|
25
|
+
var form = this.get_form();
|
|
26
|
+
var grid = form.grid;
|
|
27
|
+
var count = grid.get_recordCount();
|
|
28
|
+
if (count > 10) {
|
|
29
|
+
grid.set_allowFilter(true); // 没有pager的情况下起定位作用
|
|
30
|
+
grid.findColumn("designCaption").get_filterControl().set_nullDisplayText("查找定位列");
|
|
31
|
+
} else if (count == 0) {
|
|
32
|
+
$common.showTips(Sys.Res.noColumnConfig);
|
|
33
|
+
form.close();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
form.btnFrozen.set_visible(this._allowFrozen);
|
|
37
|
+
grid.findColumn("lockUrl").set_visible(this._allowFrozen);
|
|
38
|
+
|
|
39
|
+
if (this._maxLevel > 1) {
|
|
40
|
+
grid.set_allowDrag(false); // 多表头不支持拖动
|
|
41
|
+
grid.set_allowMultiSelectedRow(false); // 多表头不支持多选拖动
|
|
42
|
+
grid.set_allowDrop(false);
|
|
43
|
+
grid.set_allowCopy(true);
|
|
44
|
+
|
|
45
|
+
form.btnDrag.set_visible(false);
|
|
46
|
+
form.set_caption(Sys.Res.noColumnDrag);
|
|
47
|
+
form.btnTop.set_visible(false);
|
|
48
|
+
form.btnDown.set_visible(false);
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
dispose: function() {
|
|
53
|
+
var grid = this.get_grid();
|
|
54
|
+
if (this._allowFrozen) { // 是否开启了冻结功能
|
|
55
|
+
if (this._frozenModified) {
|
|
56
|
+
grid.setFrozenColumnCount(this._frozenColumnCount); // 关闭的时候去改变列锁定功能,同时将数据保存到配置文件中
|
|
57
|
+
} else if (this._frozenColumnCount > 0) {
|
|
58
|
+
grid._setFrozenVisible(true); // 由于打开列配置界面的时候将原有锁定列隐藏了,关闭窗体时需要还原
|
|
59
|
+
grid._internalFrozenRowsHeight();
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (this._modified) {
|
|
63
|
+
grid._internalSaveConfig(); // 将配置信息保存到服务器
|
|
64
|
+
}
|
|
65
|
+
delete this._columnList;
|
|
66
|
+
Craba.Web.UI.Grid.GridConfigAction.callBaseMethod(this, 'dispose');
|
|
67
|
+
},
|
|
68
|
+
get_grid: function() {
|
|
69
|
+
return this.get_form()._grid;
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
_setModified: function() {
|
|
73
|
+
this._modified = true;
|
|
74
|
+
},
|
|
75
|
+
|
|
76
|
+
_refresh: function() {
|
|
77
|
+
delete this._columnList;
|
|
78
|
+
|
|
79
|
+
var grid = this.get_grid();
|
|
80
|
+
var hideNotAllowConfigColumns = this.get_form()._hideNotAllowConfigColumns;
|
|
81
|
+
var count = grid.get_columnCount();
|
|
82
|
+
|
|
83
|
+
this._maxFrozenIndex = 0;
|
|
84
|
+
var columnList = this._columnList = [];
|
|
85
|
+
for (var i = 0, n = 0; i < count; i++) {
|
|
86
|
+
var column = grid.getColumnByIndex(i);
|
|
87
|
+
var visible = column.get_visible();
|
|
88
|
+
var allowConfig = column.get_allowConfig();
|
|
89
|
+
var isExpand = column._isExpand; // 扩展列不允许配置,不然会有很难处理的bug
|
|
90
|
+
|
|
91
|
+
if (hideNotAllowConfigColumns && !allowConfig) {
|
|
92
|
+
this._notAllowConfigCount++;
|
|
93
|
+
continue;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
var lockUrl = "";
|
|
97
|
+
var frozenIndex = column.get_frozenIndex();
|
|
98
|
+
this._maxFrozenIndex = Math.max(frozenIndex, this._maxFrozenIndex);
|
|
99
|
+
if (frozenIndex < this._frozenColumnCount) {
|
|
100
|
+
lockUrl = this._lockUrl;
|
|
101
|
+
}
|
|
102
|
+
//if (lockUrl != "" && !visible) continue; // 隐藏的冻结列不支持配置
|
|
103
|
+
|
|
104
|
+
var _bandCaption = "";
|
|
105
|
+
if (column.get_band()) {
|
|
106
|
+
_bandCaption = column.get_band().caption;
|
|
107
|
+
if (_bandCaption != "") _bandCaption += "-";
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
var record = {};
|
|
111
|
+
record.allowFrozen = column.get_allowFrozen();
|
|
112
|
+
record.allowConfig = allowConfig;
|
|
113
|
+
record.name = column.get_name();
|
|
114
|
+
record.oldCaption = column.get_designCaption();
|
|
115
|
+
record.designCaption = _bandCaption + column.get_designCaption() || '(空)';
|
|
116
|
+
record.caption = column.get_caption();
|
|
117
|
+
record.visible = visible;
|
|
118
|
+
record.bandIndex = column.get_bandIndex();
|
|
119
|
+
record.isExpand = isExpand;
|
|
120
|
+
record.lockUrl = lockUrl;
|
|
121
|
+
record.frozenIndex = frozenIndex;
|
|
122
|
+
record.columnIndex = i;
|
|
123
|
+
columnList[n++] = record;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
var configGrid = this.get_form().grid;
|
|
127
|
+
configGrid.refresh(columnList);
|
|
128
|
+
|
|
129
|
+
for (var i = 0, count = columnList.length; i < count; i++) {
|
|
130
|
+
var record = columnList[i];
|
|
131
|
+
var hint = record.allowConfig ? "" : $craba.getLangPro("本列不允许配置");
|
|
132
|
+
configGrid.setRowHint(i, hint);
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
|
|
136
|
+
doToggleVisible: function(sender) {
|
|
137
|
+
var columnList = this._columnList;
|
|
138
|
+
var configGrid = sender.get_form().grid;
|
|
139
|
+
var sData = configGrid.get_selectedRowData();
|
|
140
|
+
if (!sData.allowConfig) return;
|
|
141
|
+
|
|
142
|
+
this._setModifyForzen(sData);
|
|
143
|
+
var visible = !sData.visible;
|
|
144
|
+
if (!visible) {
|
|
145
|
+
var visibleCount = 0;
|
|
146
|
+
var columns = this.get_grid().get_columns();
|
|
147
|
+
for (var i = 0, count = columns.length; i < count; i++) {
|
|
148
|
+
var c = columns[i];
|
|
149
|
+
if (c.get_visible() && c.get_allowConfig()) { // 不允许配置的列不参与计数
|
|
150
|
+
visibleCount++;
|
|
151
|
+
}
|
|
152
|
+
if (visibleCount > 2) break;
|
|
153
|
+
}
|
|
154
|
+
if (visibleCount <= 2) {
|
|
155
|
+
$common.showTips($craba.getLangPro("不允许隐藏")); // 有时候(部分AllowConfig=false)提示至少显示2列容易误导用户
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
var bandIndex = sData.bandIndex;
|
|
160
|
+
var bandVisibleCount = 0;
|
|
161
|
+
for (var i = 0, count = columnList.length; i < count; i++) {
|
|
162
|
+
var columnData = columnList[i];
|
|
163
|
+
if (bandIndex === -1 || columnData.bandIndex == bandIndex && columnData.visible) {
|
|
164
|
+
bandVisibleCount++;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (bandVisibleCount <= 1) {
|
|
168
|
+
$common.showTips(Sys.Res.mustColumn);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
sData.visible = visible; // 做修改
|
|
173
|
+
configGrid.modifySelectedRowData(sData);
|
|
174
|
+
|
|
175
|
+
var grid = this.get_grid();
|
|
176
|
+
grid._setFrozenVisible(true);
|
|
177
|
+
grid.getColumn(sData.name).set_visible(visible, true);
|
|
178
|
+
grid._setFrozenVisible(false);
|
|
179
|
+
this.doSelectionChanged(configGrid);
|
|
180
|
+
this._setModified();
|
|
181
|
+
},
|
|
182
|
+
|
|
183
|
+
doModifyCaption: function(sender) {
|
|
184
|
+
var configGrid = sender.get_form().grid;
|
|
185
|
+
var sData = configGrid.get_selectedRowData();
|
|
186
|
+
if (!sData.allowConfig) return;
|
|
187
|
+
|
|
188
|
+
var tips = Sys.Res.inputColumnCaption;
|
|
189
|
+
if (sData.caption != sData.oldCaption) tips = $craba.getLangPros('原标题', '【' + sData.oldCaption + '】,', tips);
|
|
190
|
+
$msg.prompt(tips, {
|
|
191
|
+
title: $craba.getLangPro('修改列标题'),
|
|
192
|
+
value: sData.caption,
|
|
193
|
+
iconVisible: false,
|
|
194
|
+
maxLength: 10,
|
|
195
|
+
handler: this._doSaveCaption
|
|
196
|
+
}, this);
|
|
197
|
+
},
|
|
198
|
+
|
|
199
|
+
_doSaveCaption: function(result) {
|
|
200
|
+
if (result == null) return;
|
|
201
|
+
if (result == '') {
|
|
202
|
+
$common.showInfo($craba.getLangPro('值不能为空'));
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
var configGrid = this.get_form().grid;
|
|
207
|
+
var sData = configGrid.get_selectedRowData();
|
|
208
|
+
var caption = sData.caption;
|
|
209
|
+
var caption2 = result;
|
|
210
|
+
if (caption != caption2 && caption2 != '') {
|
|
211
|
+
sData.caption = caption2;
|
|
212
|
+
configGrid.modifySelectedRowData(sData);
|
|
213
|
+
this.get_grid().getColumn(sData.name).set_caption(caption2, true);
|
|
214
|
+
this._setModified();
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
|
|
218
|
+
doCellRendering: function(sender, eventArgs) {
|
|
219
|
+
var record = sender.getRowData(eventArgs.get_rowIndex());
|
|
220
|
+
if (this._frozenColumnCount > 0 && record.frozenIndex < this._frozenColumnCount) {
|
|
221
|
+
record.lockUrl = this._lockUrl;
|
|
222
|
+
} else {
|
|
223
|
+
record.lockUrl = "";
|
|
224
|
+
}
|
|
225
|
+
if (!record.allowConfig) {
|
|
226
|
+
eventArgs.set_fontColor("#ACA899");
|
|
227
|
+
eventArgs.set_bgColor($skin.getDisabledBackgroundColor());
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
var bandIndex = record.bandIndex;
|
|
231
|
+
if (bandIndex >= 0) {
|
|
232
|
+
if (!this._rowColors) {
|
|
233
|
+
this._rowColors = ["#EFFFE5", "#FFF6E5", "#FFF4FB", "#F0FFFB", "#FDFFF7"];
|
|
234
|
+
}
|
|
235
|
+
eventArgs.set_bgColor(this._rowColors[bandIndex % 5]);
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
|
|
239
|
+
doSelectionChanged: function(sender) {
|
|
240
|
+
var form = sender.get_form();
|
|
241
|
+
var configGrid = form.grid;
|
|
242
|
+
if (configGrid.get_recordCount() < 1) return;
|
|
243
|
+
|
|
244
|
+
var sData = configGrid.get_selectedRowData();
|
|
245
|
+
if (!sData) {
|
|
246
|
+
form.btnMoveUp.set_enabled(false);
|
|
247
|
+
form.btnTop.set_enabled(false);
|
|
248
|
+
form.btnMoveDown.set_enabled(false);
|
|
249
|
+
form.btnDown.set_enabled(false);
|
|
250
|
+
form.btnVisible.set_enabled(false);
|
|
251
|
+
form.btnFrozen.set_enabled(false);
|
|
252
|
+
form.btnCaption.set_enabled(false);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
var allowConfig = sData.allowConfig;
|
|
256
|
+
var allowFrozen = sData.allowFrozen;
|
|
257
|
+
var isExpand = sData.isExpand;
|
|
258
|
+
form.btnCaption.set_enabled(allowConfig);
|
|
259
|
+
|
|
260
|
+
var rowIndex = configGrid.get_selectedRowIndex();
|
|
261
|
+
var curr = sender.getRowData(rowIndex);
|
|
262
|
+
|
|
263
|
+
var canMoveUp = rowIndex > 0;
|
|
264
|
+
if (canMoveUp) {
|
|
265
|
+
var prev = sender.getRowData(rowIndex - 1);
|
|
266
|
+
var frozen = prev.frozenIndex == this._frozenColumnCount - 1 && (prev && prev.frozenIndex == curr.forzenIndex);
|
|
267
|
+
canMoveUp = curr.bandIndex == prev.bandIndex && !frozen;
|
|
268
|
+
}
|
|
269
|
+
form.btnMoveUp.set_enabled(canMoveUp && !isExpand);
|
|
270
|
+
form.btnTop.set_enabled(canMoveUp && !isExpand);
|
|
271
|
+
|
|
272
|
+
var canMoveDown = rowIndex < configGrid.get_recordCount() - 1;
|
|
273
|
+
if (canMoveDown) {
|
|
274
|
+
var next = sender.getRowData(rowIndex + 1);
|
|
275
|
+
var frozen = curr.frozenIndex == this._frozenColumnCount - 1 && (prev && prev.frozenIndex == curr.forzenIndex);
|
|
276
|
+
canMoveDown = curr.bandIndex == next.bandIndex && !frozen;
|
|
277
|
+
}
|
|
278
|
+
form.btnMoveDown.set_enabled(canMoveDown && !isExpand);
|
|
279
|
+
form.btnDown.set_enabled(canMoveDown && !isExpand);
|
|
280
|
+
|
|
281
|
+
var recordCount = configGrid.get_recordCount() - 1;
|
|
282
|
+
var isFrozen = curr.frozenIndex < this._frozenColumnCount;
|
|
283
|
+
var canFrozen = false;
|
|
284
|
+
if (this._maxLevel == 1) {
|
|
285
|
+
canFrozen = (rowIndex < recordCount || this._frozenColumnCount < curr.frozenIndex);
|
|
286
|
+
} else {
|
|
287
|
+
canFrozen = (rowIndex < recordCount && curr.frozenIndex < this._maxFrozenIndex);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
form.btnVisible.set_enabled(allowConfig);
|
|
291
|
+
form.btnFrozen.set_enabled(canFrozen && this._allowFrozen && allowFrozen);
|
|
292
|
+
form.btnFrozen.set_text($craba.getLangPro(isFrozen ? "解锁" : "锁定"));
|
|
293
|
+
},
|
|
294
|
+
|
|
295
|
+
doMoveUp: function(sender) {
|
|
296
|
+
this._doMove(sender, -1);
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
doMoveDown: function(sender) {
|
|
300
|
+
this._doMove(sender, 1);
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
doTop: function(sender) {
|
|
304
|
+
var grid = this.get_form().grid;
|
|
305
|
+
var dragDatas = grid.createDragDatas();
|
|
306
|
+
if (dragDatas.length <= 1) {
|
|
307
|
+
var rowData = grid.get_selectedRowData();
|
|
308
|
+
if (!rowData) return;
|
|
309
|
+
dragDatas = [rowData];
|
|
310
|
+
}
|
|
311
|
+
this._isToMove = false;
|
|
312
|
+
this._toMove(0, dragDatas);
|
|
313
|
+
},
|
|
314
|
+
doDown: function(sender) {
|
|
315
|
+
var grid = this.get_form().grid;
|
|
316
|
+
var dragDatas = grid.createDragDatas();
|
|
317
|
+
if (dragDatas.length <= 1) {
|
|
318
|
+
var rowData = grid.get_selectedRowData();
|
|
319
|
+
if (!rowData) return;
|
|
320
|
+
dragDatas = [rowData];
|
|
321
|
+
}
|
|
322
|
+
this._isToMove = false;
|
|
323
|
+
this._toMove(grid.get_recordCount(), dragDatas);
|
|
324
|
+
},
|
|
325
|
+
|
|
326
|
+
_doMove: function(sender, inc, lockUrl) {
|
|
327
|
+
var configGrid = sender.get_form().grid;
|
|
328
|
+
var rowIndex1 = configGrid.get_selectedRowIndex();
|
|
329
|
+
var rowIndex2 = rowIndex1 + inc;
|
|
330
|
+
if (rowIndex2 < 0 || rowIndex2 >= configGrid.get_recordCount()) return;
|
|
331
|
+
|
|
332
|
+
var data1 = configGrid.getRowData(rowIndex1);
|
|
333
|
+
var data2 = configGrid.getRowData(rowIndex2);
|
|
334
|
+
|
|
335
|
+
var lockUrl1 = data1.lockUrl;
|
|
336
|
+
var lockUrl2 = (typeof (lockUrl) != "undefined") ? lockUrl : data2.lockUrl;
|
|
337
|
+
data1.lockUrl = lockUrl2;
|
|
338
|
+
data2.lockUrl = lockUrl1;
|
|
339
|
+
|
|
340
|
+
//如果移动的是锁定列,则标记下来
|
|
341
|
+
this._frozenModified = (this._frozenModified || data1.lockUrl == this._lockUrl || data2.lockUrl == this._lockUrl);
|
|
342
|
+
|
|
343
|
+
var frozenIndex1 = data1.frozenIndex;
|
|
344
|
+
data1.frozenIndex = data2.frozenIndex;
|
|
345
|
+
data2.frozenIndex = frozenIndex1;
|
|
346
|
+
|
|
347
|
+
configGrid.modifyRowData(rowIndex1, data2);
|
|
348
|
+
configGrid.modifyRowData(rowIndex2, data1);
|
|
349
|
+
configGrid.set_selectedRowIndex(rowIndex2);
|
|
350
|
+
|
|
351
|
+
var hint1 = data2.allowConfig ? "" : Sys.Res.noConfig;
|
|
352
|
+
configGrid.setRowHint(rowIndex1, hint1);
|
|
353
|
+
|
|
354
|
+
var hint2 = data1.allowConfig ? "" : Sys.Res.noConfig;
|
|
355
|
+
configGrid.setRowHint(rowIndex2, hint2);
|
|
356
|
+
|
|
357
|
+
var grid = this.get_grid();
|
|
358
|
+
var column1 = grid.getColumn(data1.name);
|
|
359
|
+
var column2 = grid.getColumn(data2.name);
|
|
360
|
+
grid.clearSortFlag(); //列配置时,清除grid的排序标记,如果一直带着标记,会导致js错误 2015-02-12 ljb
|
|
361
|
+
grid._internalSwapColumn(column1, column2);
|
|
362
|
+
this._setModified();
|
|
363
|
+
},
|
|
364
|
+
|
|
365
|
+
doFrozen: function(sender) {
|
|
366
|
+
var configGrid = sender.get_form().grid;
|
|
367
|
+
var grid = this.get_grid();
|
|
368
|
+
var rowIndex = configGrid.get_selectedRowIndex();
|
|
369
|
+
var data = configGrid.getRowData(rowIndex);
|
|
370
|
+
var isFrozen = data.frozenIndex < this._frozenColumnCount; //当前行锁定状态
|
|
371
|
+
|
|
372
|
+
//配置窗体关闭的时候列锁定更改才生效,避免频繁的操作
|
|
373
|
+
this._setModified();
|
|
374
|
+
this._frozenModified = true;
|
|
375
|
+
|
|
376
|
+
if (this._maxLevel == 1) { //目前,锁定列只支持单表头调整列序;多表头没做列序改变,但支持锁定
|
|
377
|
+
var column1 = grid.getColumn(data.name);
|
|
378
|
+
var lastIndex = this._getLastFrozenIndex();
|
|
379
|
+
|
|
380
|
+
if (rowIndex < lastIndex) {
|
|
381
|
+
this._doMove(sender, lastIndex - rowIndex, "");
|
|
382
|
+
lastIndex = this._getLastFrozenIndex();
|
|
383
|
+
data = configGrid.getRowData(lastIndex - 1);
|
|
384
|
+
this._frozenColumnCount = data.frozenIndex + 1;
|
|
385
|
+
} else if (rowIndex > lastIndex + 1) {
|
|
386
|
+
this._doMove(sender, lastIndex - rowIndex + 1, this._lockUrl);
|
|
387
|
+
this._frozenColumnCount = data.frozenIndex + 1;
|
|
388
|
+
} else {
|
|
389
|
+
var c = 0;
|
|
390
|
+
if (isFrozen) {
|
|
391
|
+
if (rowIndex > 0) {
|
|
392
|
+
prevData = configGrid.getRowData(rowIndex - 1);
|
|
393
|
+
c = prevData.frozenIndex + 1;
|
|
394
|
+
} else {
|
|
395
|
+
c = 0;
|
|
396
|
+
}
|
|
397
|
+
} else {
|
|
398
|
+
c = data.frozenIndex + 1;
|
|
399
|
+
}
|
|
400
|
+
this._frozenColumnCount = c;
|
|
401
|
+
|
|
402
|
+
if (isFrozen) {
|
|
403
|
+
data.lockUrl = "";
|
|
404
|
+
} else {
|
|
405
|
+
data.lockUrl = this._lockUrl;
|
|
406
|
+
}
|
|
407
|
+
configGrid.modifyRowData(rowIndex, data);
|
|
408
|
+
}
|
|
409
|
+
this.doSelectionChanged(configGrid);
|
|
410
|
+
} else {
|
|
411
|
+
this._frozenColumnCount = isFrozen ? data.frozenIndex : data.frozenIndex + 1;
|
|
412
|
+
configGrid.refresh();
|
|
413
|
+
configGrid.set_selectedRowIndex(rowIndex);
|
|
414
|
+
}
|
|
415
|
+
},
|
|
416
|
+
|
|
417
|
+
_getLastFrozenIndex: function() {
|
|
418
|
+
var configGrid = this.get_form().grid;
|
|
419
|
+
var data = configGrid.get_dataSource();
|
|
420
|
+
var lastIndex = -1;
|
|
421
|
+
for (var i = 0; i < data.length; i++) {
|
|
422
|
+
var row = configGrid.getRowData(i);
|
|
423
|
+
if (row.lockUrl == "") break;
|
|
424
|
+
lastIndex++;
|
|
425
|
+
}
|
|
426
|
+
return lastIndex;
|
|
427
|
+
},
|
|
428
|
+
|
|
429
|
+
doReset: function(sender) {
|
|
430
|
+
Sys.UI.MessageBox.confirm(Sys.Res.resetConfig, Function.createDelegate(this, this._doReset));
|
|
431
|
+
},
|
|
432
|
+
|
|
433
|
+
_doReset: function(result) {
|
|
434
|
+
if (!result) return;
|
|
435
|
+
var grid = this.get_grid();
|
|
436
|
+
this._frozenColumnCount = grid.get_allowFrozen() ? grid._defaultFrozenColumnCount : 0; //恢复默认锁定列数
|
|
437
|
+
grid._setFrozenVisible(true);
|
|
438
|
+
grid._internalResetConfig();
|
|
439
|
+
grid._setFrozenVisible(false);
|
|
440
|
+
grid.updateColumnsIcon();
|
|
441
|
+
this._refresh();
|
|
442
|
+
this._setModified();
|
|
443
|
+
this._frozenModified = true;
|
|
444
|
+
|
|
445
|
+
grid._rowsTable.style.width = "0px"; //处理Grid在IE中先调节列宽度,然后通过列配置隐藏后再还原列配置时,出现列错位的问题。 2015-05-20 by ljb
|
|
446
|
+
if (!Sys.Browser.isIE || Sys.Browser.version > 8) return;
|
|
447
|
+
|
|
448
|
+
window.asyncCall(function() {
|
|
449
|
+
if (grid.get_readOnly()) {
|
|
450
|
+
grid.refresh(grid.get_dataSource()); //只读情况,直接读取数据集,报表
|
|
451
|
+
} else {
|
|
452
|
+
//处理IE8及以下版本,在同一个Grid上,切换A,B两种列排版时,B排版设置了某个A中没有列的冻结列,然后切换到A中还原配置导致空缺列的问题。
|
|
453
|
+
grid.refresh(grid.saveData(true)); //异步数据刷新.调整为saveData,在单据中用get_DataSource将导致数据被清空
|
|
454
|
+
}
|
|
455
|
+
});
|
|
456
|
+
},
|
|
457
|
+
|
|
458
|
+
doDrop: function(sender, args) {
|
|
459
|
+
var grid = this.get_form().grid;
|
|
460
|
+
var dragDatas = grid._dragDatas;
|
|
461
|
+
var sIndex = grid.get_selectedRowIndex();
|
|
462
|
+
args.set_cancel(true); // 自行处理拖动逻辑
|
|
463
|
+
this._isToMove = true
|
|
464
|
+
this._toMove(sIndex, dragDatas);
|
|
465
|
+
window.setTimeout(function() {
|
|
466
|
+
grid.set_selectedRowIndex(sIndex);
|
|
467
|
+
}, 1);
|
|
468
|
+
},
|
|
469
|
+
|
|
470
|
+
_toMove: function (sIndex, dragDatas) {
|
|
471
|
+
var grid = this.get_form().grid;
|
|
472
|
+
var selectData = grid.findRowData(sIndex);
|
|
473
|
+
var name = selectData ? selectData.name : null;
|
|
474
|
+
this._setModifyForzen(selectData);
|
|
475
|
+
var columnNames = [];
|
|
476
|
+
for (var i = 0, count = dragDatas.length; i < count; i++) {
|
|
477
|
+
var data = dragDatas[i];
|
|
478
|
+
columnNames.push(data.name);
|
|
479
|
+
this._setModifyForzen(data);
|
|
480
|
+
}
|
|
481
|
+
this.moveColumns(name, columnNames);
|
|
482
|
+
this._refresh(); // 调整完之后,刷新列配置表格
|
|
483
|
+
},
|
|
484
|
+
|
|
485
|
+
_setModifyForzen: function(data) {
|
|
486
|
+
if (!this._frozenModified && data) { //如果移动锁定列,则标记下来
|
|
487
|
+
this._frozenModified = data.lockUrl == this._lockUrl;
|
|
488
|
+
}
|
|
489
|
+
},
|
|
490
|
+
|
|
491
|
+
/* 批量移动现有列,比如列配置拖动多列,插入到新的位置 */
|
|
492
|
+
moveColumns: function (columnName, columnNames) {
|
|
493
|
+
var grid = this.get_grid();
|
|
494
|
+
var configGrid = this.get_form().grid
|
|
495
|
+
var insertColumn = grid.findColumn(columnName);
|
|
496
|
+
var start, end, destIndex;
|
|
497
|
+
var lastColumn;
|
|
498
|
+
// debugger
|
|
499
|
+
if (insertColumn) {
|
|
500
|
+
start = insertColumn.get_index();
|
|
501
|
+
end = insertColumn.get_index();
|
|
502
|
+
destIndex = insertColumn.get_index();
|
|
503
|
+
} else {
|
|
504
|
+
// 置底功能
|
|
505
|
+
var cls = grid.get_columns();
|
|
506
|
+
lastColumn = cls[cls.length - 1];
|
|
507
|
+
start = lastColumn.get_index();
|
|
508
|
+
end = lastColumn.get_index();
|
|
509
|
+
destIndex = lastColumn.get_index();
|
|
510
|
+
}
|
|
511
|
+
|
|
512
|
+
// 计算出影响的列区间
|
|
513
|
+
var newColumns = [];
|
|
514
|
+
for (var i = 0, count = columnNames.length; i < count; i++) {
|
|
515
|
+
var name = columnNames[i];
|
|
516
|
+
var column = grid.findColumn(name);
|
|
517
|
+
newColumns.push(column);
|
|
518
|
+
|
|
519
|
+
start = Math.min(start, column.get_index());
|
|
520
|
+
end = Math.max(end, column.get_index());
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
// 记录历史column
|
|
524
|
+
var oldColumns = [];
|
|
525
|
+
var insertIndex = 0;
|
|
526
|
+
for (var i = start; i <= end; i++) {
|
|
527
|
+
var column = grid.getColumnByIndex(i);
|
|
528
|
+
if (!Array.contains(newColumns, column)) {
|
|
529
|
+
if (column.get_index() < destIndex) {
|
|
530
|
+
Array.insert(newColumns, insertIndex, column);
|
|
531
|
+
insertIndex++;
|
|
532
|
+
} else {
|
|
533
|
+
newColumns.push(column);
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
oldColumns.push(column);
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
// 倒数第二行和倒数第一行交换位置 多行交换
|
|
540
|
+
var configGridEl = configGrid.get_element();
|
|
541
|
+
var len = configGrid.get_dataSource().length - 1;
|
|
542
|
+
if (this._isToMove && findLastRow(configGridEl, len)) { //判断拖动的div是否在最后一行后面
|
|
543
|
+
var insertRowIndex = insertColumn.get_index();
|
|
544
|
+
console.log(insertRowIndex,len);
|
|
545
|
+
if (insertRowIndex === len + 1) {
|
|
546
|
+
for (var i = 0; i < columnNames.length; i++) {
|
|
547
|
+
var temp = newColumns[0];
|
|
548
|
+
newColumns.shift();
|
|
549
|
+
newColumns.push(temp);
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
|
|
554
|
+
// 置底
|
|
555
|
+
if (lastColumn) {
|
|
556
|
+
Array.remove(newColumns, lastColumn);
|
|
557
|
+
Array.insert(newColumns, insertIndex, lastColumn);
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// 重定义索引
|
|
561
|
+
for (var i = 0, count = newColumns.length; i < count; i++) {
|
|
562
|
+
var column = newColumns[i];
|
|
563
|
+
column._index = start;
|
|
564
|
+
start++;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
// 重新排序
|
|
568
|
+
var columns = grid._columns;
|
|
569
|
+
columns.sort(function(column1, column2) {
|
|
570
|
+
var index1 = column1.get_index();
|
|
571
|
+
if (typeof (index1) == "undefined") {
|
|
572
|
+
index1 = 0;
|
|
573
|
+
}
|
|
574
|
+
var index2 = column2.get_index();
|
|
575
|
+
if (typeof (index2) == "undefined") {
|
|
576
|
+
index2 = 0;
|
|
577
|
+
}
|
|
578
|
+
return index1 - index2;
|
|
579
|
+
});
|
|
580
|
+
|
|
581
|
+
// 记录历史column的elements信息
|
|
582
|
+
var count = oldColumns.length;
|
|
583
|
+
var savedElements = [];
|
|
584
|
+
for (var i = 0; i < count; i++) {
|
|
585
|
+
var column = oldColumns[i];
|
|
586
|
+
savedElements[i] = column._elements;
|
|
587
|
+
}
|
|
588
|
+
// 必须释放对应的列,因为要交换elements
|
|
589
|
+
grid._disposeColumnsHeader(oldColumns);
|
|
590
|
+
|
|
591
|
+
// 重新设定column的冻结列索引值
|
|
592
|
+
grid._initColumnForzenIndex();
|
|
593
|
+
|
|
594
|
+
// 重新建立关系和刷新数据
|
|
595
|
+
for (var i = 0; i < count; i++) {
|
|
596
|
+
var column = newColumns[i];
|
|
597
|
+
var elements = savedElements[i];
|
|
598
|
+
column._internalSetElements(elements, column.get_index());
|
|
599
|
+
grid._refreshColumn(column);
|
|
600
|
+
}
|
|
601
|
+
grid._setFrozenVisible(false);
|
|
602
|
+
grid._saveColumnsDisplayOrder();
|
|
603
|
+
grid.updateColumnsIcon(newColumns);
|
|
604
|
+
this._setModified();
|
|
605
|
+
if (grid._filterBar) {
|
|
606
|
+
grid._filterBar.reset();
|
|
607
|
+
}
|
|
608
|
+
},
|
|
609
|
+
|
|
610
|
+
doDragRow: function(sender) {
|
|
611
|
+
var grid = this.get_form().grid;
|
|
612
|
+
var drag = grid.get_allowDrag();
|
|
613
|
+
if (drag) {
|
|
614
|
+
sender.set_text($craba.getLangPro('启用拖动'));
|
|
615
|
+
grid.set_allowDrag(false);
|
|
616
|
+
grid.set_allowDrop(false);
|
|
617
|
+
grid.set_allowMultiSelectedRow(false);
|
|
618
|
+
grid.set_allowCopy(true);
|
|
619
|
+
} else {
|
|
620
|
+
sender.set_text($craba.getLangPro('禁用拖动'));
|
|
621
|
+
grid.set_allowDrag(true);
|
|
622
|
+
grid.set_allowDrop(true);
|
|
623
|
+
grid.set_allowMultiSelectedRow(true);
|
|
624
|
+
grid.set_allowCopy(false);
|
|
625
|
+
}
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
function findLastRow (el, index) {
|
|
630
|
+
var configTableEl = el.querySelector('.GridTable');
|
|
631
|
+
var rows = configTableEl.querySelectorAll('tbody>tr');
|
|
632
|
+
var dragMoveDiv = document.querySelector('.GridDragDiv');
|
|
633
|
+
if (!dragMoveDiv) return false
|
|
634
|
+
|
|
635
|
+
var lastRow = null;
|
|
636
|
+
for (var i = 0; i < rows.length; i++) {
|
|
637
|
+
if (rows[i].rowIndex === index) {
|
|
638
|
+
lastRow = rows[i];
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
if (!lastRow) return false
|
|
643
|
+
var rowY = lastRow.getBoundingClientRect().top + 60; //因为被移动的这一行会被隐藏再加上一行,
|
|
644
|
+
var moveDivY = dragMoveDiv.style.top.split('p')[0];
|
|
645
|
+
if (moveDivY > rowY) {
|
|
646
|
+
return true
|
|
647
|
+
} else {
|
|
648
|
+
return false
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
Craba.Web.UI.Grid.GridConfigAction.registerClass('Craba.Web.UI.Grid.GridConfigAction', Sys.UI.PageAction);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="gb2312" ?>
|
|
2
|
+
<Page xmlns="Craba.UI" Title="${Title}" CssClass='IFrameModal' ActionType="Craba.Web.UI.IFrameAction, _Sys/UI/IFrame.js">
|
|
3
|
+
<HiddenField ID="Url" Value="${Url}" />
|
|
4
|
+
<HiddenField ID="ID" Value="${ID}" />
|
|
5
|
+
<FlexBlock ID="iframeDiv" />
|
|
6
|
+
<CancelButton Visible="false"/>
|
|
7
|
+
</Page>
|