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,57 @@
|
|
|
1
|
+
Type.registerNamespace('Craba.Web.UI');
|
|
2
|
+
|
|
3
|
+
Craba.Web.UI.IFrameAction = function() {
|
|
4
|
+
Craba.Web.UI.IFrameAction.initializeBase(this);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
Craba.Web.UI.IFrameAction.prototype = {
|
|
8
|
+
context: function(cb) {
|
|
9
|
+
var form = this.get_form();
|
|
10
|
+
var params = form.get_pageParams();
|
|
11
|
+
var contextData = {};
|
|
12
|
+
contextData.Title = params.Title;
|
|
13
|
+
contextData.Url = params.Url;
|
|
14
|
+
contextData.ID = '__mainIFrame';
|
|
15
|
+
cb(contextData);
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
initialize: function() {
|
|
19
|
+
Craba.Web.UI.IFrameAction.callBaseMethod(this, 'initialize');
|
|
20
|
+
var form = this.get_form();
|
|
21
|
+
var iframe = document.createElement("iframe");
|
|
22
|
+
iframe.frameBorder = "0";
|
|
23
|
+
|
|
24
|
+
var id = form.ID.get_value();
|
|
25
|
+
if (id) iframe.id = id;
|
|
26
|
+
|
|
27
|
+
var src = form.Url.get_value();
|
|
28
|
+
if (src) iframe.src = src;
|
|
29
|
+
form.iframeDiv.get_element().appendChild(iframe);
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
$addHandler(iframe.contentWindow, 'keydown', function(e) {
|
|
33
|
+
if (e.keyCode == Sys.UI.Key.esc) {
|
|
34
|
+
$app._doHotkey(e);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
} catch (ex) {
|
|
38
|
+
// 跨域了
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
//var mainPanel = $common.getMainPanel(form);
|
|
42
|
+
//var r = window.getClientBounds();
|
|
43
|
+
//$common.setBounds(iframe, r.width, r.height);
|
|
44
|
+
/*
|
|
45
|
+
var dom = iframe;
|
|
46
|
+
while (dom && dom.className != "MDIChilds" && dom.tagName != "BODY" && !$Dom.hasClass(dom, 'FormContent')) {
|
|
47
|
+
dom.style.width = "100%";
|
|
48
|
+
dom.style.height = "100%";
|
|
49
|
+
dom = dom.parentNode;
|
|
50
|
+
}*/
|
|
51
|
+
},
|
|
52
|
+
|
|
53
|
+
dispose: function() {
|
|
54
|
+
Craba.Web.UI.IFrameAction.callBaseMethod(this, 'dispose');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
Craba.Web.UI.IFrameAction.registerClass('Craba.Web.UI.IFrameAction', Sys.UI.PageAction);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="gb2312"?>
|
|
2
|
+
<Page xmlns="Craba.UI"
|
|
3
|
+
Title="自定义控件显示位置"
|
|
4
|
+
AllowResize="true" MinWidth="650" MinHeight="500"
|
|
5
|
+
OnClose="doClosed"
|
|
6
|
+
CssClass='pd0'
|
|
7
|
+
ActionType="Craba.Web.UI.PanelConfigAction, _Sys/UI/PanelConfig.js">
|
|
8
|
+
|
|
9
|
+
<FlexBlock CssClass="GridConfigPage plr20 ptb10">
|
|
10
|
+
<FlexBlock Caption="显示到主面板的控件">
|
|
11
|
+
<Grid ID="grid0"
|
|
12
|
+
AllowPopup="false" ModifyOnly="true"
|
|
13
|
+
RowNoColumnCaption="行号"
|
|
14
|
+
AllowConfig="false"
|
|
15
|
+
AllowFilter="false"
|
|
16
|
+
SaveConfig="false"
|
|
17
|
+
UseEvenRowColor='false'
|
|
18
|
+
OnCellRendering='doCellRender'
|
|
19
|
+
DefaultRowCount="1"
|
|
20
|
+
AllowCopy="false"
|
|
21
|
+
AllowDrag="true"
|
|
22
|
+
OnDrop="doDrop"
|
|
23
|
+
OnRowDblClick="doShowMore">
|
|
24
|
+
<TextColumn Caption="控件文本" DataField="text" AllowStretch='true' HeaderAlign="Center" AllowHTML="true" />
|
|
25
|
+
</Grid>
|
|
26
|
+
</FlexBlock>
|
|
27
|
+
|
|
28
|
+
<FlexBlock Caption="隐藏到“更多..”面板的控件" Width='300'>
|
|
29
|
+
<Grid ID="grid1"
|
|
30
|
+
AllowPopup="false"
|
|
31
|
+
RowNoColumnCaption="行号"
|
|
32
|
+
AllowConfig="false"
|
|
33
|
+
AllowFilter="false"
|
|
34
|
+
ModifyOnly="true"
|
|
35
|
+
OnCellRendering='doCellRender'
|
|
36
|
+
SaveConfig="false"
|
|
37
|
+
UseEvenRowColor='false'
|
|
38
|
+
DefaultRowCount="1"
|
|
39
|
+
AllowCopy="false"
|
|
40
|
+
AllowDrag="true"
|
|
41
|
+
OnDrop="doDrop"
|
|
42
|
+
OnRowDblClick="doShowMain"
|
|
43
|
+
ReadOnly="false">
|
|
44
|
+
<TextColumn Caption="控件文本" DataField="text" AllowStretch='true' HeaderAlign="Center" ReadOnly="true" AllowHTML="true" />
|
|
45
|
+
<MultiSelectColumn Caption="换行" DataField="chk" Width="70" HeaderAlign="Center" OnChange="doGroupChange" DisplayNull="false"/>
|
|
46
|
+
</Grid>
|
|
47
|
+
</FlexBlock>
|
|
48
|
+
</FlexBlock>
|
|
49
|
+
|
|
50
|
+
<HBlock CssClass='BottomBlock'>
|
|
51
|
+
<Block CssClass='Flex1'/>
|
|
52
|
+
<Button ID="btnReset" Text="还原默认设置" CssClass='SpecialButton' OnClick="doReset"/>
|
|
53
|
+
<Button Text="关闭" OnClick="doSave"/>
|
|
54
|
+
</HBlock>
|
|
55
|
+
</Page>
|
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
Type.registerNamespace('Craba.Web.UI');
|
|
2
|
+
|
|
3
|
+
Craba.Web.UI.PanelConfigAction = function() {
|
|
4
|
+
Craba.Web.UI.PanelConfigAction.initializeBase(this);
|
|
5
|
+
this._changed = false;
|
|
6
|
+
this.PanelContainer = null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
Craba.Web.UI.PanelConfigAction.prototype = {
|
|
10
|
+
initialize: function() {
|
|
11
|
+
Craba.Web.UI.PanelConfigAction.callBaseMethod(this, 'initialize');
|
|
12
|
+
|
|
13
|
+
this._refresh();
|
|
14
|
+
|
|
15
|
+
$common.addStep({
|
|
16
|
+
tipsId: "_PanelConfig_Table",
|
|
17
|
+
control: this.get_form().grid0
|
|
18
|
+
}, "左右表格可相互拖动数据,同一表格内支持上下拖动进行排序");
|
|
19
|
+
$common.addStep({
|
|
20
|
+
tipsId: "_PanelConfig_Row",
|
|
21
|
+
control: this.get_form().grid0._rowsTable.firstChild.firstChild
|
|
22
|
+
}, "双击行可以实现左右表格的数据交换");
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
dispose: function() {
|
|
26
|
+
Craba.Web.UI.PanelConfigAction.callBaseMethod(this, 'dispose');
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
_refresh: function() {
|
|
30
|
+
var frm = this.get_form();
|
|
31
|
+
var panel = this.PanelContainer = frm.PanelContainer;
|
|
32
|
+
var hasMore = panel.get_button().get_visible();
|
|
33
|
+
frm.grid1.findColumn('chk').set_visible(hasMore);
|
|
34
|
+
frm.grid1.resetColumnStretch();
|
|
35
|
+
|
|
36
|
+
frm.grid0.refresh(this.getData(panel._getDesignControls(true)));
|
|
37
|
+
frm.grid1.refresh(this.getData(panel._getPopupControls(true)));
|
|
38
|
+
|
|
39
|
+
frm.grid0.set_allowMultiSelectedRow(false); // 禁止多选拖动(不好处理)
|
|
40
|
+
frm.grid1.set_allowMultiSelectedRow(false); // 禁止多选拖动(不好处理)
|
|
41
|
+
frm.grid1.set_dragField("text"); // 拖动是显示拖动的文本
|
|
42
|
+
frm.grid0.set_dragField("text");
|
|
43
|
+
},
|
|
44
|
+
|
|
45
|
+
getData: function(controls) {
|
|
46
|
+
var data = [];
|
|
47
|
+
//var notIds = this.PanelContainer._notConfigIds || [];
|
|
48
|
+
for (var i = 0; i < controls.length; i++) {
|
|
49
|
+
var control = controls[i];
|
|
50
|
+
if (!control.get_visible(true)) continue;
|
|
51
|
+
//var id = control.get_idPart();
|
|
52
|
+
//if (Array.contains(notIds, id)) continue; // 不允许配置的不显示
|
|
53
|
+
|
|
54
|
+
var txt = "";
|
|
55
|
+
if (control.get_label) txt = control.get_label();
|
|
56
|
+
if (!txt && control.get_text) txt = control.get_text();
|
|
57
|
+
if (!txt && control.get_dataField) txt = control.get_dataField();
|
|
58
|
+
if (!txt && control.get_tag) txt = control.get_tag();
|
|
59
|
+
if (!txt) txt = control.get_id();
|
|
60
|
+
|
|
61
|
+
txt = $craba.trimLabel(txt);
|
|
62
|
+
//var type = Object.getTypeName(control);
|
|
63
|
+
//type = type.substr(type.lastIndexOf(".") + 1);
|
|
64
|
+
|
|
65
|
+
var item = {
|
|
66
|
+
id: control.get_id(),
|
|
67
|
+
parid: control.get_idPart(),
|
|
68
|
+
configID: control._panelConfigID,
|
|
69
|
+
text: txt,
|
|
70
|
+
chk: control._group ? true : false
|
|
71
|
+
};
|
|
72
|
+
data.push(item);
|
|
73
|
+
}
|
|
74
|
+
return data;
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
doCellRender: function(sender, args) {
|
|
78
|
+
var rowIndex = args.get_rowIndex();
|
|
79
|
+
var column = args.get_column();
|
|
80
|
+
var dataField = column.get_dataField();
|
|
81
|
+
if (dataField !== 'text') return;
|
|
82
|
+
|
|
83
|
+
var data = sender.findRowData(rowIndex);
|
|
84
|
+
if (!data) return;
|
|
85
|
+
|
|
86
|
+
var notIds = this.PanelContainer._notConfigIds || [];
|
|
87
|
+
if (Array.contains(notIds, data.parid)) {
|
|
88
|
+
args.set_style('font-weight:bold;');
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
|
|
92
|
+
canMove: function(rowIndex, grid) {
|
|
93
|
+
var notIds = this.PanelContainer._notConfigIds || [];
|
|
94
|
+
var data = grid.findRowData(rowIndex);
|
|
95
|
+
if (!data) return false;
|
|
96
|
+
if (Array.contains(notIds, data.parid)) {
|
|
97
|
+
$common.showInfo('[' + data.text + ']不允许移动,只能排序哦。');
|
|
98
|
+
return false; // 不允许配置的只能排序,不能改变显示方式;
|
|
99
|
+
}
|
|
100
|
+
$common.hideHint();
|
|
101
|
+
return true;
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
doDrop: function(sender, args) {
|
|
105
|
+
$common.hideHint();
|
|
106
|
+
var form = this.get_form();
|
|
107
|
+
var grid0 = form.grid0;
|
|
108
|
+
var gridS = args.get_source();
|
|
109
|
+
var gridT = args.get_target();
|
|
110
|
+
var dIndex = args.get_dragIndex();
|
|
111
|
+
var sIndex = gridS.get_selectedRowIndex();
|
|
112
|
+
var offsetIndex = 0;
|
|
113
|
+
|
|
114
|
+
if (gridS == gridT) {
|
|
115
|
+
if (dIndex == sIndex || dIndex == sIndex - 1) return; // 没有改变位置
|
|
116
|
+
if (dIndex < sIndex) offsetIndex = -1;
|
|
117
|
+
} else {
|
|
118
|
+
/*if (grid0 == gridS && grid0.get_recordCount() <= 2) {
|
|
119
|
+
$common.showTips("主面板中至少应展示两个控件!");
|
|
120
|
+
args.set_cancel(true);
|
|
121
|
+
return;
|
|
122
|
+
}*/
|
|
123
|
+
if (!this.canMove(dIndex, gridS)) {
|
|
124
|
+
$common.showHint('该行不允许移动,只能排序。');
|
|
125
|
+
args.set_cancel(true);
|
|
126
|
+
return; // 不能隐藏或显示,只能排序
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
sIndex = gridT.get_selectedRowIndex();
|
|
130
|
+
if (sIndex < 0) sIndex = 0;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
var data = gridS.findRowData(dIndex);
|
|
134
|
+
var data1 = gridT.findRowData(sIndex);
|
|
135
|
+
|
|
136
|
+
gridS.deleteRow(dIndex, true);
|
|
137
|
+
data.chk = false;
|
|
138
|
+
if (gridT.get_recordCount() > 0) {
|
|
139
|
+
gridT.insertRowData(sIndex + offsetIndex, data);
|
|
140
|
+
} else {
|
|
141
|
+
gridT.appendRowData(data);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
this.saveChanges(data, data1);
|
|
145
|
+
},
|
|
146
|
+
|
|
147
|
+
saveChanges: function(data0, data1) {
|
|
148
|
+
this._changed = true;
|
|
149
|
+
this.PanelContainer._updatePanel(data0 ? data0.parid : null, data1 ? data1.parid : null);
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
doShowMore: function(sender) {
|
|
153
|
+
var grid = sender;
|
|
154
|
+
var form = sender.get_form();
|
|
155
|
+
var grid1 = form.grid1;
|
|
156
|
+
/*
|
|
157
|
+
if (grid.get_recordCount() <= 2) {
|
|
158
|
+
$common.showTips("主面板中至少应展示两个控件!");
|
|
159
|
+
return;
|
|
160
|
+
}*/
|
|
161
|
+
|
|
162
|
+
var data = grid.get_selectedRowData();
|
|
163
|
+
if (!data) return;
|
|
164
|
+
if (!this.canMove(grid.get_selectedRowIndex(), grid)) return; // 不能隐藏或显示,只能排序
|
|
165
|
+
|
|
166
|
+
data = Object.clone(data);
|
|
167
|
+
data.chk = false;
|
|
168
|
+
var rIndex = grid.get_selectedRowIndex();
|
|
169
|
+
grid.deleteRow(rIndex);
|
|
170
|
+
grid1.appendRowData(data);
|
|
171
|
+
this.saveChanges(data, null);
|
|
172
|
+
},
|
|
173
|
+
|
|
174
|
+
doShowMain: function(sender) {
|
|
175
|
+
var grid = sender;
|
|
176
|
+
var form = sender.get_form();
|
|
177
|
+
var grid0 = form.grid0;
|
|
178
|
+
|
|
179
|
+
var data = grid.get_selectedRowData();
|
|
180
|
+
if (!data) return;
|
|
181
|
+
if (!this.canMove(grid.get_selectedRowIndex(), grid)) return; // 不能隐藏或显示,只能排序
|
|
182
|
+
|
|
183
|
+
data = Object.clone(data);
|
|
184
|
+
var rIndex = grid.get_selectedRowIndex();
|
|
185
|
+
grid.deleteRow(rIndex);
|
|
186
|
+
grid0.appendRowData(data);
|
|
187
|
+
this.saveChanges(data, null);
|
|
188
|
+
},
|
|
189
|
+
|
|
190
|
+
doReset: function(sender) {
|
|
191
|
+
Sys.UI.MessageBox.confirm("您确定要还原默认设置吗?", Function.createDelegate(this, this._doReset));
|
|
192
|
+
},
|
|
193
|
+
|
|
194
|
+
_doReset: function(result) {
|
|
195
|
+
if (!result) return;
|
|
196
|
+
|
|
197
|
+
this._changed = false;
|
|
198
|
+
var panel = this.PanelContainer;
|
|
199
|
+
if (panel.get_configData()) {
|
|
200
|
+
panel.set_configData(null);
|
|
201
|
+
this._saveData(null);
|
|
202
|
+
}
|
|
203
|
+
panel.resetConfig();
|
|
204
|
+
this._refresh();
|
|
205
|
+
},
|
|
206
|
+
|
|
207
|
+
doSave: function(sender) {
|
|
208
|
+
this.get_form().doOk();
|
|
209
|
+
},
|
|
210
|
+
|
|
211
|
+
doClosed: function(frm, args) {
|
|
212
|
+
if (!this._changed) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
var form = this.get_form();
|
|
217
|
+
var list0 = form.grid0.get_dataController().save();
|
|
218
|
+
var list1 = form.grid1.get_dataController().save();
|
|
219
|
+
//$debug.traceDump(list0);
|
|
220
|
+
|
|
221
|
+
var ids0 = this._getIds(list0);
|
|
222
|
+
var ids1 = this._getIds(list1, true);
|
|
223
|
+
var configData = {};
|
|
224
|
+
configData.design = ids0.join(",");
|
|
225
|
+
configData.popup = ids1.join(",");
|
|
226
|
+
this.PanelContainer._saveConfigData(configData);
|
|
227
|
+
|
|
228
|
+
// webmethod
|
|
229
|
+
//$debug.traceDump(configData);
|
|
230
|
+
this._saveData(configData);
|
|
231
|
+
},
|
|
232
|
+
|
|
233
|
+
doGroupChange: function(sender, args) {
|
|
234
|
+
this._changed = true;
|
|
235
|
+
|
|
236
|
+
var rowIndex = args.get_rowIndex();
|
|
237
|
+
var data = this.get_form().grid1.getRowData(rowIndex);
|
|
238
|
+
var panel = this.PanelContainer;
|
|
239
|
+
panel._updatePopup(data.parid, args.get_value());
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
_saveData: function(configData) {
|
|
243
|
+
var panel = this.PanelContainer;
|
|
244
|
+
var panelId = panel.get_guid() + "_" + panel.get_configID();
|
|
245
|
+
|
|
246
|
+
if ($craba.checkConfig('panel', panelId, configData)) return;
|
|
247
|
+
|
|
248
|
+
var service = Craba.Web.Script.DataServiceBase.create();
|
|
249
|
+
service.SavePanelConfig(panelId, configData, Function.emptyMethod, Function.emptyMethod);
|
|
250
|
+
},
|
|
251
|
+
|
|
252
|
+
_getIds: function(list, allowGroup) {
|
|
253
|
+
var ids = [];
|
|
254
|
+
for (var i = 0, count = list.length; i < count; i++) {
|
|
255
|
+
var item = list[i];
|
|
256
|
+
if (item.configID) {
|
|
257
|
+
ids.push(item.configID)
|
|
258
|
+
} else {
|
|
259
|
+
ids.push(item.parid);
|
|
260
|
+
}
|
|
261
|
+
if (item.chk && allowGroup) {
|
|
262
|
+
ids.push(""); // 分组
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
return ids
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
Craba.Web.UI.PanelConfigAction.registerClass('Craba.Web.UI.PanelConfigAction', Sys.UI.PageAction);
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="gb2312"?>
|
|
2
|
+
<Page xmlns="Craba.UI" Title="打印客户端及打印机选择" CssClass="pd0" SubTitle="可以选择多个客户端的打印机同时打印" AllowResize="true" MinWidth="700" MinHeight="560" ActionType="Craba.Web.UI.Print.ClientSelectorAction, _Sys/UI/Print/ClientSelector.js">
|
|
3
|
+
|
|
4
|
+
<FlexColumn CssClass="plr20">
|
|
5
|
+
<Block ID='infoBox' CssClass='f12' />
|
|
6
|
+
|
|
7
|
+
<FlexBlock>
|
|
8
|
+
<FlexColumn Width="290">
|
|
9
|
+
<FlexBlock CssClass="Flex0" ID="accessFlex">
|
|
10
|
+
<Button Text="获取授权码 (Alt+O)" Shortcut="AltO" OnClick="doGetAccessCode" />
|
|
11
|
+
<TextEdit ID="teAccessCode" CssClass="FlexWidth" ReadOnly="true" NullDisplayText="授权码" />
|
|
12
|
+
</FlexBlock>
|
|
13
|
+
|
|
14
|
+
<FlexColumn Caption="远程客户端">
|
|
15
|
+
<ListBox ID="listClient" DataTextField="clientTagName" DataValueField="clientToken" OnChange="doClientChanged" />
|
|
16
|
+
</FlexColumn>
|
|
17
|
+
</FlexColumn>
|
|
18
|
+
|
|
19
|
+
<FlexColumn>
|
|
20
|
+
<HBlock ID="accessPanel" CssClass='mb0'>
|
|
21
|
+
<Button Text="刷新列表 (Alt+R)" CssClass="FloatRight" Shortcut="AltR" OnClick="doRefresh" />
|
|
22
|
+
</HBlock>
|
|
23
|
+
|
|
24
|
+
<Grid ID="gridPrint" OnRowDblClick="doSelect" AllowResize='false' SaveConfig='false' AllowConfig="false" AllowFilter="false" MinHeight="200" ReadOnly="false" DefaultRowCount="1">
|
|
25
|
+
<TextColumn DataField="PrinterName" Width="200" AllowStretch="true" Caption="远程打印机列表" HeaderAlign="Center" AllowSort="false" TextAlign="Center" ReadOnly="true" />
|
|
26
|
+
</Grid>
|
|
27
|
+
</FlexColumn>
|
|
28
|
+
</FlexBlock>
|
|
29
|
+
|
|
30
|
+
<FlexBlock Caption="已授权远程打印机列表" Height="100" CssClass="Border">
|
|
31
|
+
<Buttons ID="btnsSelect" CssClass="overflowauto margin5 Selector" DataTextField="text" DataValueField="clientToken" OnClick="doRemove" />
|
|
32
|
+
</FlexBlock>
|
|
33
|
+
</FlexColumn>
|
|
34
|
+
|
|
35
|
+
<HBlock CssClass="BottomBlock FlexRight">
|
|
36
|
+
<Button Text="确定" CssClass="SpecialButton" OnClick="doSure" />
|
|
37
|
+
<CancelButton Text='关闭' />
|
|
38
|
+
</HBlock>
|
|
39
|
+
</Page>
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
Type.registerNamespace('Craba.Web.UI.Print');
|
|
2
|
+
|
|
3
|
+
Craba.Web.UI.Print.ClientSelectorAction = function() {
|
|
4
|
+
Craba.Web.UI.Print.ClientSelectorAction.initializeBase(this);
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
Craba.Web.UI.Print.ClientSelectorAction.prototype = {
|
|
8
|
+
initialize: function() {
|
|
9
|
+
Craba.Web.UI.Print.ClientSelectorAction.callBaseMethod(this, 'initialize');
|
|
10
|
+
|
|
11
|
+
if ($settings.HideAccessCode) {
|
|
12
|
+
this.get_form().accessFlex.set_visible(false);
|
|
13
|
+
this.get_form().accessPanel.set_visible(false);
|
|
14
|
+
}
|
|
15
|
+
this.loadClients();
|
|
16
|
+
this.selectMap = {};
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
dispose: function() {
|
|
20
|
+
$common.hideTips();
|
|
21
|
+
|
|
22
|
+
Craba.Web.UI.Print.ClientSelectorAction.callBaseMethod(this, 'dispose');
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
loadClients: function() {
|
|
26
|
+
var that = this;
|
|
27
|
+
var form = that.get_form();
|
|
28
|
+
$print.getPrintClients(function(data) {
|
|
29
|
+
if (!data) data = [];
|
|
30
|
+
if (data.length == 0) {
|
|
31
|
+
if (form.infoBox.get_element().childNodes.length == 0) {
|
|
32
|
+
$common.showInfo('<span>您还没有授权远程打印机或远程打印机没有启动无法访问。<br/>请先获取授权码,然后将授权码发送给安装有Teemo版本打印机进行授权。<a href="http://crabadoc.mygjp.com.cn/Default.gspx#Pages/Content.gspx?id=920" target="_blank">查看授权方法</a></span>', {
|
|
33
|
+
only: true,
|
|
34
|
+
timer: 0,
|
|
35
|
+
className: 'f12 Info aicon-tishi5',
|
|
36
|
+
target: form.infoBox
|
|
37
|
+
});
|
|
38
|
+
} else {
|
|
39
|
+
$common.showError('远程打印机没有启动或无法访问');
|
|
40
|
+
}
|
|
41
|
+
} else {
|
|
42
|
+
form.infoBox.get_element().innerHTML = '';
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
form.listClient.set_items(data);
|
|
46
|
+
form.listClient.set_selectedIndex(0);
|
|
47
|
+
that.doClientChanged(form.listClient);
|
|
48
|
+
that.doBindSelected();
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
|
|
52
|
+
doClientChanged: function(sender) {
|
|
53
|
+
var grid = this.get_form().gridPrint;
|
|
54
|
+
var index = sender.get_selectedIndex();
|
|
55
|
+
var items = sender.get_items();
|
|
56
|
+
if (items.length === 0) {
|
|
57
|
+
grid.refresh(null);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
var selectClient = items[index];
|
|
62
|
+
var printerNames = [];
|
|
63
|
+
for (var i = 0; i < selectClient.printerNames.length; i++) {
|
|
64
|
+
printerNames.push({
|
|
65
|
+
PrinterName: selectClient.printerNames[i].printerName
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
grid.refresh(printerNames);
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
doBindSelected: function() {
|
|
72
|
+
if (!$print._getRemoteClients) return;
|
|
73
|
+
var selectedList = $print._getRemoteClients();
|
|
74
|
+
if (!selectedList || selectedList.length < 1) return;
|
|
75
|
+
|
|
76
|
+
Array.forEach(selectedList, function(item) {
|
|
77
|
+
this.selectMap[item.clientToken] = item;
|
|
78
|
+
}, this);
|
|
79
|
+
this.refreshItems();
|
|
80
|
+
},
|
|
81
|
+
|
|
82
|
+
doSelect: function(sender) {
|
|
83
|
+
var form = sender.get_form();
|
|
84
|
+
var printer = form.gridPrint.get_selectedRowData();
|
|
85
|
+
if (!printer) return;
|
|
86
|
+
|
|
87
|
+
var clientToken = form.listClient.get_value();
|
|
88
|
+
var clientTagName = form.listClient.get_text();
|
|
89
|
+
var printerName = printer.PrinterName;
|
|
90
|
+
var text = clientTagName + "(" + printerName + ")";
|
|
91
|
+
var item = {
|
|
92
|
+
text: text,
|
|
93
|
+
clientToken: clientToken,
|
|
94
|
+
printerName: printerName
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
this.selectMap[item.clientToken] = item;
|
|
98
|
+
this.refreshItems();
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
refreshItems: function() {
|
|
102
|
+
var btnsSelect = this.get_form().btnsSelect;
|
|
103
|
+
var items = this.getSelectedData();
|
|
104
|
+
btnsSelect.set_items(items);
|
|
105
|
+
},
|
|
106
|
+
|
|
107
|
+
doRefresh: function(sender) {
|
|
108
|
+
var grid = this.get_form().gridPrint;
|
|
109
|
+
grid.dataBind([]);
|
|
110
|
+
this.loadClients();
|
|
111
|
+
this.selectMap = {};
|
|
112
|
+
this.refreshItems();
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
doGetAccessCode: function(sender) {
|
|
116
|
+
$print.getAccessCode(function(result) {
|
|
117
|
+
if (!result) {
|
|
118
|
+
$common.showTips('授权码获取异常');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
sender.get_form().teAccessCode.set_text(result.accessCode);
|
|
122
|
+
$common.copyText(result.accessCode);
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
|
|
126
|
+
doRemove: function(sender, args) {
|
|
127
|
+
var clientToken = args.get_data().clientToken;
|
|
128
|
+
delete this.selectMap[clientToken];
|
|
129
|
+
this.refreshItems();
|
|
130
|
+
},
|
|
131
|
+
|
|
132
|
+
doSure: function(sender) {
|
|
133
|
+
if (Object.isEmpty(this.selectMap)) {
|
|
134
|
+
$common.showTips('请先双击打印机列表选择打印机');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
var items = this.getSelectedData();
|
|
138
|
+
var form = sender.get_form();
|
|
139
|
+
form.result = items;
|
|
140
|
+
if ($print._saveRemoteClients) $print._saveRemoteClients(items); // 统一缓存+保存配置
|
|
141
|
+
form.doOk();
|
|
142
|
+
},
|
|
143
|
+
|
|
144
|
+
getSelectedData: function() {
|
|
145
|
+
var items = [];
|
|
146
|
+
for (var name in this.selectMap) {
|
|
147
|
+
items.push(this.selectMap[name]);
|
|
148
|
+
}
|
|
149
|
+
return items;
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
Craba.Web.UI.Print.ClientSelectorAction.registerClass('Craba.Web.UI.Print.ClientSelectorAction', Sys.UI.PageAction);
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(){function e(e){if(e){var t="<div id='Loadingcraba' class='Loadingcraba'>";t+="<style id='LoadingStyle'>*{box-sizing: border-box;}",t+=".Loadingcraba {font-size:12px; position: absolute; width: 100%; ",t+="height: 100%; left: 0; top: 0; background-color: #efefef; z-index: 9999999; display:none; align-items: center;justify-content: center; }",t+=".ProgressBar { width: 100%; height: 4px; background-color: #D4E1E8; border-radius: 4px; position: relative; border: 0 solid #e0e0e0; }",t+=".ProgressBar .ProgressValue { background-color: #0087D5; height: 100%; width: 0; border-radius: 8px; position: absolute; ",t+="left: 0; top: 0; z-index: 0; animation: reverse progress-bar-stripes 0.60s linear infinite, animate-positive 2s; ",t+="background-image: -webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,",t+="transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); ",t+="background-image: -o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,",t+="transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent); ",t+="background-image: linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,",t+="rgba(255,255,255,.15) 75%,transparent 75%,transparent); -webkit-background-size: 40px 40px; background-size: 40px 40px }",t+=".ProgressBar .ProgressText, .ProgressBar .ProgressHighText { position: relative; z-index: 1; margin: auto; width: 100%; ",t+="text-align: center; top: 0; line-height: 2; height: 100%; display: block; color: #0087D5;font-size:17px; }",t+=".ProgressBar.ValueFloat span { position: absolute; left: 0; top: -30px; border-radius: 8px; width: auto;",t+=" min-width: 26px; display: inline-block; line-height: 30px !important; text-align: center;",t+=" transition: left .2s linear; word-break: keep-all; word-wrap: normal; ",t+="white-space: nowrap; padding: 0 5px; }</style>",t+="<div class='ProgressBar ValueFloat' id='progress' style='width: 300px; '>",t+="<div class='ProgressValue transition2' id='LoadingValue' style='width: 0; '></div>",t+="<span class='ProgressHighText' style='line-height: 12px; left: 1%; ' id='LoadingText'>0%</span>",t+="</div></div>";var n=document.createElement("div");n.innerHTML=t,document.body.appendChild(n.firstChild),n=null;var i=document.getElementById("Loadingcraba"),o=document.getElementById("LoadingText"),d=document.getElementById("LoadingValue");a=setTimeout(function(){i.style.display="flex"},s);var c=e.length,l=1;$scriptLoader.loadScripts(e,function(){o&&(o.innerText="100%"),$removeNode(i),$removeNode($get("LoadingStyle")),"function"==typeof r&&(clearTimeout(a),r())},function(e){console.log(e+"脚本加载失败,请刷新重试。")},function(e){if(console.log(e),i){var t=l/c*100;o.style.left=t-5+"%",d.style.width=t+"%",o.innerText=parseInt(t)+"%",l++}},!0)}else alert("没有输出首页脚本集合")}function t(t){return!1===t?(console.log("craba服务请求失败"),loadingText.innerText="craba服务请求失败",void e(o)):t.success?void(t.scripts.length>0?function(t){for(var n=0,r=o.length;n<r;n++){for(var a=o[n],s=!1,d=0,c=i.length;d<c;d++){var l=i[d];if(a.indexOf(l)>-1){s=!0;break}}s||t.push(a)}e(t)}(t.scripts):e(o)):(console.log(t),loadingText.innerText="craba服务异常",void e(o))}function n(e,t,n){return e+=e.indexOf("?")>0?"&":"?",e+=t+"="+n}var r,a,i=["js/craba.js","js/controls.js","js/crabaEx.js","js/controlsEx.js","js/print.js","js/grid.js","jsBin/craba.min.js","jsBin/crabaEx.min.js","jsBin/content.min.js"],o=[],s=200;window.$agency=new function(){this.ajax=function(e,t,r,a,i){"undefined"!=typeof agencyVersion&&(e=n(e,"_v_",agencyVersion));var o=new XMLHttpRequest,s="";a||(a="post"),"post"==a.toLowerCase()?t&&(s=JSON.stringify(t)):t&&(e+="?",e+=t),o.open(a,e),i||(i=this.getHeaders());for(var d in i){var c=i[d];"function"!=typeof c&&o.setRequestHeader(d,c)}o.send(s),o.onreadystatechange=function(){if(4==o.readyState)if(200==o.status){if("function"==typeof r){var e=i["Content-Type"];r(e&&function(t,n){return e.substr(0,n.length)===n}(0,"application/json")?JSON.parse(o.responseText):o.responseText)}}else"function"==typeof r&&r(!1)}},this.getHeaders=function(e){return e?{"Content-Type":"text/javascript; charset=utf-8"}:{"Content-Type":"application/json; charset=utf-8"}},this.load=function(n,a,i){console.log(n),console.log(a),o=n,r=i,a.crabaServiceUrl?$agency.ajax(a.crabaServiceUrl,a,t):e(o)}},$scriptLoader=new function(){this._getLoadedScripts=function(){return this._loadedScripts||(this._loadedScripts=[]),this._loadedScripts},this.arrayContains=function(e,t){return this.arrayIndexOf(e,t)>=0},this.arrayIndexOf=function(e,t,n){if(void 0===t)return-1;var r=e.length;if(0!==r){n-=0,isNaN(n)?n=0:(isFinite(n)&&(n-=n%1),n<0&&(n=Math.max(0,r+n)));for(var a=n;a<r;a++)if("undefined"!=typeof e[a]&&e[a]===t)return a}return-1},this.isScriptLoaded=function(e){var t=this._getLoadedScripts();return this.arrayContains(t,e)},this.addScriptElement=function(e,t){if(e){var n=document.createElement("SCRIPT");return n.type="text/javascript",n.setAttribute("_src",t),n.text?n.text=e:n.innerHTML=e,document.getElementsByTagName("HEAD")[0].appendChild(n),n}},this.loadScripts=function(e,t,r,a,i){var o=e;if("String"==typeof e&&(o=e.split(",")),o.length<1)"function"==typeof t&&t();else{var s=function(d){if(d!==undefined){if(d=d.trim(),$scriptLoader.isScriptLoaded(d))return s(o.shift());if(a&&a(d),i){"undefined"!=typeof agencyVersion&&(d=n(d,"_v_",agencyVersion));var c=document.createElement("script");c.type="text/javascript",c.src=d,c.onload=c.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||($scriptLoader._getLoadedScripts().push(d),s(o.shift()),c.onload=c.onreadystatechange=c.onerror=null)},c.onerror=function(){s(o.shift()),"function"==typeof r&&r(d),c.onload=c.onreadystatechange=c.onerror=null},document.getElementsByTagName("HEAD")[0].appendChild(c)}else $agency.ajax(d,null,function(e){!1===e?(s(o.shift()),"function"==typeof r&&r(d)):($scriptLoader._getLoadedScripts().push(d),e=e+"\r\n//# sourceURL="+d,$scriptLoader.addScriptElement(e,d),s(o.shift()))},"GET",$agency.getHeaders(!0))}else"function"==typeof t&&t(e)};s(o.shift())}}}}(window);
|
|
2
|
+
var agencyVersion="1.2.532";
|