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.
Files changed (53) hide show
  1. package/.vscode/launch.json +17 -0
  2. package/{test/config.js → 8/craba.js} +41 -29
  3. package/8/package.json +17 -0
  4. package/8/readme.md +20 -0
  5. package/8/www/_Sys/UI/Grid/GridConfig.gspx +27 -0
  6. package/8/www/_Sys/UI/Grid/GridConfig.js +652 -0
  7. package/8/www/_Sys/UI/IFrame.gspx +7 -0
  8. package/8/www/_Sys/UI/IFrame.js +57 -0
  9. package/8/www/_Sys/UI/PanelConfig.gspx +55 -0
  10. package/8/www/_Sys/UI/PanelConfig.js +268 -0
  11. package/8/www/_Sys/UI/Print/ClientSelector.gspx +39 -0
  12. package/8/www/_Sys/UI/Print/ClientSelector.js +152 -0
  13. package/8/www/js/agency.js +2 -0
  14. package/8/www/js/craba.min.js +12 -0
  15. package/8/www/js/crabaEx.min.js +7 -0
  16. package/8/www/js/crabaNgp.js +1 -0
  17. package/8/www/js/echarts-all.js +1 -0
  18. package/8/www/js/math.min.js +10 -0
  19. package/8/www/skins/craba.min.css +174 -0
  20. package/8/www/skins/font/iconfont.eot +0 -0
  21. package/8/www/skins/font/iconfont.svg +1281 -0
  22. package/8/www/skins/font/iconfont.ttf +0 -0
  23. package/8/www/skins/font/iconfont.woff +0 -0
  24. package/8/www/skins/ui/icons/backTop.gif +0 -0
  25. package/8/www/skins/ui/icons/blank.gif +0 -0
  26. package/8/www/skins/ui/icons/browsers.jpg +0 -0
  27. package/8/www/skins/ui/icons/grid.png +0 -0
  28. package/8/www/skins/ui/icons/nodata.png +0 -0
  29. package/8/www/skins/ui/print/new.png +0 -0
  30. package/8/www/skins/ui/print/old.png +0 -0
  31. package/8/www/skins/ui/print/settings.gif +0 -0
  32. package/8/www/skins/ui/tree/first.gif +0 -0
  33. package/8/www/skins/ui/tree/firstNo.gif +0 -0
  34. package/8/www/skins/ui/tree/last.gif +0 -0
  35. package/8/www/skins/ui/tree/line.gif +0 -0
  36. package/8/www/skins/ui/tree/node.gif +0 -0
  37. package/8/www/skins/ui/tree/node0.gif +0 -0
  38. package/8/www/skins/ui/tree/none.gif +0 -0
  39. package/index.js +71 -28
  40. package/lib/config.js +19 -2
  41. package/lib/server.js +12 -10
  42. package/lib/utils.js +99 -21
  43. package/package.json +5 -3
  44. package/test/ngp.js +38 -3
  45. package/test/readme.md +10 -10
  46. package/test/test.js +38 -0
  47. package/tool/checkjs.js +93 -0
  48. package/{client → tool}/client.js +2 -2
  49. package/{merge → tool}/merge.js +11 -11
  50. package/{lib → tool}/ngptool.js +26 -26
  51. package/tool/progressbar.js +10 -6
  52. package/{lib → tool}/sockettool.js +9 -10
  53. 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";