Przeglądaj źródła

呼叫中心,元旦提交一下,暂存

seimin 3 lat temu
rodzic
commit
dcce9a8e1e

+ 4 - 5
assets/js/controllers/consumables/consumablesCtrl.js

@@ -18,8 +18,7 @@ app.controller('hc_consumablesCtrl', ["$scope", "$http", "i18nService", "$rootSc
18 18
     }
19 19
     //修改开始价格和结束价格
20 20
     $scope.changePrice = function(val,type){
21
-        val = val || 1;
22
-        $scope[type] = Math.abs(parseFloat(val.toFixed(2), 10));
21
+        $scope[type] = val?Math.abs(parseFloat(val.toFixed(2), 10)):val;
23 22
     }
24 23
     // 监听编辑在库数量
25 24
     $scope.$watch('hc_eject_inventoryNum', function (val, oldval) {
@@ -471,9 +470,9 @@ app.controller('hc_consumablesCtrl', ["$scope", "$http", "i18nService", "$rootSc
471 470
             ||!$scope.select_updata_pinpai.updata_pinpai.name
472 471
             ||!$scope.select_updata_guige.updata_guige.name
473 472
             ||!$scope.companyIds
474
-            ||(!$scope.startPrice&&$scope.startPrice!=='0')
475
-            ||(!$scope.endPrice&&$scope.endPrice!=='0')
476
-            ||($scope.isWarehousing == 1&&!$scope.hc_eject_inventorySum&&$scope.hc_eject_inventorySum!=='0'&&!$scope.hc_eject_inventoryNum&&$scope.hc_eject_inventoryNum!=='0')
473
+            ||(!$scope.startPrice&&$scope.startPrice!==0)
474
+            ||(!$scope.endPrice&&$scope.endPrice!==0)
475
+            ||($scope.isWarehousing == 1&&($scope.hc_eject_inventorySum===null||$scope.hc_eject_inventoryNum===null))
477 476
             ) {
478 477
             SweetAlert.swal({
479 478
                 title: "保存失败",

+ 24 - 5
assets/js/controllers/customform/customformCtrl.js

@@ -13315,10 +13315,12 @@ appFormly.config(function config(formlyConfigProvider) {
13315 13315
             }
13316 13316
           },
13317 13317
           addRequeter: function (size, options, modal, e) {
13318
-            if (e.clientX === 0) {
13319
-              return;
13318
+            if(e){
13319
+              if (e.clientX === 0) {
13320
+                return;
13321
+              }
13322
+              e.preventDefault();
13320 13323
             }
13321
-            e.preventDefault();
13322 13324
             var modalInstance = modal.open({
13323 13325
               templateUrl:
13324 13326
                 "assets/views/customform/tpl/modal-add-callrequester.html",
@@ -13335,12 +13337,20 @@ appFormly.config(function config(formlyConfigProvider) {
13335 13337
                 UserService,
13336 13338
                 api_user_data,
13337 13339
                 api_statistic,
13338
-                api_wechatfile
13340
+                api_wechatfile,
13341
+                $stateParams
13339 13342
               ) {
13340 13343
                 $modalInstance.SweetAlert = SweetAlert;
13341 13344
                 $scope.title = "新增报修人";
13342 13345
                 $scope.requester = {};
13343 13346
                 $scope.searchData = {};
13347
+                if (angular.isDefined($stateParams.model) && $stateParams.model != "") {
13348
+                  var paramsModel = JSON.parse($stateParams.model)
13349
+                  //来电-添加报修人-回显电话
13350
+                  if(paramsModel.model.incident.requester.hjzxPhone){
13351
+                    $scope.requester.mphone = paramsModel.model.incident.requester.hjzxPhone;
13352
+                  }
13353
+                }
13344 13354
                 $scope.onChangeadd = function (searchData) {
13345 13355
                   $scope.searchKey = searchData.account;
13346 13356
                   // $scope.searchDataadd = searchData;
@@ -14001,7 +14011,16 @@ appFormly.config(function config(formlyConfigProvider) {
14001 14011
       "$scope",
14002 14012
       "api_user_data",
14003 14013
       "api_statistic",
14004
-      function ($scope, api_user_data, api_statistic) {
14014
+      "$stateParams",
14015
+      function ($scope, api_user_data, api_statistic,$stateParams) {
14016
+        console.log($stateParams)
14017
+        if (angular.isDefined($stateParams.model) && $stateParams.model != "") {
14018
+          var paramsModel = JSON.parse($stateParams.model)
14019
+          //来电-添加报修人
14020
+          if(paramsModel.model.incident.requester.hjzxPhone){
14021
+            $scope.options.templateOptions['addRequeter']('lg',$scope.options,$scope.to.modal);
14022
+          }
14023
+        }
14005 14024
         $scope.options.initialValue = $scope.model[$scope.options.key];
14006 14025
         $scope.saveReqPlace = false;
14007 14026
         $scope.model.saveReqPlace = false;

+ 39 - 31
assets/js/controllers/incident/incidentCtrl.js

@@ -775,9 +775,9 @@ app.controller('incidentListCtrl', ["$scope", "$http", "i18nService", "$rootScop
775 775
         // $scope.searchkeys.category={};
776 776
         console.log(item);
777 777
         if (item.item) {
778
-            $scope.searchkeys.category = item = undefined;
778
+            $scope.searchkeys.levelCategory = item = undefined;
779 779
         } else {
780
-            $scope.searchkeys.category = item;
780
+            $scope.searchkeys.levelCategory = item;
781 781
         }
782 782
 
783 783
         //         if (angular.isDefined(item.children) && item.children.length >= 1) {
@@ -2510,37 +2510,45 @@ app.controller('incidentListCtrl', ["$scope", "$http", "i18nService", "$rootScop
2510 2510
         $scope.searchstate = 'todo';//baba
2511 2511
     }
2512 2512
     $scope.onChange = function (searchType) {
2513
-        // console.log(defaultFilterData,'fanbu')
2514
-        if(defaultFilterData.incident){
2515
-            var lsObject = defaultFilterData.incident;
2516
-        }
2517 2513
         $scope.searchstate = searchType;
2518
-        defaultFilterData = $scope.memoryfilterData;
2519
-        defaultFilterData.incident = lsObject;
2520
-        defaultFilterData['searchType'] = searchType;
2521
-        defaultFilterData.assignee = loginUser.id;
2522
-        // -----------seimin-------------
2523
-        if(searchType!=='all'){
2524
-            $scope.searchkeys = {selectType:{}};//seimin
2525
-        }
2526
-        if(searchType!== 'all'&&defaultFilterData.incident&&defaultFilterData.incident.selectType){
2527
-            delete defaultFilterData.incident.selectType;
2528
-        }
2529
-        if(searchType== 'all'){
2530
-            if(!defaultFilterData.incident||!defaultFilterData.incident.selectType){
2531
-                $scope.searchkeys = {selectType:{id:'0',name:'否'}};//seimin
2532
-            }
2533
-        }
2534
-        if(Object.prototype.toString.call(defaultFilterData.incident) == "[object Object]"&&Object.keys(defaultFilterData.incident).length == 0){
2535
-            delete defaultFilterData.incident;
2536
-        }
2537
-        // -----------seimin-------------
2514
+        $scope.chiceIncident($scope.searchkeys,$scope.othcode.state);
2515
+        // console.log(defaultFilterData,'fanbu')
2516
+        // if(defaultFilterData.incident){
2517
+        //     var lsObject = defaultFilterData.incident;
2518
+        // }
2519
+        // defaultFilterData = $scope.memoryfilterData;
2520
+        // defaultFilterData.incident = lsObject;
2521
+        // defaultFilterData['searchType'] = searchType;
2522
+        // defaultFilterData.assignee = loginUser.id;
2523
+        // // -----------seimin-------------
2524
+        // if(searchType!=='all'){
2525
+        //     $scope.searchkeys = {selectType:{}};//seimin
2526
+        // }
2527
+        // if(searchType!== 'all'&&defaultFilterData.incident&&defaultFilterData.incident.selectType){
2528
+        //     delete defaultFilterData.incident.selectType;
2529
+        // }
2530
+        // if(searchType== 'all'){
2531
+        //     if(!defaultFilterData.incident||!defaultFilterData.incident.selectType){
2532
+        //         $scope.searchkeys = {selectType:{id:'0',name:'否'}};//seimin
2533
+        //     }
2534
+        // }
2535
+        // if(Object.prototype.toString.call(defaultFilterData.incident) == "[object Object]"&&Object.keys(defaultFilterData.incident).length == 0){
2536
+        //     delete defaultFilterData.incident;
2537
+        // }
2538
+        // if($scope.othcode.state){
2539
+        //     if(Object.prototype.toString.call(defaultFilterData.incident) == "[object Object]"){
2540
+        //         defaultFilterData.incident.statusId = $scope.othcode.state.id;
2541
+        //     }else{
2542
+        //         defaultFilterData.incident = {statusId:$scope.othcode.state.id};
2543
+        //     }
2544
+        // }
2545
+        // // -----------seimin-------------
2538 2546
         
2539
-        $scope.refreshData('expand-right', defaultFilterData);
2540
-        $interval.cancel($scope.timer);
2541
-        $scope.timer = $interval(function () {
2542
-            $scope.jry_refresh()
2543
-        }, $rootScope.refreshTime);
2547
+        // $scope.refreshData('expand-right', defaultFilterData);
2548
+        // $interval.cancel($scope.timer);
2549
+        // $scope.timer = $interval(function () {
2550
+        //     $scope.jry_refresh()
2551
+        // }, $rootScope.refreshTime);
2544 2552
     }
2545 2553
     // 是否逾期下拉框选择seimin
2546 2554
     $scope.selectTypeChange = function(){

+ 15 - 0
assets/js/controllers/loginCtrl.js

@@ -173,6 +173,11 @@ app.controller('LoginCtrl', ['$rootScope', '$scope', '$state', '$translate', '$l
173 173
                                         $rootScope.isFuwutai = false;
174 174
                                     }
175 175
                                 }
176
+                                if($rootScope.isFuwutai){
177
+                                    localStorage.setItem("isFuwutai", 'true');
178
+                                }else{
179
+                                    localStorage.removeItem('isFuwutai');
180
+                                }
176 181
                                 // $rootScope.userMenus = JSON.parse(localStorage.getItem("jry_user")).menu;
177 182
                                 var allJurisdiction = JSON.parse(localStorage.getItem("jry_user")).menu;
178 183
                                 var onlyMenu = [];
@@ -294,6 +299,11 @@ app.controller('LoginCtrl', ['$rootScope', '$scope', '$state', '$translate', '$l
294 299
                                             $rootScope.isFuwutai = false;
295 300
                                         }
296 301
                                     }
302
+                                    if($rootScope.isFuwutai){
303
+                                        localStorage.setItem("isFuwutai", 'true');
304
+                                    }else{
305
+                                        localStorage.removeItem('isFuwutai');
306
+                                    }
297 307
                                     // $rootScope.userMenus = JSON.parse(localStorage.getItem("jry_user")).menu;
298 308
                                     var allJurisdiction = JSON.parse(localStorage.getItem("jry_user")).menu;
299 309
                                     var onlyMenu = [];
@@ -416,6 +426,11 @@ app.controller('LoginCtrl', ['$rootScope', '$scope', '$state', '$translate', '$l
416 426
                                                 $rootScope.isFuwutai = false;
417 427
                                             }
418 428
                                         }
429
+                                        if($rootScope.isFuwutai){
430
+                                            localStorage.setItem("isFuwutai", 'true');
431
+                                        }else{
432
+                                            localStorage.removeItem('isFuwutai');
433
+                                        }
419 434
                                         // $rootScope.userMenus = JSON.parse(localStorage.getItem("jry_user")).menu;
420 435
                                         var allJurisdiction = JSON.parse(localStorage.getItem("jry_user")).menu;
421 436
                                         var onlyMenu = [];

Plik diff jest za duży
+ 2841 - 2229
assets/js/controllers/mainCtrl.js


assets/js/directives/ola_api.js → assets/js/directives/ola_api1.js


+ 419 - 0
assets/js/directives/ola_api2.js

@@ -0,0 +1,419 @@
1
+/**
2
+201606
3
+
4
+基于WebSocket的坐席客户端范例
5
+
6
+1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode 
7
+2 new一个TLWSA对象,每个页面只能有一个实例
8
+3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化
9
+4 写事件callack函数,并赋值给tlwsa的callback
10
+
11
+5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码
12
+6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线
13
+
14
+其他功能的调用方法请参考相关代码
15
+
16
+**/
17
+// var phoneNumber = '';
18
+var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器
19
+
20
+var tlwsa=new TLWSA(); //生成一个坐席客户端实例 每个页面只能有一个实例
21
+window.onload=function() //必须第一个调用的方法,初始化websocket相关变量
22
+{
23
+	tlwsa.initTLWSA();
24
+}
25
+
26
+//函数调用的应答  注意 是类TLWSA 不是实例tlwsa
27
+// TLWSA.onOpenreturn=onopenreturn;
28
+TLWSA.onOpenslaveserverreturn=onopenslaveserverreturn;
29
+
30
+// TLWSA.onLoginreturn=onloginreturn;
31
+TLWSA.onMutereturn=onmutereturn;
32
+TLWSA.onUnmutereturn=onunmutereturn;
33
+// TLWSA.onSetphonenumberreturn=onsetphonenumberreturn;
34
+// TLWSA.onLogoffreturn=onlogoffreturn; //主动注销结果
35
+// TLWSA.onAcwreturn=onacwreturn;
36
+// TLWSA.onWcareturn=onwcareturn;
37
+
38
+// TLWSA.onCallreturn=oncallreturn;
39
+TLWSA.onCancelcallreturn=oncancelcallreturn;
40
+// TLWSA.onTransferreturn=ontransferreturn;//调用转移方法之后,返回该事件 如果错误码为0,仅仅表示开始转移,不代表转移目标已经接听或已经拒绝
41
+TLWSA.onCanceltransferreturn=oncanceltransferreturn;
42
+TLWSA.onBlindtransferreturn=onblindtransferreturn;
43
+TLWSA.onTransfertoivrreturn=ontransfertoivrreturn;
44
+TLWSA.onTransfertoivrandwaitreturn=ontransfertoivrandwaitreturn;
45
+TLWSA.onStartlistenreturn=onstartlistenreturn;
46
+TLWSA.onStoplistenreturn=onstoplistenreturn;
47
+TLWSA.onKillreturn=onkillreturn;
48
+TLWSA.onForceonhookreturn=onforceonhookreturn;
49
+TLWSA.onIntrudereturn=onintrudereturn;
50
+TLWSA.onGetcallreturn=ongetcallreturn;
51
+TLWSA.onAnswercallreturn=onanswercallreturn;
52
+TLWSA.onOnhookreturn=ononhookreturn;
53
+TLWSA.onHoldcallreturn=onholdcallreturn;
54
+TLWSA.onSwapcallreturn=onswapcallreturn;
55
+TLWSA.onActivatecallreturn=onactivatecallreturn;
56
+TLWSA.onUnholdcallreturn=onunholdcallreturn;
57
+TLWSA.onLoginotheragentreturn=onloginotheragentreturn;
58
+TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn;
59
+TLWSA.onAnswerqueuereturn=onanswerqueuereturn;
60
+TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
61
+
62
+TLWSA.onConsulttransferreturn=onconsulttransferreturn;
63
+TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn;
64
+TLWSA.onGetnodestatereturn=ongetnodestatereturn;
65
+TLWSA.onTransfernodereturn=ontransfernodereturn;
66
+//会议相关
67
+TLWSA.onConferencestartreturn=onconferencestartreturn;
68
+TLWSA.onConferenceappendmemberreturn=onconferenceappendmemberreturn;
69
+TLWSA.onConferencequeryreturn=onconferencequeryreturn;
70
+TLWSA.onConferencedismissreturn=onconferencedismissreturn;
71
+TLWSA.onConferencekickoutreturn=onconferencekickoutreturn;
72
+TLWSA.onConferencechangememberstatereturn=onconferencechangememberstatereturn;
73
+//主动事件
74
+// TLWSA.onCallin=oncallin;
75
+// TLWSA.onCallend=oncallend;
76
+TLWSA.onAcw=onacw;
77
+TLWSA.onWca = onwca;
78
+TLWSA.onLogoff = onlogoff; //被强制注销事件
79
+// TLWSA.onCallresult=oncallresult;
80
+// TLWSA.onTransferresult=ontransferresult;
81
+TLWSA.onConsulttransfercalleeanswer=onconsulttransfercalleeanswer;
82
+TLWSA.onBlindtransferresult=onblindtransferresult;
83
+// TLWSA.onAnswer=onanswer;
84
+TLWSA.onClosed=onclosed;
85
+TLWSA.onSlaveserverclosed=onslaveserverclosed; //备用服务器网络中断
86
+TLWSA.onHoldcallreleased=onholdcallreleased;
87
+TLWSA.onKeepcallreleased=onkeepcallreleased;
88
+TLWSA.onCalleealerting=oncalleealerting;
89
+TLWSA.onQueue=onqueue;
90
+TLWSA.onQuitqueue=onquitqueue;
91
+TLWSA.onRecvmsg=onrecvmsg;
92
+TLWSA.onHookstate=onhookstate;
93
+TLWSA.onHardwarefail=onhardwarefail;
94
+// TLWSA.onMisscall=onmisscall;
95
+TLWSA.onConferencememberstate=onconferencememberstate;
96
+TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步
97
+TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver;
98
+TLWSA.onStatechange=onstatechange;
99
+TLWSA.onMyStatechange=onmystatechange;
100
+//应答回调
101
+// function onopenreturn(err)
102
+// {
103
+// 	err = Number(err);
104
+// 	if(!err){
105
+// 		console.log('呼叫中心连接成功-----seimin');
106
+// 		//如果设置过话机
107
+// 		if(localStorage.getItem('phoneNumber')){
108
+// 			// 登录并设置号码
109
+// 			phoneNumber = localStorage.getItem('phoneNumber');
110
+// 			tlwsa.tlaLogin(phoneNumber,1,-1);
111
+// 		}
112
+// 	}else{
113
+// 		console.log('呼叫中心连接失败-----seimin');
114
+// 	}
115
+// 	// console.log('应答:连接服务器结果 '+err);
116
+// }
117
+function onopenslaveserverreturn(err)
118
+{
119
+	console.log('应答:连接备用服务器结果 '+err);
120
+}
121
+
122
+// function onloginreturn(err) //登录结果
123
+// {
124
+// 	err = Number(err);
125
+// 	if(!err){
126
+// 		console.log('登录成功-----seimin');
127
+// 		setTimeout(function(){
128
+// 			console.log('开始设置号码【'+phoneNumber+'】-----seimin');
129
+// 			tlwsa.tlaSetphonenumber(phoneNumber);
130
+// 		},0)
131
+// 	}else{
132
+// 		console.log('登录失败-----seimin');
133
+// 	}
134
+// 	console.log('应答:登录请求结果 '+err);
135
+// }
136
+function onmutereturn(err)
137
+{
138
+	console.log('应答:静音请求结果 '+err);
139
+}
140
+function onunmutereturn(err)
141
+{
142
+	console.log('应答:取消静音请求结果 '+err);
143
+}
144
+// function onsetphonenumberreturn(err)
145
+// {
146
+// 	err = Number(err);
147
+// 	if(!err){
148
+// 		console.log('设置号码成功-----seimin');
149
+// 	}else{
150
+// 		console.log('设置号码失败-----seimin');
151
+// 	}
152
+// 	console.log('应答:报告坐席电话号码请求结果 '+err);
153
+// }
154
+// function onlogoffreturn(err) //注销请求结果
155
+// {
156
+// 	console.log('应答:注销请求结果 '+err);
157
+// }
158
+
159
+// function onacwreturn(err)
160
+// {
161
+// 	console.log('应答:离席请求结果 '+err);
162
+// }
163
+// function onwcareturn(err)
164
+// {
165
+// 	console.log('应答:复席请求结果 '+err);
166
+// }
167
+// function oncallreturn(err)
168
+// {
169
+// 	console.log('应答:呼叫请求结果 '+err);
170
+// }
171
+function oncancelcallreturn(err) {
172
+    console.log('应答:停止呼叫请求结果 ' + err);
173
+}
174
+// function ontransferreturn(err) {
175
+//     console.log('应答:转移请求结果 ' + err);
176
+// }
177
+function oncanceltransferreturn(err) {
178
+    console.log('应答:停止转移请求结果 ' + err);
179
+}
180
+function onblindtransferreturn(err) {
181
+    console.log('应答:盲转请求结果 ' + err);
182
+}
183
+function ontransfertoivrreturn(err) {
184
+    console.log('应答:转ivr请求结果 ' + err);
185
+}
186
+function ontransfertoivrandwaitreturn(err) {
187
+    console.log('应答:转ivr并等待请求结果 ' + err);
188
+}
189
+function onstartlistenreturn(err) {
190
+    console.log('应答:监听请求结果 ' + err);
191
+}
192
+function onstoplistenreturn(err) {
193
+    console.log('应答:停止监听请求结果 ' + err);
194
+}
195
+function onkillreturn(err) {
196
+    console.log('应答:强制处理请求结果 ' + err);
197
+}
198
+function onforceonhookreturn(err) {
199
+    console.log('应答:强拆坐席请求结果 ' + err);
200
+}
201
+function onintrudereturn(err) {
202
+    console.log('应答:强插请求结果 ' + err);
203
+}
204
+function ongetcallreturn(err,caller,callee,data,crs) {
205
+    console.log('应答:代接请求结果 ' + err+' '+caller);
206
+}
207
+function onanswercallreturn(err) {
208
+    console.log('应答:应答请求结果 ' + err);
209
+}
210
+function ononhookreturn(err) {
211
+    console.log('应答:挂机请求结果 ' + err);
212
+}
213
+function onholdcallreturn(err) {
214
+    console.log('应答:保持请求结果 ' + err);
215
+}
216
+function onswapcallreturn(err) {
217
+    console.log('应答:切换呼叫请求结果 ' + err);
218
+}
219
+function onactivatecallreturn(err) {
220
+    console.log('应答:激活呼叫请求结果 ' + err);
221
+}
222
+function onunholdcallreturn(err) {
223
+    console.log('应答:取回保持呼叫请求结果 ' + err);
224
+}
225
+function onloginotheragentreturn(err) {
226
+    console.log('应答:登录其他坐席请求结果 ' + err);
227
+}
228
+function onsendmessagetoagentreturn(err) {
229
+    console.log('应答:发送消息请求结果 ' + err);
230
+}
231
+function onanswerqueuereturn(err) {
232
+    console.log('应答:应答队列中的外线请求结果 ' + err);
233
+}
234
+function onsubscribestateinforeturn(err){
235
+	console.log('应答:订阅状态变化消息请求结果 ' + err);
236
+}
237
+function onconsulttransferreturn(err){
238
+	console.log('应答:咨询转移请求结果 '+err);
239
+}
240
+
241
+function oncompleteconsulttransferreturn(err){
242
+	console.log('应答:完成咨询转移请求结果 '+err);
243
+}
244
+function ongetnodestatereturn(jso)
245
+{
246
+	console.log('node state 结果 '+JSON.stringify(jso));
247
+}
248
+function ontransfernodereturn(jso)
249
+{
250
+	console.log('transfer node 结果 '+JSON.stringify(jso))
251
+}
252
+function onconferencestartreturn(jso)
253
+{
254
+	console.log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid);
255
+	if(jso.err == 0)
256
+		conferenceid.value=jso.conferenceid;
257
+}
258
+function onconferenceappendmemberreturn(jso)
259
+{
260
+	console.log('添加会议成员 结果 '+JSON.stringify(jso))
261
+}
262
+function onconferencequeryreturn(jso)
263
+{
264
+	console.log('会议状态查询 结果 '+JSON.stringify(jso))
265
+}
266
+function onconferencedismissreturn(jso)
267
+{
268
+	console.log('解散会议 结果 '+JSON.stringify(jso))
269
+}
270
+function onconferencekickoutreturn(jso)
271
+{
272
+	console.log('踢出成员 结果 '+JSON.stringify(jso))
273
+}
274
+function onconferencechangememberstatereturn(jso)
275
+{
276
+	console.log('改变成员状态 结果 '+jso.err)
277
+}
278
+//主动事件回调
279
+// function oncallin(jso) //呼入通知
280
+// {
281
+// 	console.log('事件:呼入通知,相关数据:  '+JSON.stringify(jso));
282
+// }
283
+// function oncallend(jso) //呼叫结束通知
284
+// {
285
+// 	console.log('事件:通话结束' + JSON.stringify(jso));
286
+// }
287
+function onacw()
288
+{
289
+	console.log('事件:你已经进入离席状态');
290
+}
291
+function onwca()
292
+{
293
+	console.log('事件:你已经进入就绪状态');
294
+}
295
+function onlogoff() //被动注销事件(网络中断 / 被踢)
296
+{
297
+    console.log('事件:您已经被注销');
298
+}
299
+// function oncallresult(err)
300
+// {
301
+// 	console.log('事件:呼叫结果 '+JSON.stringify(err));
302
+// }
303
+// function ontransferresult(err) {
304
+//     console.log('事件:转移结果 ' + JSON.stringify(err));
305
+// }
306
+function onconsulttransfercalleeanswer(crs){
307
+	console.log('事件:咨询转移被叫应答 crs=' + crs);
308
+}
309
+function onblindtransferresult(err) {
310
+    console.log('事件:盲转结果 ' + JSON.stringify(err));
311
+}
312
+// function onanswer(err) {
313
+//     console.log('事件:应答'+err);
314
+// }
315
+function onclosed(err) {
316
+    log('事件:与服务器的网络连接中断');
317
+}
318
+function onslaveserverclosed(err)
319
+{
320
+	log('事件:与备用服务器的网络连接中断');
321
+}
322
+function onholdcallreleased(err) {
323
+    log('事件:被保持的对方已挂机');
324
+}
325
+function onkeepcallreleased(err) {
326
+    log('事件:转回ivr并等待的外线已挂机');
327
+}
328
+function oncalleealerting(err) {
329
+    log('事件:呼叫的外线已经开始振铃');
330
+}
331
+function onqueue(crs,caller,callee,data)
332
+{
333
+    console.log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data)
334
+}
335
+function onstatechange()
336
+{
337
+	log('事件:状态变化----------------------------------------------------');
338
+	queryAgentState();
339
+}
340
+function onmystatechange(jso)
341
+{
342
+	log('事件:状态变化----------------------------------------------------');
343
+	log(JSON.stringify(jso));
344
+}
345
+function onquitqueue(crs)
346
+{
347
+    console.log('事件:外线退出队列,crs= '+crs)
348
+}
349
+function onrecvmsg(msg, from) {
350
+    console.log('事件:收到来自'+ from+'的消息:' + msg);
351
+}
352
+function onhookstate(jso) {
353
+    console.log('事件:坐席叉簧状态'+JSON.stringify(jso));
354
+}
355
+function onhardwarefail(err) {
356
+    console.log('事件:keygoe交换机硬件故障');
357
+}
358
+// function onmisscall(err) {
359
+//     console.log('事件:呼损');
360
+// }
361
+//新状态 1-呼叫失败  2-呼叫应答进入会议 3-会议中挂机退出会议
362
+function onconferencememberstate(jso)
363
+{
364
+	console.log('会议成员状态发生变化 ' + JSON.stringify(jso));
365
+}
366
+function onslaveserverfail(jso)
367
+{
368
+	console.log('注意:备用服务器已失联');
369
+}
370
+function onswitchtoslaveserver(jso)
371
+{
372
+	console.log('注意:主服务器故障,已经切换到备用服务器');
373
+}
374
+//事件回调函数结束
375
+
376
+function queryAgentState()
377
+{
378
+	console.log('排队外线数量 '+tlwsa.tlaGetacdlength());
379
+	
380
+	console.log('外线总数量 '+tlwsa.tlaGettrknumber());
381
+	
382
+	var agcount=tlwsa.tlaGetagentcount();
383
+	console.log('登录坐席数量 '+agcount);
384
+	for(var ind=0;ind<agcount;ind++)
385
+	{
386
+		console.log('agnet No. ' + ind + ' workid is '+tlwsa.tlaGetagentwid(ind) + ' state is ' + tlwsa.tlaGetagentstate(ind) + '  '+getStateInfo(tlwsa.tlaGetagentstate(ind) ) )
387
+	}
388
+}
389
+
390
+function getLicenseInfo()
391
+{
392
+	ajo=tlwsa.tlaGetlicenseinfo();
393
+	console.log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno);
394
+	
395
+}
396
+function getStateInfo(state)
397
+{
398
+	switch(state)
399
+	{
400
+		case '0':
401
+		return '未登录';
402
+		case '1':
403
+		return '空闲';
404
+		case '2':
405
+		return '离席';
406
+		case '3':
407
+		return '正在振铃';
408
+		case '4':
409
+		return '播报工号';
410
+		case '5':
411
+		return '通话中';
412
+		case '6':
413
+		return '正在外呼';
414
+		case '7':
415
+		return '正在转移';
416
+		case '8':
417
+		return '正在监听';
418
+	}
419
+}

+ 2 - 1
assets/js/main.js

@@ -14,6 +14,7 @@ var reportIp = protocolName + "//" + domainName + "/service";
14 14
 var inspectIp = protocolName + "//" + domainName + "/service";
15 15
 var imgBaseUrl = protocolName + "//" + domainName;
16 16
 var callIp = protocolName + "//192.168.3.122:29005";
17
+var seiminCallIp = '192.168.3.233';
17 18
 // 信用社
18 19
 // var serverIp = "http://192.168.2.63:80/service"; //跟其他有关
19 20
 // var reportIp = "http://192.168.2.63:80/service"; //跟报表有关
@@ -32,7 +33,7 @@ var callIp = protocolName + "//192.168.3.122:29005";
32 33
 // var callIp = "http://192.168.3.122:29005";
33 34
 app.run(['$rootScope', '$state', '$stateParams', '$auth', '$http', '$cookieStore', 'Restangular', 'api_login',
34 35
     function ($rootScope, $state, $stateParams, $auth, $http, $cookieStore, Restangular, api_login) {
35
-
36
+        $rootScope.seiminCallIp = seiminCallIp;
36 37
         // Attach Fastclick for eliminating the 300ms delay between a physical tap and the firing of a click event on mobile browsers
37 38
         FastClick.attach(document.body);
38 39
 

+ 375 - 0
assets/js/script/TLWSADemo.js

@@ -0,0 +1,375 @@
1
+/**
2
+长沙乐科信息技术有限公司 基于WebSocket的坐席客户端事件范例
3
+1 验证码赋值 这个是向服务端验证身份的 变量名称固定为 authCode 
4
+2 new一个TLWSA对象,每个页面只能有一个实例
5
+3 在页面载入完成后,调用一次 tlwsa的 initTLWSA方法,用于初始化
6
+4 写事件callack函数,并赋值给tlwsa的callback
7
+5 依次调用tlwsa的tlaOpen 方法连接服务器,tlaLogin方法登录,如果是IP坐席,还要调用 tlaSetPhoneNumber方法报告坐席使用的ip话机的电话号码
8
+6 等待呼入,或者调用 tlwsa的 tlaCallagc方法/tlaCall方法呼叫坐席和外线
9
+其他功能的调用方法请参考相关代码
10
+**/
11
+
12
+var authCode="tlwsab"; //验证码,必须与服务端配置的验证码相同,否则不能通过验证,无法登录到服务器
13
+
14
+var tlwsa=new TLWSA(); //生成一个坐席客户端实例 每个页面只能有一个实例
15
+window.onload=function() //必须第一个调用的方法,初始化websocket相关变量
16
+{
17
+	tlwsa.initTLWSA();
18
+}
19
+
20
+//函数调用的应答  注意 是类TLWSA 不是实例tlwsa
21
+TLWSA.onOpenreturn=onopenreturn;
22
+TLWSA.onOpenslaveserverreturn=onopenslaveserverreturn;
23
+
24
+TLWSA.onLoginreturn=onloginreturn;
25
+TLWSA.onMutereturn=onmutereturn;
26
+TLWSA.onUnmutereturn=onunmutereturn;
27
+TLWSA.onSetphonenumberreturn=onsetphonenumberreturn;
28
+TLWSA.onLogoffreturn=onlogoffreturn; //主动注销结果
29
+TLWSA.onAcwreturn=onacwreturn;
30
+TLWSA.onWcareturn=onwcareturn;
31
+
32
+TLWSA.onCallreturn=oncallreturn;
33
+TLWSA.onCancelcallreturn=oncancelcallreturn;
34
+TLWSA.onTransferreturn=ontransferreturn;//调用转移方法之后,返回该事件 如果错误码为0,仅仅表示开始转移,不代表转移目标已经接听或已经拒绝
35
+TLWSA.onCanceltransferreturn=oncanceltransferreturn;
36
+TLWSA.onBlindtransferreturn=onblindtransferreturn;
37
+TLWSA.onTransfertoivrreturn=ontransfertoivrreturn;
38
+TLWSA.onTransfertoivrandwaitreturn=ontransfertoivrandwaitreturn;
39
+TLWSA.onStartlistenreturn=onstartlistenreturn;
40
+TLWSA.onStoplistenreturn=onstoplistenreturn;
41
+TLWSA.onKillreturn=onkillreturn;
42
+TLWSA.onForceonhookreturn=onforceonhookreturn;
43
+TLWSA.onIntrudereturn=onintrudereturn;
44
+TLWSA.onGetcallreturn=ongetcallreturn;
45
+TLWSA.onAnswercallreturn=onanswercallreturn;
46
+TLWSA.onOnhookreturn=ononhookreturn;
47
+TLWSA.onHoldcallreturn=onholdcallreturn;
48
+TLWSA.onSwapcallreturn=onswapcallreturn;
49
+TLWSA.onActivatecallreturn=onactivatecallreturn;
50
+TLWSA.onUnholdcallreturn=onunholdcallreturn;
51
+TLWSA.onLoginotheragentreturn=onloginotheragentreturn;
52
+TLWSA.onSendmessagetoagentreturn=onsendmessagetoagentreturn;
53
+TLWSA.onAnswerqueuereturn=onanswerqueuereturn;
54
+TLWSA.onSubscribestateinforeturn=onsubscribestateinforeturn;
55
+
56
+TLWSA.onConsulttransferreturn=onconsulttransferreturn;
57
+TLWSA.onCompleteconsulttransferreturn=oncompleteconsulttransferreturn;
58
+TLWSA.onGetnodestatereturn=ongetnodestatereturn;
59
+TLWSA.onTransfernodereturn=ontransfernodereturn;
60
+//会议相关
61
+TLWSA.onConferencestartreturn=onconferencestartreturn;
62
+TLWSA.onConferenceappendmemberreturn=onconferenceappendmemberreturn;
63
+TLWSA.onConferencequeryreturn=onconferencequeryreturn;
64
+TLWSA.onConferencedismissreturn=onconferencedismissreturn;
65
+TLWSA.onConferencekickoutreturn=onconferencekickoutreturn;
66
+TLWSA.onConferencechangememberstatereturn=onconferencechangememberstatereturn;
67
+//主动事件
68
+TLWSA.onCallin=oncallin;
69
+TLWSA.onCallend=oncallend;
70
+TLWSA.onAcw=onacw;
71
+TLWSA.onWca = onwca;
72
+TLWSA.onLogoff = onlogoff; //被强制注销事件
73
+TLWSA.onCallresult=oncallresult;
74
+TLWSA.onTransferresult=ontransferresult;
75
+TLWSA.onConsulttransfercalleeanswer=onconsulttransfercalleeanswer;
76
+TLWSA.onBlindtransferresult=onblindtransferresult;
77
+TLWSA.onAnswer=onanswer;
78
+TLWSA.onClosed=onclosed;
79
+TLWSA.onSlaveserverclosed=onslaveserverclosed; //备用服务器网络中断
80
+TLWSA.onHoldcallreleased=onholdcallreleased;
81
+TLWSA.onKeepcallreleased=onkeepcallreleased;
82
+TLWSA.onCalleealerting=oncalleealerting;
83
+TLWSA.onQueue=onqueue;
84
+TLWSA.onQuitqueue=onquitqueue;
85
+TLWSA.onRecvmsg=onrecvmsg;
86
+TLWSA.onHookstate=onhookstate;
87
+TLWSA.onHardwarefail=onhardwarefail;
88
+TLWSA.onMisscall=onmisscall;
89
+TLWSA.onConferencememberstate=onconferencememberstate;
90
+TLWSA.onSlaveserverfail=onslaveserverfail; //备用服务器故障 例如硬件故障或者中继失步
91
+TLWSA.onSwitchtoslaveserver=onswitchtoslaveserver;
92
+TLWSA.onStatechange=onstatechange;
93
+TLWSA.onMyStatechange=onmystatechange;
94
+//应答回调
95
+function onopenreturn(err)
96
+{
97
+	log('应答:连接服务器结果 '+err);
98
+}
99
+function onopenslaveserverreturn(err)
100
+{
101
+	log('应答:连接备用服务器结果 '+err);
102
+}
103
+
104
+function onloginreturn(err) //登录结果
105
+{
106
+	log('应答:登录请求结果 '+err);
107
+}
108
+function onmutereturn(err)
109
+{
110
+	log('应答:静音请求结果 '+err);
111
+}
112
+function onunmutereturn(err)
113
+{
114
+	log('应答:取消静音请求结果 '+err);
115
+}
116
+function onsetphonenumberreturn(err)
117
+{
118
+	log('应答:报告坐席电话号码请求结果 '+err);
119
+}
120
+function onlogoffreturn(err) //注销请求结果
121
+{
122
+	log('应答:注销请求结果 '+err);
123
+}
124
+
125
+function onacwreturn(err)
126
+{
127
+	log('应答:离席请求结果 '+err);
128
+}
129
+function onwcareturn(err)
130
+{
131
+	log('应答:复席请求结果 '+err);
132
+}
133
+function oncallreturn(err)
134
+{
135
+	log('应答:呼叫请求结果 '+err);
136
+}
137
+function oncancelcallreturn(err) {
138
+    log('应答:停止呼叫请求结果 ' + err);
139
+}
140
+function ontransferreturn(err) {
141
+    log('应答:转移请求结果 ' + err);
142
+}
143
+function oncanceltransferreturn(err) {
144
+    log('应答:停止转移请求结果 ' + err);
145
+}
146
+function onblindtransferreturn(err) {
147
+    log('应答:盲转请求结果 ' + err);
148
+}
149
+function ontransfertoivrreturn(err) {
150
+    log('应答:转ivr请求结果 ' + err);
151
+}
152
+function ontransfertoivrandwaitreturn(err) {
153
+    log('应答:转ivr并等待请求结果 ' + err);
154
+}
155
+function onstartlistenreturn(err) {
156
+    log('应答:监听请求结果 ' + err);
157
+}
158
+function onstoplistenreturn(err) {
159
+    log('应答:停止监听请求结果 ' + err);
160
+}
161
+function onkillreturn(err) {
162
+    log('应答:强制处理请求结果 ' + err);
163
+}
164
+function onforceonhookreturn(err) {
165
+    log('应答:强拆坐席请求结果 ' + err);
166
+}
167
+function onintrudereturn(err) {
168
+    log('应答:强插请求结果 ' + err);
169
+}
170
+function ongetcallreturn(err,caller,callee,data,crs) {
171
+    log('应答:代接请求结果 ' + err+' caller:'+caller+' callee:'+callee+' data:'+data+' crs:'+crs);
172
+}
173
+function onanswercallreturn(err) {
174
+    log('应答:应答请求结果 ' + err);
175
+}
176
+function ononhookreturn(err) {
177
+    log('应答:挂机请求结果 ' + err);
178
+}
179
+function onholdcallreturn(err) {
180
+    log('应答:保持请求结果 ' + err);
181
+}
182
+function onswapcallreturn(err) {
183
+    log('应答:切换呼叫请求结果 ' + err);
184
+}
185
+function onactivatecallreturn(err) {
186
+    log('应答:激活呼叫请求结果 ' + err);
187
+}
188
+function onunholdcallreturn(err) {
189
+    log('应答:取回保持呼叫请求结果 ' + err);
190
+}
191
+function onloginotheragentreturn(err) {
192
+    log('应答:登录其他坐席请求结果 ' + err);
193
+}
194
+function onsendmessagetoagentreturn(err) {
195
+    log('应答:发送消息请求结果 ' + err);
196
+}
197
+function onanswerqueuereturn(err) {
198
+    log('应答:应答队列中的外线请求结果 ' + err);
199
+}
200
+function onsubscribestateinforeturn(err){
201
+	log('应答:订阅状态变化消息请求结果 ' + err);
202
+}
203
+function onconsulttransferreturn(err){
204
+	log('应答:咨询转移请求结果 '+err);
205
+}
206
+
207
+function oncompleteconsulttransferreturn(err){
208
+	log('应答:完成咨询转移请求结果 '+err);
209
+}
210
+function ongetnodestatereturn(jso)
211
+{
212
+	log('node state 结果 '+JSON.stringify(jso));
213
+}
214
+function ontransfernodereturn(jso)
215
+{
216
+	log('transfer node 结果 '+JSON.stringify(jso))
217
+}
218
+function onconferencestartreturn(jso)
219
+{
220
+	log('启动会议 结果 '+jso.err+' 会议ID='+jso.conferenceid+'   json:'+JSON.stringify(jso));
221
+	if(jso.err == 0)
222
+		conferenceid.value=jso.conferenceid;
223
+}
224
+function onconferenceappendmemberreturn(jso)
225
+{
226
+	log('添加会议成员 结果 '+JSON.stringify(jso))
227
+}
228
+function onconferencequeryreturn(jso)
229
+{
230
+	log('会议状态查询 结果 '+JSON.stringify(jso))
231
+}
232
+function onconferencedismissreturn(jso)
233
+{
234
+	log('解散会议 结果 '+JSON.stringify(jso))
235
+}
236
+function onconferencekickoutreturn(jso)
237
+{
238
+	log('踢出成员 结果 '+JSON.stringify(jso))
239
+}
240
+function onconferencechangememberstatereturn(jso)
241
+{
242
+	log('改变成员状态 结果 '+jso.err+'   json:'+JSON.stringify(jso))
243
+}
244
+//主动事件回调
245
+function oncallin(jso) //呼入通知
246
+{
247
+	log('事件:呼入通知,主被叫和用户数据是:  '+jso.caller +'  ' +jso.callee+' '+jso.data+JSON.stringify(jso));
248
+}
249
+function oncallend() //呼叫结束通知
250
+{
251
+	log('事件:通话结束');
252
+}
253
+function onacw()
254
+{
255
+	log('事件:你已经进入离席状态');
256
+}
257
+function onwca()
258
+{
259
+	log('事件:你已经进入就绪状态');
260
+}
261
+function onlogoff() //被动注销事件(网络中断 / 被踢)
262
+{
263
+    log('事件:您已经被注销');
264
+}
265
+function oncallresult(err)
266
+{
267
+	log('事件:呼叫结果 '+JSON.stringify(err));
268
+}
269
+function ontransferresult(err) {
270
+    log('事件:转移结果 ' + err);
271
+}
272
+function onconsulttransfercalleeanswer(crs){
273
+	log('事件:咨询转移被叫应答 crs=' + crs);
274
+}
275
+function onblindtransferresult(err) {
276
+    log('事件:盲转结果 ' + err);
277
+}
278
+function onanswer(err) {
279
+    log('事件:应答' + err);
280
+}
281
+function onclosed(err) {
282
+    log('事件:与服务器的网络连接中断'+err);
283
+}
284
+function onslaveserverclosed(err)
285
+{
286
+	log('事件:与备用服务器的网络连接中断'+err);
287
+}
288
+function onholdcallreleased(err) {
289
+    log('事件:被保持的对方已挂机'+err);
290
+}
291
+function onkeepcallreleased(err) {
292
+    log('事件:转回ivr并等待的外线已挂机'+err);
293
+}
294
+function oncalleealerting(err) {
295
+    log('事件:呼叫的外线已经开始振铃'+err);
296
+}
297
+function onqueue(crs,caller,callee,data)
298
+{
299
+    log('事件:外线进入队列,crs,caller,callee,data= '+crs+' '+caller+' '+callee+' '+data)
300
+}
301
+function onquitqueue(crs)
302
+{
303
+    log('事件:外线退出队列,crs= '+crs)
304
+}
305
+function onrecvmsg(msg, from) {
306
+    log('事件:收到来自'+ from+'的消息:' + msg);
307
+}
308
+function onhookstate(hookstate, hktime) {
309
+    log('事件:坐席叉簧状态'+hookstate+'时间'+hktime);
310
+}
311
+function onhardwarefail(err) {
312
+    log('事件:keygoe交换机硬件故障'+err);
313
+}
314
+function onmisscall(err) {
315
+    log('事件:呼损'+err);
316
+}
317
+//新状态 1-呼叫失败  2-呼叫应答进入会议 3-会议中挂机退出会议
318
+function onconferencememberstate(jso)
319
+{
320
+	log('会议成员状态发生变化 ' + JSON.stringify(jso));
321
+}
322
+function onslaveserverfail(jso)
323
+{
324
+	log('注意:备用服务器已失联'+'   json:'+JSON.stringify(jso));
325
+}
326
+function onswitchtoslaveserver(jso)
327
+{
328
+	log('注意:主服务器故障,已经切换到备用服务器'+jso);
329
+}
330
+//事件回调函数结束
331
+
332
+function queryAgentState()
333
+{
334
+	log('排队外线数量 '+tlwsa.tlaGetacdlength());
335
+	
336
+	log('外线总数量 '+tlwsa.tlaGettrknumber());
337
+	
338
+	var agcount=tlwsa.tlaGetagentcount();
339
+	log('登录坐席数量 '+agcount);
340
+	for(var ind=0;ind<agcount;ind++)
341
+	{
342
+		log('agnet No. ' + ind + ' workid is '+tlwsa.tlaGetagentwid(ind) + ' state is ' + tlwsa.tlaGetagentstate(ind) + '  '+getStateInfo(tlwsa.tlaGetagentstate(ind) ) )
343
+	}
344
+}
345
+
346
+function getLicenseInfo()
347
+{
348
+	ajo=tlwsa.tlaGetlicenseinfo();
349
+	log('授权有效期 '+ajo.validdate+' 授权线数 '+ajo.lines+' 卡号 '+ajo.cardno+JSON.stringify(ajo));
350
+	
351
+}
352
+function getStateInfo(state)
353
+{
354
+	switch(state)
355
+	{
356
+		case '0':
357
+		return '未登录';
358
+		case '1':
359
+		return '空闲';
360
+		case '2':
361
+		return '离席';
362
+		case '3':
363
+		return '正在振铃';
364
+		case '4':
365
+		return '播报工号';
366
+		case '5':
367
+		return '通话中';
368
+		case '6':
369
+		return '正在外呼';
370
+		case '7':
371
+		return '正在转移';
372
+		case '8':
373
+		return '正在监听';
374
+	}
375
+}

Plik diff jest za duży
+ 1473 - 0
assets/js/script/TLWebSocketAgent.js


+ 2 - 1
assets/views/app.html

@@ -23,5 +23,6 @@
23 23
 <!-- footer -->
24 24
 <footer data-ng-include=" 'assets/views/partials/footer.html' " ng-mouseup="returnRemoveClass()"></footer>
25 25
 <!-- / footer -->
26
-<div ng-mouseup="returnRemoveClass()" data-ng-include=" 'assets/views/partials/off-sidebar.html' " id="off-sidebar" class="sidebar" toggleable parent-active-class="app-offsidebar-open"></div>
26
+<div ng-if="seiminHj === 1" ng-mouseup="returnRemoveClass()" data-ng-include=" 'assets/views/partials/off-sidebar1.html' " id="off-sidebar" class="sidebar" toggleable parent-active-class="app-offsidebar-open"></div>
27
+<div ng-if="seiminHj === 2" ng-mouseup="returnRemoveClass()" data-ng-include=" 'assets/views/partials/off-sidebar2.html' " id="off-sidebar" class="sidebar" toggleable parent-active-class="app-offsidebar-open"></div>
27 28
 <!-- <div data-ng-include=" 'assets/views/partials/settings.html' " toggleable class="settings panel panel-default hidden-xs hidden-sm" id="settings"></div> -->

+ 1 - 1
assets/views/incident/list.html

@@ -169,7 +169,7 @@
169 169
                             <multi-select-tree class="pull-right selectzise wt_width1 wt_width3"
170 170
                                 ng-model="cifilter_classic" data-input-model="select_treedata"
171 171
                                 data-output-model="cifilter_classics" theme="bootstrap" multi-select="false"
172
-                                data-callback="onFilterCallback(item)" data-select-only-leafs="true"
172
+                                data-callback="onFilterCallback(item)" data-select-only-leafs="false"
173 173
                                 reset-search-input="false" data-trans-label="category" data-switch-view="false">
174 174
                             </multi-select-tree>
175 175
                         </div>

assets/views/partials/off-sidebar.html → assets/views/partials/off-sidebar1.html


+ 251 - 0
assets/views/partials/off-sidebar2.html

@@ -0,0 +1,251 @@
1
+<!-- start: OFF RIGHT SIDEBAR TABSET -->
2
+<tabset class="sidebar-wrapper" justified="true">
3
+  <tab>
4
+    <tab-heading>
5
+      <i class="fa fa-phone"></i>
6
+    </tab-heading>
7
+    <div class="tab-pane" id="getup">
8
+      <div class="users-list fontsizes-14">
9
+        <div style="padding: 0 15px;" class="col-xs-12" ng-if="jry_state!='weiqianru'&&jry_state!='laidian'&&jry_state!='tonghuazhong'">
10
+          <input type="button" ng-if="jry_state=='shixian'" style="margin-left: 8px;" value="示忙" ng-click="jry_shimang()" class="jry_btn">
11
+          <input type="button" ng-if="jry_state=='shimang'" style="margin-left: 8px;" value="示闲" ng-click="jry_shixian()" class="jry_btn">
12
+        </div>
13
+        <div ng-if="jry_state=='weiqianru'" class="row form-group fontcolor-two" style="margin-top:30px" id="updata">
14
+          <div class="col-xs-12 fontsizes-14">
15
+            <div class="col-xs-12">
16
+              <div class="control-label" for="title">
17
+                绑定分机:
18
+              </div>
19
+              <ui-select class="col-xs-12 margin-top-8" ng-model="jry_extnNumberObj.jry_extnNumber" theme="bootstrap" ng-change="changeWorkId()">
20
+                <ui-select-match placeholder="">
21
+                  {{$select.selected.name}}
22
+                </ui-select-match>
23
+                <ui-select-choices repeat="item in jry_extnNumberSelect">
24
+                  <div ng-bind-html="item.name"></div>
25
+                </ui-select-choices>
26
+              </ui-select>
27
+            </div>
28
+            <div class="col-xs-12">
29
+              <input type="button" value="签入" ng-click="jry_qianru()" class="jry_btn">
30
+            </div>
31
+          </div>
32
+        </div>
33
+        <div class="row form-group fontcolor-two" style="margin-top:30px" id="dialout"
34
+          ng-if="jry_state!='tonghuazhong'&&jry_state!='weiqianru'">
35
+          <div class="col-xs-12 fontsizes-14">
36
+            <div class="col-xs-12">
37
+              <div>
38
+                <div class="control-label" for="title">
39
+                  目的号码:
40
+                </div>
41
+                <div class="">
42
+                  <ui-select class="col-xs-12 margin-top-8" ng-model="jry_extnNumberObj.tel1" theme="bootstrap" ng-change="changeWorkId()">
43
+                    <ui-select-match placeholder="">
44
+                      {{$select.selected.name}}
45
+                    </ui-select-match>
46
+                    <ui-select-choices repeat="item in jry_extnNumberSelect">
47
+                      <div ng-bind-html="item.name"></div>
48
+                    </ui-select-choices>
49
+                  </ui-select>
50
+                </div>
51
+              </div>
52
+            </div>
53
+            <div class="col-xs-12">
54
+              <input type="button" style="margin-left:8px;" value="呼叫" ng-click="tlaCallagc()"
55
+                ng-if="jry_state!='laidian'" class="jry_btn">
56
+              <input type="button" style="margin-left:8px;" value="签出" ng-click="jry_qianchu()" class="jry_btn">
57
+            </div>
58
+          </div>
59
+        </div>
60
+        <div class="row form-group fontcolor-two" style="margin-top:30px" ng-if="jry_state=='tonghuazhong'">
61
+          <div class="col-xs-12 fontsizes-14">
62
+            <div class="col-xs-12">
63
+              <div class="control-label" for="title" style="padding-right:0px">
64
+                转接号码:
65
+              </div>
66
+              <div class="">
67
+                <ui-select class="col-xs-12 margin-top-8" ng-model="jry_extnNumberObj.tel2" theme="bootstrap"
68
+                  ng-change="changeWorkId()">
69
+                  <ui-select-match placeholder="">
70
+                    {{$select.selected.name}}
71
+                  </ui-select-match>
72
+                  <ui-select-choices repeat="item in jry_extnNumberSelect">
73
+                    <div ng-bind-html="item.name"></div>
74
+                  </ui-select-choices>
75
+                </ui-select>
76
+              </div>
77
+            </div>
78
+            <div class="col-xs-12">
79
+              <input type="button" style="margin-left:8px;" value="转接" ng-click="tlaTransfertoagc()" class="jry_btn">
80
+              <input type="button" style="margin-left:8px;" value="签出" ng-click="jry_qianchu()" class="jry_btn">
81
+            </div>
82
+          </div>
83
+        </div>
84
+      </div>
85
+    </div>
86
+  </tab>
87
+</tabset>
88
+<!-- <div class="jry_flex">
89
+    <div class="phone_call">
90
+        <div class="tit">请选择坐席号:</div>
91
+        <ui-select class="col-xs-12 margin-top-8" ng-model="jry_extnNumberObj.jry_extnNumber"
92
+            theme="bootstrap" ng-change="changeWorkId()">
93
+            <ui-select-match placeholder="">
94
+                {{$select.selected.name}}
95
+            </ui-select-match>
96
+            <ui-select-choices repeat="item in jry_extnNumberSelect">
97
+                <div ng-bind-html="item.name"></div>
98
+            </ui-select-choices>
99
+        </ui-select>
100
+        <div>
101
+            <input type="button" value="签入" ng-click="jry_qianru()" ng-if="jry_state=='weiqianru'" class="jry_btn">
102
+            <input type="button" value="签出" ng-click="jry_qianchu()" ng-if="jry_state!='weiqianru'" class="jry_btn">
103
+        </div>
104
+    </div>
105
+</div> -->
106
+<style>
107
+  .jry_btn {
108
+    width: 60px;
109
+    height: 28px;
110
+    background-color: #00437A;
111
+    color: white;
112
+    font-size: 14px;
113
+    border: 0;
114
+    border-radius: 4px;
115
+    margin-top: 8px;
116
+    float: right;
117
+    font-weight: bold
118
+  }
119
+
120
+  .jry_btn:focus {
121
+    background-color: #00437A !important;
122
+  }
123
+
124
+  .jry_flex {
125
+    display: flex;
126
+    flex-direction: column;
127
+    height: 100%;
128
+  }
129
+
130
+  .jry_phoneIpt {
131
+    width: 100%;
132
+    margin-top: 5px;
133
+  }
134
+
135
+  .jry_phoneBtn {
136
+    margin-left: 3px
137
+  }
138
+
139
+  .phone_call {
140
+    padding: 16px;
141
+    /* background-color: white */
142
+  }
143
+
144
+  .phone_call .tit {
145
+    height: 26px;
146
+    line-height: 26px;
147
+    font-size: 14px
148
+  }
149
+
150
+  .phone_call .phone_ipt {
151
+    height: 30px;
152
+    border: 1px rgb(209, 209, 203) solid;
153
+    margin-top: 5px
154
+  }
155
+
156
+  .phone_call .phone_ipt .ipt {
157
+    width: 190px;
158
+    float: left;
159
+    padding-left: 5px;
160
+    height: 27px;
161
+    border: 0;
162
+    font-size: 13px
163
+  }
164
+
165
+  .phone_call .phone_ipt .phone_ico {
166
+    float: left;
167
+    width: 35px;
168
+    height: 29px;
169
+    line-height: 29px;
170
+    text-align: center;
171
+    border-left: 1px rgb(209, 209, 203) solid;
172
+    cursor: pointer;
173
+  }
174
+
175
+  .phone_call .phone_ipt .phone_ico i {
176
+    color: blue;
177
+    font-size: 18px;
178
+  }
179
+
180
+  .phone_call .phone_ipt .ipt:focus {
181
+    outline: none
182
+  }
183
+
184
+  .unanswered_tit {
185
+    height: 34px;
186
+    background-color: rgb(243, 243, 243);
187
+    line-height: 34px;
188
+    font-size: 14px;
189
+    padding-left: 16px
190
+  }
191
+
192
+  .unanswered_list {
193
+    height: 100%;
194
+    background-color: white;
195
+    overflow-y: scroll
196
+  }
197
+
198
+  .unanswered_list .unanswered_phone {}
199
+
200
+  .unanswered_list .unanswered_phone .unanswered_phone_msg {
201
+    display: flex;
202
+    padding: 16px;
203
+    align-items: center
204
+  }
205
+
206
+  .unanswered_list .unanswered_phone .unanswered_phone_msg div:nth-child(1) {
207
+    width: 60%
208
+  }
209
+
210
+  .unanswered_list .unanswered_phone .unanswered_phone_msg div:nth-child(1) span {
211
+    color: red
212
+  }
213
+
214
+  .unanswered_list .unanswered_phone .unanswered_phone_msg div:nth-child(2) {
215
+    font-size: 12px;
216
+    color: rgb(164, 164, 164)
217
+  }
218
+
219
+  .unanswered_list .unanswered_phone .unanswered_fot_ipt {
220
+    height: 34px;
221
+    border-top: 1px rgb(243, 243, 243) solid;
222
+    border-bottom: 1px rgb(243, 243, 243) solid;
223
+  }
224
+
225
+  .unanswered_list .unanswered_phone .unanswered_fot_ipt div:nth-child(1) {
226
+    height: 34px;
227
+    line-height: 34px;
228
+    background-color: #f9f9f9;
229
+    color: #005395;
230
+    font-size: 14px;
231
+    width: 49%;
232
+    float: left;
233
+    text-align: center;
234
+    cursor: pointer;
235
+  }
236
+
237
+  .unanswered_list .unanswered_phone .unanswered_fot_ipt div:nth-child(2) {
238
+    height: 34px;
239
+    line-height: 34px;
240
+    font-size: 14px;
241
+    width: 49%;
242
+    border-left: 1px rgb(243, 243, 243) solid;
243
+    float: left;
244
+    text-align: center;
245
+    cursor: pointer;
246
+  }
247
+
248
+  .unanswered_list::-webkit-scrollbar {
249
+    display: none
250
+  }
251
+</style>

+ 4 - 1
index.html

@@ -108,8 +108,11 @@
108 108
 
109 109
     <script src="assets/js/config.constant.js"></script>
110 110
     <script src="assets/js/config.router.js"></script>
111
+    <!-- 呼叫中心2 -->
112
+    <script src="assets/js/script/TLWebSocketAgent.js"></script>
113
+    <!-- <script src="assets/js/script/TLWSADemo.js"></script> -->
114
+    <script ng-src="{{'assets/js/directives/ola_api'+seiminHj+'.js'}}"></script>
111 115
     <!-- Clip-Two Directives -->
112
-    <script src="assets/js/directives/ola_api.js"></script>
113 116
     <script src="assets/js/directives/toggle.js"></script>
114 117
     <script src="assets/js/directives/perfect-scrollbar.js"></script>
115 118
     <script src="assets/js/directives/empty-links.js"></script>