Browse Source

华科开始-报表迁移-认证计费

seimin 2 years ago
parent
commit
f6862c9bf4

+ 8 - 3
assets/css/login.css

@@ -97,17 +97,22 @@
97 97
     height: 120px;
98 98
     position:absolute; 
99 99
     left:50%; 
100
-    margin-left:-70px;
100
+    transform:translateX(-50%);
101 101
     top: 120px;
102 102
 }
103
+.codrops-header .logo.logo_hk{
104
+    width: auto;
105
+    height: 50px;
106
+    top: 180px;
107
+}
103 108
 .codrops-header h1{
104 109
     color: #fff;
105 110
     font-size: 24px;
106 111
     font-weight: normal;
107 112
     position:absolute; 
108 113
     left:50%; 
109
-    margin-left:-115px;
110
-    top: 260px
114
+    top: 260px;
115
+    transform:translateX(-50%);
111 116
 }
112 117
 .codrops-header .map{
113 118
     width: 800px;

+ 1 - 1
assets/css/styles.css

@@ -6232,7 +6232,7 @@ ul.sub-menu li ul.sub-menu li ul.sub-menu li a {
6232 6232
     width: 100% !important;
6233 6233
     display: inline-block;
6234 6234
     height: 100%;
6235
-    overflow-y: scroll;
6235
+    overflow-y: auto;
6236 6236
 }
6237 6237
 
6238 6238
 .main-content>.container {

assets/images/login/logo.png → assets/images/login/logo_default.png


BIN
assets/images/login/logo_hk.png


BIN
assets/images/login/logo_hk2.png


assets/images/login/logo--.png → assets/images/login/logo_zncd.png


+ 6 - 0
assets/js/config.constant.js

@@ -98,6 +98,12 @@ app.constant('JS_REQUIRES', {
98 98
         'meansformCtrl': 'assets/js/controllers/means/meansformCtrl.js',
99 99
         'cmdbformCtrl': 'assets/js/controllers/means/cmdbformCtrl.js',
100 100
         //报表
101
+        'reportefficiencyCtrl': 'assets/js/controllers/report/efficiency.js',
102
+        'reportcatergryCtrl': 'assets/js/controllers/report/catergry.js',
103
+        'reportsuorceCtrl': 'assets/js/controllers/report/suorce.js',
104
+        'reporthandlegroupCtrl': 'assets/js/controllers/report/handlegroup.js',
105
+        'reporthandlepeopleCtrl': 'assets/js/controllers/report/handlepeople.js',
106
+        'reportanalysisCtrl': 'assets/js/controllers/report/analysis.js',
101 107
         'reportCtrl': 'assets/js/controllers/report/reportCtrl.js',
102 108
         'chargingCtrl': 'assets/js/controllers/report/chargingCtrl.js',
103 109
         'deck_reportCtrl': 'assets/js/controllers/report/deck_reportCtrl.js',//服务台报表

+ 48 - 0
assets/js/config.router.js

@@ -774,6 +774,54 @@ app.config(['$authProvider', '$httpProvider', '$stateProvider', '$urlRouterProvi
774 774
                 ncyBreadcrumb: {
775 775
                     label: 'Report View'
776 776
                 }
777
+            }).state('app.report.analysis', {
778
+                url: '/analysis',
779
+                templateUrl: "assets/views/report/analysis.html",
780
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'spin', 'ladda', 'angular-ladda', 'moment', 'reportanalysisCtrl'),
781
+                title: 'report.LISTDesc',
782
+                ncyBreadcrumb: {
783
+                    label: 'Report View'
784
+                }
785
+            }).state('app.report.handlepeople', {
786
+                url: '/handlepeople',
787
+                templateUrl: "assets/views/report/handlepeople.html",
788
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'spin', 'ladda', 'angular-ladda', 'moment', 'reporthandlepeopleCtrl'),
789
+                title: 'report.LISTDesc',
790
+                ncyBreadcrumb: {
791
+                    label: 'Report View'
792
+                }
793
+            }).state('app.report.handlegroup', {
794
+                url: '/handlegroup',
795
+                templateUrl: "assets/views/report/handlegroup.html",
796
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'spin', 'ladda', 'angular-ladda', 'moment', 'reporthandlegroupCtrl'),
797
+                title: 'report.LISTDesc',
798
+                ncyBreadcrumb: {
799
+                    label: 'Report View'
800
+                }
801
+            }).state('app.report.suorce', {
802
+                url: '/suorce',
803
+                templateUrl: "assets/views/report/suorce.html",
804
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'spin', 'ladda', 'angular-ladda', 'moment', 'reportsuorceCtrl'),
805
+                title: 'report.LISTDesc',
806
+                ncyBreadcrumb: {
807
+                    label: 'Report View'
808
+                }
809
+            }).state('app.report.catergry', {
810
+                url: '/catergry',
811
+                templateUrl: "assets/views/report/catergry.html",
812
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'spin', 'ladda', 'angular-ladda', 'moment', 'reportcatergryCtrl'),
813
+                title: 'report.LISTDesc',
814
+                ncyBreadcrumb: {
815
+                    label: 'Report View'
816
+                }
817
+            }).state('app.report.efficiency', {
818
+                url: '/efficiency',
819
+                templateUrl: "assets/views/report/efficiency.html",
820
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'spin', 'ladda', 'angular-ladda', 'moment', 'reportefficiencyCtrl'),
821
+                title: 'report.LISTDesc',
822
+                ncyBreadcrumb: {
823
+                    label: 'Report View'
824
+                }
777 825
             }).state('app.report.nxreport', {
778 826
                 url: '/nxreport',
779 827
                 templateUrl: "assets/views/report/nxreport.html",

+ 56 - 2
assets/js/controllers/customform/customformCtrl.js

@@ -9097,6 +9097,7 @@ appFormly.config(function config(formlyConfigProvider) {
9097 9097
       "$aside",
9098 9098
       "api_zsk",
9099 9099
       "api_bpm_domain",
9100
+      "api_webservice1",
9100 9101
       function (
9101 9102
         $scope,
9102 9103
         $rootScope,
@@ -9106,7 +9107,8 @@ appFormly.config(function config(formlyConfigProvider) {
9106 9107
         api_solution,
9107 9108
         $aside,
9108 9109
         api_zsk,
9109
-        api_bpm_domain
9110
+        api_bpm_domain,
9111
+        api_webservice1
9110 9112
       ) {
9111 9113
         console.log($scope);
9112 9114
         $scope.selection = {
@@ -9115,7 +9117,58 @@ appFormly.config(function config(formlyConfigProvider) {
9115 9117
         //认证计费数据获取
9116 9118
         $scope.sumInfo = {};
9117 9119
         function getSumInfo() {
9118
-          api_bpm_data
9120
+          if($rootScope.isHk){
9121
+            //用户信息
9122
+            api_webservice1.fetchDataList("queryUser", { "userId": $scope.model.incident.account }).then(function(response) {
9123
+                // if (response.status == 200) {
9124
+                if (response && response.data) {
9125
+                    angular.extend($scope.sumInfo, response.data[0]);
9126
+                    // $scope.sumInfo = response.data[0];
9127
+                    $scope.sumInfo.autologicDestroyTime = moment(response.data[0].autologicDestroyTime).format('YYYY-MM-DD');
9128
+                    $scope.sumInfo.periodStartTime = moment(response.data[0].periodStartTime).format('YYYY-MM-DD');
9129
+                    $scope.sumInfo.nextBillingTime = moment(response.data[0].nextBillingTime).format('YYYY-MM-DD');
9130
+                } else if (response.err) {
9131
+                    SweetAlert.swal("系统错误!", "用户信息未取到,请刷新重试", "error");
9132
+                }
9133
+                // }
9134
+            })
9135
+            //上网明细
9136
+            api_webservice1.fetchDataList("queryOnlineDetail", { "userId": $scope.model.incident.account, "limit": "10", "fromLoginTime": moment(new Date().getTime() - 86400000 * 6).format('YYYY-MM-DD HH:mm:ss'), "toLogoutTime": moment(new Date().getTime()).format('YYYY-MM-DD HH:mm:ss') }).then(function(response) {
9137
+                // if (response.status == 200) {
9138
+                if (response && response.data) {
9139
+                    angular.forEach(response.data, function(item, index) {
9140
+                        if (item.logoutTime) {
9141
+                            response.data[index].logoutTime = moment(item.logoutTime).format('YYYY-MM-DD HH:mm:ss');
9142
+                        }
9143
+                        if (item.loginTime) {
9144
+                            response.data[index].loginTime = moment(item.loginTime).format('YYYY-MM-DD HH:mm:ss');
9145
+                        }
9146
+                    })
9147
+                    $scope.logininform_sumInfo = response.data;
9148
+                } else if (response.err) {
9149
+                    SweetAlert.swal("上网明细未取到", "该用户暂无上网明细", "error");
9150
+                }
9151
+            })
9152
+            //黑名单
9153
+            // $scope.sumInfo.blacklist = "否"
9154
+            api_webservice1.fetchDataList("queryInhibit", { "userId": $scope.model.incident.account }).then(function(response) {
9155
+                // if (response.status == 200) {
9156
+                // $scope.loginsumInfo = response.data;
9157
+                if (response) {
9158
+                    if (response.data || response.data != null) {
9159
+                        $scope.sumInfo.blacklist = "是"
9160
+                    } else {
9161
+                        if (response.err) {
9162
+                            // SweetAlert.swal("系统错误!", "黑名单未取到,请刷新重试", "error");
9163
+                        } else {
9164
+                            $scope.sumInfo.blacklist = "否"
9165
+                        }
9166
+                    }
9167
+                }
9168
+                // }
9169
+            })
9170
+          }else{
9171
+            api_bpm_data
9119 9172
             .sumInfo($scope.model.incident.account)
9120 9173
             .then(function (data) {
9121 9174
               console.log(data);
@@ -9123,6 +9176,7 @@ appFormly.config(function config(formlyConfigProvider) {
9123 9176
                 $scope.sumInfo = data.data || {};
9124 9177
               }
9125 9178
             });
9179
+          }
9126 9180
         }
9127 9181
         getSumInfo();
9128 9182
         // 收起重复事件侧滑框

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

@@ -6,6 +6,9 @@ app.controller('LoginCtrl', ['$rootScope', '$scope', '$state', '$translate', '$l
6 6
         //因项目众多,前端为了加以区分,所以用域名加以判断,后期有更好的方式可以自行修改
7 7
         // 中南财大
8 8
         $rootScope.isZncd = document.domain === 'itsm.zuel.edu.cn';
9
+        // 华科
10
+        // $rootScope.isHk = document.domain === '192.168.3.110';
11
+        $rootScope.isHk = document.domain === 'localhost';
9 12
         //判断项目归属 end
10 13
         // 是否单点登录
11 14
         $scope.isSSo = location.search.length > 0;

+ 313 - 0
assets/js/controllers/report/analysis.js

@@ -0,0 +1,313 @@
1
+'use strict';
2
+app.controller('reportanalysisCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", "api_user_data", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport, api_user_data) {
3
+    var ROWS = "ROWS";
4
+    var COLUMNS = "COLUMNS";
5
+    $scope.treeshow = true;
6
+    $scope.searchstate = "";
7
+    $scope.headers = "请选择事件树形列表!";
8
+    var workspace = {};
9
+    $scope.parameters = {};
10
+    $scope.starttimes = {};
11
+    $scope.endtimes = {};
12
+    $scope.category = {};
13
+    $scope.reportName = "报表";
14
+    $scope.allheight = 100;
15
+    $scope.isMaskground = false;
16
+    $scope.yeardata = "year";
17
+    $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近3年', value: 1 }, { name: '近5年', value: 2 }, { name: '近10年', value: 3 }, { name: '近20年', value: 4 }];
18
+
19
+    function startdata() {
20
+        $scope.searchkeys = { 'area': {}, 'quikly': { name: '近5年', value: 2 } };
21
+        $scope.starttimes = moment((new Date()).setFullYear((new Date()).getFullYear() - 4)).format("YYYY-MM-DD");
22
+        $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
23
+        $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
24
+        $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
25
+    }
26
+    startdata();
27
+    $scope.changeForm = function(paramDateFrom) {
28
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
29
+        $scope.starttimes = moment(paramDateFrom).format('YYYY-MM--DD');
30
+    }
31
+    $scope.changeTo = function(paramDateTo) {
32
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
33
+        $scope.endtimes = moment(paramDateTo).format('YYYY-MM-DD');
34
+    }
35
+
36
+
37
+    $scope.open = function($event) {
38
+        $event.preventDefault();
39
+        $event.stopPropagation();
40
+
41
+        $scope.opened = !$scope.opened;
42
+    };
43
+    $scope.endOpen = function($event) {
44
+        $event.preventDefault();
45
+        $event.stopPropagation();
46
+        $scope.startOpened = false;
47
+        $scope.endOpened = !$scope.endOpened;
48
+    };
49
+    $scope.startOpen = function($event) {
50
+        $event.preventDefault();
51
+        $event.stopPropagation();
52
+        $scope.endOpened = false;
53
+        $scope.startOpened = !$scope.startOpened;
54
+    };
55
+
56
+    function ConvertDateParameter(parameters) {
57
+        var result = undefined;
58
+        if (angular.isArray(parameters)) {
59
+            // 
60
+        } else {
61
+            result = {};
62
+            for (var k in parameters) {
63
+                if (k.indexOf("Date") > 0) {
64
+                    if (angular.isDate(parameters[k])) {
65
+                        result[k] = moment(parameters[k]).format("YYYY-MM-DD");
66
+                    } else if (angular.isString(parameters[k])) {
67
+                        result[k] = parameters[k];
68
+                    }
69
+                }
70
+            }
71
+        }
72
+        return result;
73
+    }
74
+    $scope.restData = function() {
75
+        startdata();
76
+        $scope.mdxquery();
77
+    }
78
+    $scope.mdxquery = function(key) {
79
+        var changedate = ConvertDateParameter($scope.parameters)
80
+        var fildata = { "start": moment(changedate.paramDateFrom).format("YYYY"), "end": moment(changedate.paramDateTo).format("YYYY") }
81
+        if (key && key.area && key.area.id) {
82
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY"), "end": moment(changedate.paramDateTo).format("YYYY"), "areaId": key.area.id }
83
+        } else {
84
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY"), "end": moment(changedate.paramDateTo).format("YYYY") }
85
+        }
86
+        getdata(fildata)
87
+    }
88
+    $scope.onChangetime = function(key) {
89
+        if (key.value == 1) {
90
+            $scope.starttimes = moment((new Date(moment().startOf('year'))).setFullYear((new Date()).getFullYear() - 2)).format('YYYY-MM-DD');
91
+            $scope.endtimes = moment().format('YYYY-MM-DD');;
92
+            $scope.parameters.paramDateFrom = $scope.starttimes;
93
+            $scope.parameters.paramDateTo = $scope.endtimes;
94
+        } else if (key.value == 2) {
95
+            $scope.starttimes = moment((new Date(moment().startOf('year'))).setFullYear((new Date()).getFullYear() - 4)).format('YYYY-MM-DD');
96
+            $scope.endtimes = moment().format('YYYY-MM-DD');;
97
+            $scope.parameters.paramDateFrom = $scope.starttimes;
98
+            $scope.parameters.paramDateTo = $scope.endtimes;
99
+        } else if (key.value == 3) {
100
+            $scope.starttimes = moment((new Date(moment().startOf('year'))).setFullYear((new Date()).getFullYear() - 9)).format('YYYY-MM-DD');
101
+            $scope.endtimes = moment().format('YYYY-MM-DD');;
102
+            $scope.parameters.paramDateFrom = $scope.starttimes;
103
+            $scope.parameters.paramDateTo = $scope.endtimes;
104
+        } else if (key.value == 4) {
105
+            $scope.starttimes = moment((new Date(moment().startOf('year'))).setFullYear((new Date()).getFullYear() - 19)).format('YYYY-MM-DD');
106
+            $scope.endtimes = moment().format('YYYY-MM-DD');;
107
+            $scope.parameters.paramDateFrom = $scope.starttimes;
108
+            $scope.parameters.paramDateTo = $scope.endtimes;
109
+        }
110
+    }
111
+    $scope.execute = function() {
112
+        api_report.list($scope.token).then(function(response) {
113
+            $scope.select_treedata = $scope.my_data = response;
114
+        });
115
+    }
116
+
117
+    $scope.searchOptions = function() {
118
+            if (angular.isDefined(workspace.query)) {
119
+                var queryParameters = workspace.query.parameters;
120
+                for (var parm in queryParameters) {
121
+                    if (parm == 'Week') {
122
+
123
+                    } else {
124
+
125
+                    }
126
+                }
127
+            }
128
+        }
129
+        //区域
130
+    $scope.outarea = [];
131
+    api_user_data.fetchDataList('area', { "idx": 0, "sum": 1000 }).then(function(response) {
132
+            if (response) {
133
+                if (response.status = 200) {
134
+                    $scope.outarea = response.list;
135
+                }
136
+            }
137
+        })
138
+        //数据
139
+
140
+    var titledata = [];
141
+    var datas = [
142
+        []
143
+    ];
144
+    var serieslist = [];
145
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
146
+    var datetime = [];
147
+    $scope.headerslist = [];
148
+    $scope.listsum = [];
149
+    $scope.rRows = [];
150
+    //事件数量统计分析
151
+    var domanalysis = document.getElementById("analysis");
152
+    var myChartanalysis = echarts.init(domanalysis);
153
+    var app = {};
154
+    var optionanalysis = null;
155
+    app.title = '事件数量统计分析';
156
+    var XData = [];
157
+    var yData = [];
158
+    myChartanalysis.showLoading({  
159
+        text: '数据加载中...',
160
+        color: '#c23531',
161
+        textColor: '#fff',
162
+        maskColor: 'rgba(255,255,255,0)',
163
+        zlevel: 0
164
+    });
165
+    myChartanalysis.hideLoading();
166
+    app.title = '堆叠条形图';
167
+    optionanalysis = {
168
+        tooltip: {
169
+            trigger: 'axis',
170
+            axisPointer: { // 坐标轴指示器,坐标轴触发有效
171
+                type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
172
+            },
173
+            formatter: function(datas) {
174
+                var allsum = 0;
175
+                angular.forEach(datas, function(item) {
176
+                    allsum += item.data;
177
+                })
178
+                var res = '';
179
+                for (var i = 0; i < datas.length; i++) {
180
+                    res += datas[i].marker + " " + datas[i].seriesName + '    总数:' +
181
+                        datas[i].data + '  占比:' + (allsum > 0 ? datas[i].data * 100 / allsum : 0).toFixed(2) + '%' + '<br/>'
182
+                }
183
+                return res
184
+            }
185
+        },
186
+        legend: {
187
+            icon: "circle",
188
+            bottom: '0%',
189
+            data: titledata
190
+        },
191
+        grid: {
192
+            left: '5%',
193
+            right: '4%',
194
+            bottom: '20%',
195
+            top: '5%',
196
+            containLabel: false
197
+        },
198
+        xAxis: {
199
+            // axisTick: {
200
+            //     show: false
201
+            // },
202
+            splitLine: {
203
+                show: false,
204
+            },
205
+            axisLine: {
206
+                lineStyle: {
207
+                    color: '#ddd'
208
+                }
209
+            },
210
+            splitArea: {
211
+                show: false
212
+            },
213
+            axisLabel: {
214
+                textStyle: {
215
+                    color: '#787878',
216
+                    fontSize: 12,
217
+                }
218
+            },
219
+            type: 'value'
220
+        },
221
+        yAxis: {
222
+            axisTick: {
223
+                show: false
224
+            },
225
+            axisLabel: {
226
+                show: true,
227
+                textStyle: {
228
+                    color: '#6d6d6d',
229
+                    fontSize: 12,
230
+                }
231
+            },
232
+            axisLine: {
233
+                show: true,
234
+                lineStyle: {
235
+                    color: '#ddd'
236
+                }
237
+            },
238
+            splitArea: {
239
+                show: false
240
+            },
241
+            type: 'category',
242
+            data: datetime
243
+        },
244
+        series: serieslist
245
+    }
246
+
247
+    function getdata(time) {
248
+        api_hkreport.incidentreport(time, 'incident_trend').then(function(data) {
249
+            handledata(data);
250
+        })
251
+    }
252
+    getdata({ "start": moment($scope.parameters.paramDateFrom, "YYYY-MM-DD").format("YYYY"), "end": moment($scope.parameters.paramDateTo, "YYYY-MM-DD").format("YYYY") })
253
+
254
+    function handledata(data) {
255
+        datetime = [];
256
+        $scope.listsum = [];
257
+        titledata = [];
258
+        $scope.headerslist = data.quantityStatisticsTitle;
259
+        $scope.rRows = data.quantityStatisticsList;
260
+
261
+        angular.forEach($scope.rRows, function(item, index) {
262
+            $scope.listsum[index] = { 'allzzl': '', 'sum': '', 'date': '', 'all': [] };
263
+            var i = (Object.values($scope.rRows[0]).length - 3) / 2;
264
+            for (var j = 0; j < i; j++) {
265
+                // $scope.listsum[index].zzl[j] = $scope.rRows[index]['zzl' + j];
266
+                $scope.listsum[index].all[j] = { 'category': $scope.rRows[index]['category' + j], 'zzl': $scope.rRows[index]['zzl' + j] };
267
+                // $scope.listsum[index].allzzl = $scope.rRows[index].allzzl;
268
+                $scope.listsum[index].allzzl = $scope.rRows[index].allzzl == '-' ? $scope.rRows[index].allzzl : Number($scope.rRows[index].allzzl);
269
+                $scope.listsum[index].sum = $scope.rRows[index].sum;
270
+                $scope.listsum[index].date = $scope.rRows[index].date;
271
+                $scope.rRows[index].allzzl = $scope.rRows[index].allzzl == '-' ? $scope.rRows[index].allzzl : Number($scope.rRows[index].allzzl);
272
+                $scope.rRows[index]['zzl' + j] = { 'category': $scope.rRows[index]['category' + j], 'zzl': $scope.rRows[index]['zzl' + j] == '-' ? $scope.rRows[index]['zzl' + j] : Number($scope.rRows[index]['zzl' + j]) };
273
+            }
274
+        })
275
+        angular.forEach(data.quantityStatistics, function(item, index) {
276
+            titledata.push(item.category);
277
+            datas[index] = [];
278
+            angular.forEach(item.data, function(itemtwo, indextwo) {
279
+                datas[index][indextwo] = itemtwo.sum;
280
+            })
281
+            serieslist[index] = {
282
+                name: item.category,
283
+                type: 'bar',
284
+                stack: '总量',
285
+                "itemStyle": {
286
+                    "normal": {
287
+                        "barBorderRadius": 0,
288
+                        "color": colorlist[index],
289
+                        "label": {
290
+                            "show": false,
291
+                            "textStyle": {
292
+                                "color": "#87c966"
293
+                            },
294
+                            "position": "insideRight",
295
+                            formatter: function(p) {
296
+                                return p.value > 0 ? (p.value) : '';
297
+                            }
298
+                        }
299
+                    }
300
+                },
301
+                barWidth: 18,
302
+                data: datas[index]
303
+            }
304
+        })
305
+        angular.forEach(data.quantityStatistics[0].data, function(item, index) {
306
+            datetime[index] = item.date;
307
+        })
308
+        optionanalysis.yAxis.data = datetime;
309
+        optionanalysis.legend.data = titledata;
310
+        myChartanalysis.setOption(optionanalysis);
311
+        myChartanalysis.hideLoading();
312
+    }
313
+}]);

+ 991 - 0
assets/js/controllers/report/catergry.js

@@ -0,0 +1,991 @@
1
+'use strict';
2
+app.controller('reportcatergryCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", "api_bpm_data", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport, api_bpm_data) {
3
+    var ROWS = "ROWS";
4
+    var COLUMNS = "COLUMNS";
5
+    $scope.treeshow = true;
6
+    $scope.searchstate = "";
7
+    $scope.headers = "请选择事件树形列表!";
8
+    var workspace = {};
9
+    $scope.parameters = {};
10
+    $scope.starttimes = {};
11
+    $scope.endtimes = {};
12
+    $scope.category = {};
13
+    $scope.reportName = "报表";
14
+    $scope.allheight = 100;
15
+    $scope.isMaskground = false;
16
+    $scope.group = [];
17
+    //表格
18
+    $scope.rRowscatergry = [];
19
+    $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近7天', value: 1 }, { name: '近30天', value: 2 }, { name: '近90天', value: 3 }, { name: '近半年', value: 4 }, { name: '近一年', value: 5 }];
20
+    // var starttime, endtime
21
+    // $scope.starttimes = moment().startOf('month').format('YYYYMMDD');
22
+    // $scope.endtimes = moment().format('YYYYMMDD');
23
+    function startdata() {
24
+        $scope.searchkeys = { 'group': {}, 'quikly': { name: '近7天', value: 1 } };
25
+        $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
26
+        $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
27
+        $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
28
+        $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
29
+    }
30
+    startdata();
31
+    $scope.changeForm = function(paramDateFrom) {
32
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
33
+        $scope.starttimes = moment(paramDateFrom).format('YYYYMMDD');
34
+    }
35
+    $scope.changeTo = function(paramDateTo) {
36
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
37
+        $scope.endtimes = moment(paramDateTo).format('YYYYMMDD');
38
+    }
39
+
40
+
41
+    $scope.open = function($event) {
42
+        $event.preventDefault();
43
+        $event.stopPropagation();
44
+
45
+        $scope.opened = !$scope.opened;
46
+    };
47
+    $scope.endOpen = function($event) {
48
+        $event.preventDefault();
49
+        $event.stopPropagation();
50
+        $scope.startOpened = false;
51
+        $scope.endOpened = !$scope.endOpened;
52
+    };
53
+    $scope.startOpen = function($event) {
54
+        $event.preventDefault();
55
+        $event.stopPropagation();
56
+        $scope.endOpened = false;
57
+        $scope.startOpened = !$scope.startOpened;
58
+    };
59
+    //处理组
60
+    // api_user_data.fetchDataList('group', { "idx": 0, "sum": 1000, "group": { "selectType": "nouser" } }).then(function(data) {
61
+    //     if (data.status == 200) {
62
+    //         $scope.group = data.list;
63
+    //     }
64
+    // })
65
+
66
+    function ConvertDateParameter(parameters) {
67
+        var result = undefined;
68
+        if (angular.isArray(parameters)) {
69
+            // 
70
+        } else {
71
+            result = {};
72
+            for (var k in parameters) {
73
+                if (k.indexOf("Date") > 0) {
74
+                    if (angular.isDate(parameters[k])) {
75
+                        result[k] = moment(parameters[k]).format("YYYY-MM-DD");
76
+                    } else if (angular.isString(parameters[k])) {
77
+                        result[k] = parameters[k];
78
+                    }
79
+                }
80
+            }
81
+        }
82
+        return result;
83
+    }
84
+    $scope.restData = function() {
85
+        $scope.try_async_loadca();
86
+        startdata();
87
+        $scope.mdxquery();
88
+    }
89
+    $scope.mdxquery = function(key) {
90
+        var changedate = ConvertDateParameter($scope.parameters)
91
+        var fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
92
+        if (key && key.category && key.category.id) {
93
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD"), "categoryId": key.category.id }
94
+        } else {
95
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
96
+        }
97
+        getdata(fildata);
98
+        getdatatop3(fildata);
99
+        getdatatop5(fildata);
100
+        getpiedata(fildata);
101
+        getdataareaplace(fildata);
102
+        getlistdata(fildata);
103
+        // getlistdata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
104
+        // getpiedata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
105
+        // getpiedata({ "end": $scope.parameters.paramDateFrom, "start": $scope.parameters.paramDateTo })
106
+    }
107
+    $scope.onChangetime = function(key) {
108
+            if (key.value == 1) {
109
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYY-MM-DD');
110
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
111
+                $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYY-MM-DD").format("YYYY-MM-DD");
112
+                $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYY-MM-DD").format("YYYY-MM-DD");
113
+            } else if (key.value == 2) {
114
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 30).format('YYYY-MM-DD');
115
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
116
+                $scope.parameters.paramDateFrom = $scope.starttimes;
117
+                $scope.parameters.paramDateTo = $scope.endtimes;
118
+            } else if (key.value == 3) {
119
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 90).format('YYYY-MM-DD');
120
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
121
+                $scope.parameters.paramDateFrom = $scope.starttimes;
122
+                $scope.parameters.paramDateTo = $scope.endtimes;
123
+            } else if (key.value == 4) {
124
+                $scope.searchstate = "month";
125
+                $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 6)).format('YYYY-MM-DD');
126
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
127
+                $scope.parameters.paramDateFrom = $scope.starttimes;
128
+                $scope.parameters.paramDateTo = $scope.endtimes;
129
+            } else if (key.value == 5) {
130
+                $scope.searchstate = "month";
131
+                $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 12)).format('YYYY-MM-DD');
132
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
133
+                $scope.parameters.paramDateFrom = $scope.starttimes;
134
+                $scope.parameters.paramDateTo = $scope.endtimes;
135
+            }
136
+            // $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
137
+            // $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
138
+            // $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
139
+            // $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
140
+            // $scope.mdxquery();
141
+        }
142
+        // $scope.onChangegroup = function(key) {
143
+
144
+    // }
145
+    // $scope.execute = function() {
146
+    //     api_report.list($scope.token).then(function(response) {
147
+    //         $scope.select_treedata = $scope.my_data = response;
148
+    //     });
149
+    // }
150
+
151
+    $scope.searchOptions = function() {
152
+            if (angular.isDefined(workspace.query)) {
153
+                var queryParameters = workspace.query.parameters;
154
+                for (var parm in queryParameters) {
155
+                    if (parm == 'Week') {
156
+
157
+                    } else {
158
+
159
+                    }
160
+                }
161
+            }
162
+        }
163
+        //树形图
164
+        // $scope.inspecttype = {};
165
+
166
+    $scope.my_tree = {};
167
+    $scope.try_async_loadca = function() {
168
+
169
+        $scope.my_dataca = [];
170
+        $scope.doing_async = true;
171
+        api_bpm_data.fetchDataList('incidentcategory', { "idx": 0, "sum": 1000 }).then(function(response) {
172
+            if (response.status == 200) {
173
+                var data = response.list;
174
+                var objects = [];
175
+                for (var i = 0; i < data.length; i++) {
176
+                    var object = {};
177
+                    object.id = data[i].id;
178
+                    object.parent = data[i].parent;
179
+                    // if (data[i].parent && data[i].parent.id != 0) {
180
+                    //     object.parent = data[i].parent.id;
181
+                    // }
182
+                    object.label = data[i].category;
183
+                    objects.push(object);
184
+                }
185
+                $scope.my_dataca = convertParentToChildList(objects);
186
+                $scope.select_treedataca = angular.copy($scope.my_dataca);
187
+                if ($scope.my_dataca.length > 0) {
188
+                    $scope.doing_async = false;
189
+                }
190
+            } else {
191
+                SweetAlert.swal({
192
+                    title: "系统错误!",
193
+                    text: "请刷新重试!",
194
+                    type: "error"
195
+                });
196
+            }
197
+        });
198
+
199
+
200
+
201
+
202
+    };
203
+    $scope.my_dataca = [];
204
+
205
+
206
+    function convertListToTree(data, treeMap) {
207
+        var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
208
+        var root = null; //Initially set our loop to null
209
+        var parentNode = null;
210
+        //loop over data
211
+        for (var i = 0; i < data.length; i++) {
212
+            var datum = data[i];
213
+            //each node will have children, so let's give it a "children" poperty
214
+            datum.children = [];
215
+
216
+            //add an entry for this node to the map so that any future children can
217
+            //lookup the parent
218
+            idToNodeMap[datum.id] = datum;
219
+
220
+            //Does this node have a parent?
221
+            if (typeof datum.parent === "undefined" || datum.parent == null) {
222
+                //Doesn't look like it, so this node is the root of the tree
223
+                root = datum;
224
+                treeMap[datum.id] = root;
225
+            } else {
226
+                //This node has a parent, so let's look it up using the id
227
+                parentNode = idToNodeMap[datum.parent.id];
228
+
229
+                //We don't need this property, so let's delete it.
230
+                delete datum.parent;
231
+
232
+                //Let's add the current node as a child of the parent node.
233
+                parentNode.children.push(datum);
234
+            }
235
+        }
236
+        return root;
237
+        console.log(root)
238
+    }
239
+
240
+    function convertParentToChildList(data) {
241
+        var treeMap = {};
242
+        var list = [];
243
+        convertListToTree(data, treeMap);
244
+        angular.forEach(treeMap, function(item) {
245
+            list.push(item);
246
+        });
247
+        return list;
248
+    }
249
+    $scope.try_async_loadca();
250
+    // $scope.select_treedata = [];
251
+    $scope.propTypeOptions = [];
252
+    $scope.deselectItem = function(item) {
253
+            console.log(item)
254
+            console.log($scope)
255
+        }
256
+        // 事件分类
257
+    $scope.onFilterCallback = function(item) {
258
+        if (item.children && item.children.length != 0) {
259
+            $scope.searchkeys.category = item;
260
+        } else if (item.item && item.item.id) {
261
+            $scope.searchkeys.category = {};
262
+        }
263
+    }
264
+
265
+    //pie 工单解决率
266
+    // $scope.pielenddata = ["处理人", "处理人1", "处理人2"];
267
+    // $scope.piebodydata = [{ "value": 1, "name": "处理人", "proportion": "25%" }, { "value": 1, "name": "处理人1", "proportion": "25%" }, { "value": 2, "name": "处理人2", "proportion": "50%" }];
268
+    $scope.pielenddata = [];
269
+    $scope.piebodydata = [];
270
+    var domcatergry = document.getElementById("reportcatergry");
271
+    var myChartcatergry = echarts.init(domcatergry);
272
+    var app = {};
273
+    var optioncatergry = null;
274
+    myChartcatergry.showLoading({  
275
+        text: '数据加载中...',
276
+        color: '#c23531',
277
+        textColor: '#fff',
278
+        maskColor: 'rgba(255,255,255,0)',
279
+        zlevel: 0
280
+    });
281
+    myChartcatergry.hideLoading();
282
+    optioncatergry = {
283
+        title: {
284
+            subtext: 0,
285
+            text: "事件分类总数(件)",
286
+            itemGap: 3,
287
+            "x": '24%',
288
+            "y": '40%',
289
+            textAlign: "center",
290
+            "textStyle": {
291
+                "fontWeight": 'normal',
292
+                "fontSize": 12,
293
+                "color": '#333',
294
+
295
+            },
296
+            "subtextStyle": {
297
+                "fontWeight": 'normal',
298
+                "fontSize": 18,
299
+                "color": '#005395',
300
+                "lineHeight": 14
301
+            },
302
+
303
+        },
304
+        tooltip: {
305
+            "backgroundColor": "rgba(0,0,0,9)",
306
+            "textStyle": {
307
+                "fontSize": 12,
308
+                "color": '#f9f9f9',
309
+            },
310
+            trigger: 'item',
311
+            formatter: "{b}: {c} ({d}%)"
312
+        },
313
+        legend: {
314
+            orient: 'vertical',
315
+            icon: "circle",
316
+            x: '50%',
317
+            y: 'center',
318
+            itemGap: 10,
319
+            itemWidth: 8,
320
+            itemHeight: 8,
321
+            borderRadius: 4,
322
+            textStyle: {
323
+                color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
324
+            },
325
+            data: $scope.pielenddata,
326
+            formatter: function(param) {
327
+                for (var i = 0; i < $scope.pielenddata.length; i++) {
328
+                    if ($scope.piebodydata[i].name == param) {
329
+                        return '    ' + $scope.piebodydata[i].name + '  |  ' + $scope.piebodydata[i].value + '    ' + $scope.piebodydata[i].proportion + '%';
330
+                    }
331
+                }
332
+            },
333
+            textStyle: {
334
+                rich: {
335
+                    white: {
336
+                        color: "#fff",
337
+                        fontSize: 12,
338
+                        padding: [6, 0, 0, 0]
339
+                    }
340
+                }
341
+            }
342
+        },
343
+        series: [{
344
+            // name: $scope.startlist.title,
345
+            type: 'pie',
346
+            radius: ['70%', '85%'],
347
+            center: ['25%', '50%'],
348
+            color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
349
+            hoverAnimation: true,
350
+            label: {
351
+                normal: {
352
+                    show: false,
353
+                    position: 'center'
354
+                },
355
+                formatter: [
356
+                    '{a|这段文本采用样式a}',
357
+                    '{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}'
358
+                ].join('\n'),
359
+
360
+                rich: {
361
+                    a: {
362
+                        color: 'red',
363
+                        lineHeight: 10
364
+                    },
365
+                    b: {
366
+                        backgroundColor: {
367
+                            image: 'xxx/xxx.jpg'
368
+                        },
369
+                        height: 40
370
+                    },
371
+                    x: {
372
+                        fontSize: 18,
373
+                        fontFamily: 'Microsoft YaHei',
374
+                        borderColor: '#449933',
375
+                        borderRadius: 4
376
+                    },
377
+                }
378
+            },
379
+            labelLine: {
380
+                normal: {
381
+                    show: false
382
+                }
383
+            },
384
+            data: $scope.piebodydata
385
+        }]
386
+    };
387
+
388
+    if (optioncatergry && typeof optioncatergry === "object") {
389
+        myChartcatergry.setOption(optioncatergry);
390
+        myChartcatergry.hideLoading();
391
+    }
392
+
393
+    function getpiedata(time) {
394
+        api_hkreport.incidentreport(time, 'incident_category_proportion').then(function(data) {
395
+            $scope.piebodydata = data.lsit;
396
+            $scope.pielenddata = [];
397
+            angular.forEach($scope.piebodydata, function(item, index) {
398
+                $scope.piebodydata[index].name = item.category;
399
+                $scope.piebodydata[index].value = item.num;
400
+                $scope.pielenddata.push(item.category);
401
+            })
402
+            optioncatergry.series[0].data = $scope.piebodydata;
403
+            optioncatergry.legend.data = $scope.pielenddata;
404
+            optioncatergry.title.subtext = data.sum;
405
+            myChartcatergry.setOption(optioncatergry);
406
+            myChartcatergry.hideLoading();
407
+        })
408
+    }
409
+    getpiedata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
410
+
411
+    //end 工单解决率
412
+    //折线图
413
+    $scope.headerslist = [];
414
+    var axilist = [];
415
+    var serieslist = [];
416
+    var headerlist = [];
417
+    var datas = [];
418
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
419
+    var domllcatergry = document.getElementById("liuliangcatergry");
420
+    var myChartllcatergry = echarts.init(domllcatergry);
421
+    myChartllcatergry.showLoading({  
422
+        text: '数据加载中...',
423
+        color: '#c23531',
424
+        textColor: '#fff',
425
+        maskColor: 'rgba(255,255,255,0)',
426
+        zlevel: 0
427
+    });
428
+    var app = {};
429
+    var optionllcatergry = null;
430
+    app.title = '流量';
431
+    $scope.llmyData = [];
432
+    var zhengliudata = 0;
433
+    var huliudata = 0;
434
+    $scope.zhengliu = 0;
435
+    $scope.huliu = 0;
436
+    // var zwmyData = [];
437
+    // var hlmyData = [];
438
+    var xhuzwmyData = [];
439
+    $scope.zhengliu = 0;
440
+    $scope.huliu = 0;
441
+    optionllcatergry = {
442
+        color: ['#D53A35'],
443
+        tooltip: {
444
+            trigger: 'axis',
445
+            //formatter: "{b} <br> 合格率: {c}%"
446
+        },
447
+        grid: {
448
+            top: '10%',
449
+            bottom: '15%',
450
+            left: '3%',
451
+            right: '8%',
452
+            containLabel: true
453
+        },
454
+        xAxis: {
455
+            type: 'category',
456
+            name: '',
457
+            boundaryGap: false,
458
+            axisLine: {
459
+                show: false,
460
+                lineStyle: {
461
+                    color: '#525252'
462
+                }
463
+            },
464
+            axisTick: {
465
+                show: false
466
+            },
467
+            axisLabel: {
468
+                color: '#525252'
469
+            },
470
+            data: axilist
471
+        },
472
+        yAxis: {
473
+            type: 'value',
474
+            name: '',
475
+            minInterval: 1,
476
+            axisLine: {
477
+                show: false,
478
+            },
479
+            axisTick: {
480
+                show: false
481
+            },
482
+            axisLabel: {
483
+                color: '#525252'
484
+            },
485
+            splitLine: {
486
+                lineStyle: {
487
+                    type: 'dotted',
488
+                    color: '#AAA' //F3F3F3	
489
+                }
490
+            }
491
+        },
492
+        "legend": {
493
+            "bottom": 0,
494
+            // "textStyle": {
495
+            //     "color": "#e6e9ed"
496
+            // },
497
+            // "inactiveColor": "#5a626d",
498
+            // "data": [
499
+            //     "全部机型"
500
+            // ],
501
+            data: headerlist,
502
+            "itemGap": 5,
503
+            "itemWidth": 16,
504
+            "itemHeight": 12,
505
+            "pageTextStyle": {
506
+                "color": "#e6e9ed"
507
+            },
508
+            "pageIconSize": 14
509
+        },
510
+        series: serieslist
511
+    };
512
+
513
+    function getdata(time) {
514
+        api_hkreport.incidentreport(time, 'incident_category_trend').then(function(data) {
515
+            headerlist = data.incidentCategoryTrend[0]
516
+            axilist = data.incidentCategoryTrend[1];
517
+            angular.forEach(data.incidentCategoryTrend[2], function(item, index) {
518
+                // datas = item;
519
+                serieslist[index] = {
520
+                    name: headerlist[index],
521
+                    type: 'line',
522
+                    symbol: 'none',
523
+                    itemStyle: {
524
+                        normal: {
525
+                            color: colorlist[index]
526
+                        }
527
+                    },
528
+                    lineStyle: {
529
+                        normal: {
530
+                            width: 2
531
+                        }
532
+                    },
533
+                    data: item
534
+                }
535
+            })
536
+            optionllcatergry.xAxis.data = axilist;
537
+            optionllcatergry.legend.data = headerlist;
538
+            myChartllcatergry.setOption(optionllcatergry);
539
+            myChartllcatergry.hideLoading();
540
+        })
541
+    }
542
+    getdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
543
+        //bar 事件区域地点TOP3
544
+    var domfaultcatergry = document.getElementById("faultcatergry");
545
+    var myChartfaultcatergry = echarts.init(domfaultcatergry);
546
+    var app = {};
547
+    var optionfaultcatergry = null;
548
+    app.title = '事件区域地点TOP3';
549
+    var XData = [];
550
+    var yData = [];
551
+    myChartfaultcatergry.showLoading({  
552
+        text: '数据加载中...',
553
+        color: '#c23531',
554
+        textColor: '#fff',
555
+        maskColor: 'rgba(255,255,255,0)',
556
+        zlevel: 0
557
+    });
558
+    myChartfaultcatergry.hideLoading();
559
+    optionfaultcatergry = {
560
+        title: {
561
+            // text: '(件)故障数量',
562
+            x: '10',
563
+            y: '0',
564
+            textStyle: {
565
+                fontWeight: 'normal',
566
+                fontSize: 12,
567
+                color: "#56c9ff",
568
+            }
569
+        },
570
+        xAxis: {
571
+            type: 'value',
572
+            axisTick: {
573
+                show: false
574
+            },
575
+            splitLine: {
576
+                show: true,
577
+                lineStyle: {
578
+                    type: 'dashed',
579
+                    color: '#eee'
580
+                }
581
+            },
582
+            splitArea: {
583
+                show: false
584
+            },
585
+            // data: XData,
586
+            axisLine: {
587
+                show: false,
588
+                lineStyle: {
589
+                    color: '#ddd'
590
+                }
591
+            },
592
+            axisLabel: {
593
+                textStyle: {
594
+                    color: '#999999',
595
+                    fontSize: 12,
596
+                }
597
+            },
598
+        },
599
+        yAxis: {
600
+            type: 'category',
601
+            data: [],
602
+            axisTick: {
603
+                show: false
604
+            },
605
+            splitLine: {
606
+                show: false
607
+            },
608
+            splitArea: {
609
+                show: false
610
+            },
611
+            axisLabel: {
612
+                show: true,
613
+                textStyle: {
614
+                    color: '#999999',
615
+                    fontSize: 12,
616
+                }
617
+            },
618
+            axisLine: {
619
+                show: true,
620
+                lineStyle: {
621
+                    color: '#cecece'
622
+                }
623
+            }
624
+        },
625
+        grid: {
626
+            left: 10,
627
+            top: 25,
628
+            bottom: 0,
629
+            right: 20,
630
+            containLabel: true
631
+        },
632
+        "tooltip": {
633
+            "trigger": "item",
634
+            "textStyle": {
635
+                "fontSize": 12
636
+            },
637
+            "formatter": "{b0}:{c0}"
638
+        },
639
+        series: {
640
+            type: "bar",
641
+            itemStyle: {
642
+                normal: {
643
+                    color: "#005395",
644
+                }
645
+            },
646
+            label: {
647
+                normal: {
648
+                    show: true,
649
+                    position: 'right',
650
+                    textStyle: {
651
+                        // color: '# 56 c9ff '
652
+                    }
653
+                }
654
+            },
655
+            barWidth: 18,
656
+            // barWidth: '30%',
657
+            // data: yData
658
+            data: [0, 0, 0, 0, 0]
659
+        }
660
+    };
661
+
662
+    function getdatatop3(time) {
663
+        api_hkreport.incidentreport(time, 'incident_category_area_place_top').then(function(data) {
664
+            //柱状图
665
+            var barGraph = [];
666
+            var baryx = [];
667
+            angular.forEach(data.dataList, function(item) {
668
+                barGraph.push(item.sum);
669
+                baryx.push(item.area + '/' + item.place);
670
+            })
671
+            optionfaultcatergry.yAxis.data = baryx.reverse();
672
+            optionfaultcatergry.series.data = barGraph.reverse();
673
+            myChartfaultcatergry.setOption(optionfaultcatergry);
674
+            myChartfaultcatergry.hideLoading();
675
+        })
676
+    }
677
+    getdatatop3({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
678
+        //bar 故障原因TOP5
679
+    var domfaultgu = document.getElementById("faultgu");
680
+    var myChartfaultgu = echarts.init(domfaultgu);
681
+    var app = {};
682
+    var optionfaultgu = null;
683
+    app.title = '事件区域地点TOP3';
684
+    var XData = [];
685
+    var yData = [];
686
+    myChartfaultgu.showLoading({  
687
+        text: '数据加载中...',
688
+        color: '#c23531',
689
+        textColor: '#fff',
690
+        maskColor: 'rgba(255,255,255,0)',
691
+        zlevel: 0
692
+    });
693
+    myChartfaultgu.hideLoading();
694
+    optionfaultgu = {
695
+        title: {
696
+            // text: '(件)故障数量',
697
+            x: '10',
698
+            y: '0',
699
+            textStyle: {
700
+                fontWeight: 'normal',
701
+                fontSize: 12,
702
+                color: "#56c9ff",
703
+            }
704
+        },
705
+        xAxis: {
706
+            type: 'value',
707
+            axisTick: {
708
+                show: false
709
+            },
710
+            splitLine: {
711
+                show: true,
712
+                lineStyle: {
713
+                    type: 'dashed',
714
+                    color: '#eee'
715
+                }
716
+            },
717
+            splitArea: {
718
+                show: false
719
+            },
720
+            // data: XData,
721
+            axisLine: {
722
+                show: false,
723
+                lineStyle: {
724
+                    color: '#ddd'
725
+                }
726
+            },
727
+            axisLabel: {
728
+                textStyle: {
729
+                    color: '#999999',
730
+                    fontSize: 12,
731
+                }
732
+            },
733
+        },
734
+        yAxis: {
735
+            type: 'category',
736
+            data: [],
737
+            axisTick: {
738
+                show: false
739
+            },
740
+            splitLine: {
741
+                show: false
742
+            },
743
+            splitArea: {
744
+                show: false
745
+            },
746
+            axisLabel: {
747
+                show: true,
748
+                textStyle: {
749
+                    color: '#999999',
750
+                    fontSize: 12,
751
+                }
752
+            },
753
+            axisLine: {
754
+                show: true,
755
+                lineStyle: {
756
+                    color: '#cecece'
757
+                }
758
+            }
759
+        },
760
+        grid: {
761
+            left: 10,
762
+            top: 25,
763
+            bottom: 0,
764
+            right: 20,
765
+            containLabel: true
766
+        },
767
+        "tooltip": {
768
+            "trigger": "item",
769
+            "textStyle": {
770
+                "fontSize": 12
771
+            },
772
+            "formatter": "{b0}:{c0}"
773
+        },
774
+        series: {
775
+            type: "bar",
776
+            itemStyle: {
777
+                normal: {
778
+                    color: "#87c966",
779
+                }
780
+            },
781
+            label: {
782
+                normal: {
783
+                    show: true,
784
+                    position: 'right',
785
+                    textStyle: {
786
+                        // color: '# 56 c9ff '
787
+                    }
788
+                }
789
+            },
790
+            barWidth: 18,
791
+            // barWidth: '30%',
792
+            // data: yData
793
+            data: [0, 0, 0, 0, 0]
794
+        }
795
+    };
796
+
797
+    function getdatatop5(time) {
798
+        api_hkreport.incidentreport(time, 'incident_category_faultcause_top').then(function(data) {
799
+            //柱状图
800
+            var barGraph = [];
801
+            var baryx = [];
802
+            angular.forEach(data.dataList, function(item) {
803
+                barGraph.push(item.sum);
804
+                baryx.push(item.reason);
805
+            })
806
+            optionfaultgu.yAxis.data = baryx.reverse();
807
+            optionfaultgu.series.data = barGraph.reverse();
808
+            myChartfaultgu.setOption(optionfaultgu);
809
+            myChartfaultgu.hideLoading();
810
+        })
811
+    }
812
+    getdatatop5({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
813
+
814
+
815
+    //区域地点及事件类型趋势分析
816
+    //事件数量统计分析
817
+    // var titledata = [];
818
+    // var serieslist = [];
819
+    // var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
820
+    // var datetime = [];
821
+    // $scope.headerslist = [];
822
+    // $scope.listsum = [];
823
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
824
+    var datetime = [];
825
+    var titledata = [];
826
+    var domanalysisca = document.getElementById("analysisca");
827
+    var myChartanalysisca = echarts.init(domanalysisca);
828
+    var app = {};
829
+    var optionanalysisca = null;
830
+    app.title = '事件数量统计分析';
831
+    var XData = [];
832
+    var yData = [];
833
+    myChartanalysisca.showLoading({  
834
+        text: '数据加载中...',
835
+        color: '#c23531',
836
+        textColor: '#fff',
837
+        maskColor: 'rgba(255,255,255,0)',
838
+        zlevel: 0
839
+    });
840
+    myChartanalysisca.hideLoading();
841
+    app.title = '堆叠条形图';
842
+    optionanalysisca = {
843
+        tooltip: {
844
+            trigger: 'axis',
845
+            axisPointer: { // 坐标轴指示器,坐标轴触发有效
846
+                type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
847
+            },
848
+            formatter: function(datas) {
849
+                var allsum = 0;
850
+                angular.forEach(datas, function(item) {
851
+                    allsum += item.data;
852
+                })
853
+                var res = '';
854
+                for (var i = 0; i < datas.length; i++) {
855
+                    res += datas[i].marker + " " + datas[i].seriesName + '    总数:' +
856
+                        datas[i].data + '  占比:' + (datas[i].data * 100 / allsum).toFixed(2) + '%' + '<br/>'
857
+                }
858
+                return res
859
+            }
860
+        },
861
+        legend: {
862
+            icon: "circle",
863
+            bottom: '0%',
864
+            data: titledata
865
+        },
866
+        grid: {
867
+            left: '8%',
868
+            right: '4%',
869
+            bottom: '20%',
870
+            top: '5%',
871
+            containLabel: false
872
+        },
873
+        xAxis: {
874
+            // axisTick: {
875
+            //     show: false
876
+            // },
877
+            splitLine: {
878
+                show: false,
879
+            },
880
+            axisLine: {
881
+                lineStyle: {
882
+                    color: '#ddd'
883
+                }
884
+            },
885
+            splitArea: {
886
+                show: false
887
+            },
888
+            axisLabel: {
889
+                textStyle: {
890
+                    color: '#787878',
891
+                    fontSize: 12,
892
+                }
893
+            },
894
+            type: 'value'
895
+        },
896
+        yAxis: {
897
+            axisTick: {
898
+                show: false
899
+            },
900
+            axisLabel: {
901
+                show: true,
902
+                textStyle: {
903
+                    color: '#6d6d6d',
904
+                    fontSize: 12,
905
+                }
906
+            },
907
+            axisLine: {
908
+                show: true,
909
+                lineStyle: {
910
+                    color: '#ddd'
911
+                }
912
+            },
913
+            splitArea: {
914
+                show: false
915
+            },
916
+            type: 'category',
917
+            data: datetime
918
+        },
919
+        series: serieslist
920
+    }
921
+
922
+    function getdataareaplace(time) {
923
+        api_hkreport.incidentreport(time, 'incident_category_area_trend').then(function(data) {
924
+            handledata(data);
925
+        })
926
+    }
927
+    getdataareaplace({ "start": moment($scope.parameters.paramDateFrom, "YYYY-MM-DD").format("YYYY"), "end": moment($scope.parameters.paramDateTo, "YYYY-MM-DD").format("YYYY") })
928
+
929
+    function handledata(data) {
930
+        datetime = [];
931
+        $scope.headerslist = data.quantityStatisticsTitle;
932
+        $scope.rRowscatergry = data.quantityStatisticsList;
933
+        angular.forEach($scope.rRowscatergry, function(item, index) {
934
+            $scope.listsum[index] = { 'allzzl': '', 'sum': '', 'date': '', 'all': [] };
935
+            var i = (Object.values($scope.rRowscatergry[0]).length - 3) / 2;
936
+            for (var j = 0; j < i; j++) {
937
+                // $scope.listsum[index].category[j] = $scope.rRows[index]['category' + j];
938
+                // $scope.listsum[index].zzl[j] = $scope.rRows[index]['zzl' + j];
939
+                $scope.listsum[index].all[j] = { 'category': $scope.rRowscatergry[index]['category' + j], 'zzl': $scope.rRowscatergry[index]['zzl' + j] };
940
+                $scope.listsum[index].allzzl = $scope.rRowscatergry[index].allzzl;
941
+                $scope.listsum[index].sum = $scope.rRowscatergry[index].sum;
942
+                $scope.listsum[index].date = $scope.rRowscatergry[index].date;
943
+            }
944
+        })
945
+        angular.forEach(data.data, function(item, index) {
946
+            titledata.push(item.category);
947
+            datas[index] = [];
948
+            angular.forEach(item.data, function(itemtwo, indextwo) {
949
+                datas[index][indextwo] = itemtwo.sum;
950
+            })
951
+            serieslist[index] = {
952
+                name: item.category,
953
+                type: 'bar',
954
+                stack: '总量',
955
+                "itemStyle": {
956
+                    "normal": {
957
+                        "barBorderRadius": 0,
958
+                        "color": colorlist[index],
959
+                        "label": {
960
+                            "show": false,
961
+                            "textStyle": {
962
+                                "color": "#87c966"
963
+                            },
964
+                            "position": "insideRight",
965
+                            formatter: function(p) {
966
+                                return p.value > 0 ? (p.value) : '';
967
+                            }
968
+                        }
969
+                    }
970
+                },
971
+                barWidth: 18,
972
+                data: datas[index]
973
+            }
974
+        })
975
+        angular.forEach(data.data[0].data, function(item, index) {
976
+            datetime[index] = item.area;
977
+        })
978
+        optionanalysisca.yAxis.data = datetime;
979
+        myChartanalysisca.setOption(optionanalysisca);
980
+        myChartanalysisca.hideLoading();
981
+    }
982
+    //表格
983
+    $scope.rRowscatergry = [];
984
+
985
+    function getlistdata(time) {
986
+        api_hkreport.incidentreport(time, 'incident_category_list').then(function(data) {
987
+            $scope.rRowscatergry = data.dataList;
988
+        })
989
+    }
990
+    getlistdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
991
+}]);

+ 581 - 0
assets/js/controllers/report/efficiency.js

@@ -0,0 +1,581 @@
1
+'use strict';
2
+app.controller('reportefficiencyCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", "api_bpm_data", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport, api_bpm_data) {
3
+    var ROWS = "ROWS";
4
+    var COLUMNS = "COLUMNS";
5
+    $scope.treeshow = true;
6
+    $scope.searchstate = "";
7
+    $scope.headers = "请选择事件树形列表!";
8
+    var workspace = {};
9
+    $scope.parameters = {};
10
+    $scope.starttimes = {};
11
+    $scope.endtimes = {};
12
+    $scope.category = {};
13
+    $scope.reportName = "报表";
14
+    $scope.allheight = 100;
15
+    $scope.isMaskground = false;
16
+    $scope.group = [];
17
+    //表格
18
+    $scope.rRows = [];
19
+    $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近7天', value: 1 }, { name: '近30天', value: 2 }, { name: '近90天', value: 3 }, { name: '近半年', value: 4 }, { name: '近一年', value: 5 }];
20
+    // var starttime, endtime
21
+    // $scope.starttimes = moment().startOf('month').format('YYYYMMDD');
22
+    // $scope.endtimes = moment().format('YYYYMMDD');
23
+    function startdata() {
24
+        $scope.searchkeys = { 'group': {}, 'quikly': { name: '近7天', value: 1 } };
25
+        $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
26
+        $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
27
+        $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
28
+        $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
29
+    }
30
+    startdata();
31
+    $scope.changeForm = function(paramDateFrom) {
32
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
33
+        $scope.starttimes = moment(paramDateFrom).format('YYYYMMDD');
34
+    }
35
+    $scope.changeTo = function(paramDateTo) {
36
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
37
+        $scope.endtimes = moment(paramDateTo).format('YYYYMMDD');
38
+    }
39
+
40
+
41
+    $scope.open = function($event) {
42
+        $event.preventDefault();
43
+        $event.stopPropagation();
44
+
45
+        $scope.opened = !$scope.opened;
46
+    };
47
+    $scope.endOpen = function($event) {
48
+        $event.preventDefault();
49
+        $event.stopPropagation();
50
+        $scope.startOpened = false;
51
+        $scope.endOpened = !$scope.endOpened;
52
+    };
53
+    $scope.startOpen = function($event) {
54
+        $event.preventDefault();
55
+        $event.stopPropagation();
56
+        $scope.endOpened = false;
57
+        $scope.startOpened = !$scope.startOpened;
58
+    };
59
+    //处理组
60
+    // api_user_data.fetchDataList('group', { "idx": 0, "sum": 1000, "group": { "selectType": "nouser" } }).then(function(data) {
61
+    //     if (data.status == 200) {
62
+    //         $scope.group = data.list;
63
+    //     }
64
+    // })
65
+
66
+    function ConvertDateParameter(parameters) {
67
+        var result = undefined;
68
+        if (angular.isArray(parameters)) {
69
+            // 
70
+        } else {
71
+            result = {};
72
+            for (var k in parameters) {
73
+                if (k.indexOf("Date") > 0) {
74
+                    if (angular.isDate(parameters[k])) {
75
+                        result[k] = moment(parameters[k]).format("YYYY-MM-DD");
76
+                    } else if (angular.isString(parameters[k])) {
77
+                        result[k] = parameters[k];
78
+                    }
79
+                }
80
+            }
81
+        }
82
+        return result;
83
+    }
84
+    $scope.restData = function() {
85
+        $scope.try_async_load();
86
+        startdata();
87
+        $scope.mdxquery();
88
+    }
89
+    $scope.mdxquery = function(key) {
90
+        var changedate = ConvertDateParameter($scope.parameters)
91
+        var fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
92
+        if (key && key.category && key.category.id) {
93
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD"), "categoryId": key.category.id }
94
+        } else {
95
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
96
+        }
97
+        getdata(fildata);
98
+        getdatatwo(fildata);
99
+        getdatathree(fildata);
100
+        // getdatatop3(fildata);
101
+        // getdatatop5(fildata);
102
+        // getdataareaplace(fildata);
103
+        // getlistdata(fildata);
104
+        // getlistdata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
105
+        // getpiedata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
106
+        // getpiedata({ "end": $scope.parameters.paramDateFrom, "start": $scope.parameters.paramDateTo })
107
+    }
108
+    $scope.onChangetime = function(key) {
109
+            if (key.value == 1) {
110
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYY-MM-DD');
111
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
112
+                $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYY-MM-DD").format("YYYY-MM-DD");
113
+                $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYY-MM-DD").format("YYYY-MM-DD");
114
+            } else if (key.value == 2) {
115
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 30).format('YYYY-MM-DD');
116
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
117
+                $scope.parameters.paramDateFrom = $scope.starttimes;
118
+                $scope.parameters.paramDateTo = $scope.endtimes;
119
+            } else if (key.value == 3) {
120
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 90).format('YYYY-MM-DD');
121
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
122
+                $scope.parameters.paramDateFrom = $scope.starttimes;
123
+                $scope.parameters.paramDateTo = $scope.endtimes;
124
+            } else if (key.value == 4) {
125
+                $scope.searchstate = "month";
126
+                $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 6)).format('YYYY-MM-DD');
127
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
128
+                $scope.parameters.paramDateFrom = $scope.starttimes;
129
+                $scope.parameters.paramDateTo = $scope.endtimes;
130
+            } else if (key.value == 5) {
131
+                $scope.searchstate = "month";
132
+                $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 12)).format('YYYY-MM-DD');
133
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
134
+                $scope.parameters.paramDateFrom = $scope.starttimes;
135
+                $scope.parameters.paramDateTo = $scope.endtimes;
136
+            }
137
+            // $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
138
+            // $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
139
+            // $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
140
+            // $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
141
+            // $scope.mdxquery();
142
+        }
143
+        // $scope.onChangegroup = function(key) {
144
+
145
+    // }
146
+    $scope.execute = function() {
147
+        api_report.list($scope.token).then(function(response) {
148
+            $scope.select_treedata = $scope.my_data = response;
149
+        });
150
+    }
151
+
152
+    $scope.searchOptions = function() {
153
+            if (angular.isDefined(workspace.query)) {
154
+                var queryParameters = workspace.query.parameters;
155
+                for (var parm in queryParameters) {
156
+                    if (parm == 'Week') {
157
+
158
+                    } else {
159
+
160
+                    }
161
+                }
162
+            }
163
+        }
164
+        //树形图
165
+        // $scope.inspecttype = {};
166
+
167
+    $scope.my_tree = {};
168
+    $scope.try_async_load = function() {
169
+
170
+        $scope.my_data = [];
171
+        $scope.doing_async = true;
172
+        api_bpm_data.fetchDataList('incidentcategory', { "idx": 0, "sum": 1000 }).then(function(response) {
173
+            if (response.status == 200) {
174
+                var data = response.list;
175
+                var objects = [];
176
+                for (var i = 0; i < data.length; i++) {
177
+                    var object = {};
178
+                    object.id = data[i].id;
179
+                    object.parent = data[i].parent;
180
+                    // if (data[i].parent && data[i].parent.id != 0) {
181
+                    //     object.parent = data[i].parent.id;
182
+                    // }
183
+                    object.label = data[i].category;
184
+                    objects.push(object);
185
+                }
186
+                $scope.my_data = convertParentToChildList(objects);
187
+                $scope.select_treedata = angular.copy($scope.my_data);
188
+                if ($scope.my_data.length > 0) {
189
+                    $scope.doing_async = false;
190
+                }
191
+            } else {
192
+                SweetAlert.swal({
193
+                    title: "系统错误!",
194
+                    text: "请刷新重试!",
195
+                    type: "error"
196
+                });
197
+            }
198
+        });
199
+
200
+
201
+
202
+
203
+    };
204
+    $scope.my_data = [];
205
+
206
+
207
+    function convertListToTree(data, treeMap) {
208
+        var idToNodeMap = {}; //Keeps track of nodes using id as key, for fast lookup
209
+        var root = null; //Initially set our loop to null
210
+        var parentNode = null;
211
+        //loop over data
212
+        for (var i = 0; i < data.length; i++) {
213
+            var datum = data[i];
214
+            //each node will have children, so let's give it a "children" poperty
215
+            datum.children = [];
216
+
217
+            //add an entry for this node to the map so that any future children can
218
+            //lookup the parent
219
+            idToNodeMap[datum.id] = datum;
220
+
221
+            //Does this node have a parent?
222
+            if (typeof datum.parent === "undefined" || datum.parent == null) {
223
+                //Doesn't look like it, so this node is the root of the tree
224
+                root = datum;
225
+                treeMap[datum.id] = root;
226
+            } else {
227
+                //This node has a parent, so let's look it up using the id
228
+                parentNode = idToNodeMap[datum.parent.id];
229
+
230
+                //We don't need this property, so let's delete it.
231
+                delete datum.parent;
232
+
233
+                //Let's add the current node as a child of the parent node.
234
+                parentNode.children.push(datum);
235
+            }
236
+        }
237
+        return root;
238
+        console.log(root)
239
+    }
240
+
241
+    function convertParentToChildList(data) {
242
+        var treeMap = {};
243
+        var list = [];
244
+        convertListToTree(data, treeMap);
245
+        angular.forEach(treeMap, function(item) {
246
+            list.push(item);
247
+        });
248
+        return list;
249
+    }
250
+    $scope.try_async_load();
251
+    // $scope.select_treedata = [];
252
+    $scope.propTypeOptions = [];
253
+    $scope.deselectItem = function(item) {
254
+            console.log(item)
255
+            console.log($scope)
256
+        }
257
+        // 事件分类
258
+    $scope.onFilterCallback = function(item) {
259
+        if (item.children && item.children.length != 0) {
260
+            $scope.searchkeys.category = item;
261
+        } else if (item.item && item.item.id) {
262
+            $scope.searchkeys.category = {};
263
+        }
264
+    }
265
+
266
+    //折线图
267
+    var axilist = [];
268
+    var serieslist = [];
269
+    // var headerlist = [];
270
+    $scope.responsehead = [];
271
+    $scope.responselist = [];
272
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
273
+    var domlleff = document.getElementById("liuliangeff");
274
+    var myChartlleff = echarts.init(domlleff);
275
+    myChartlleff.showLoading({  
276
+        text: '数据加载中...',
277
+        color: '#c23531',
278
+        textColor: '#fff',
279
+        maskColor: 'rgba(255,255,255,0)',
280
+        zlevel: 0
281
+    });
282
+    var optionlleff = null;
283
+    optionlleff = {
284
+        color: ['#D53A35'],
285
+        tooltip: {
286
+            trigger: 'axis',
287
+            //formatter: "{b} <br> 合格率: {c}%"
288
+        },
289
+        grid: {
290
+            top: '10%',
291
+            bottom: '15%',
292
+            left: '3%',
293
+            right: '8%',
294
+            containLabel: true
295
+        },
296
+        xAxis: {
297
+            type: 'category',
298
+            name: '',
299
+            boundaryGap: false,
300
+            axisLine: {
301
+                show: false,
302
+                lineStyle: {
303
+                    color: '#525252'
304
+                }
305
+            },
306
+            axisTick: {
307
+                show: false
308
+            },
309
+            axisLabel: {
310
+                color: '#525252'
311
+            },
312
+            data: axilist
313
+        },
314
+        yAxis: {
315
+            type: 'value',
316
+            name: '',
317
+            minInterval: 1,
318
+            axisLine: {
319
+                show: false,
320
+            },
321
+            axisTick: {
322
+                show: false
323
+            },
324
+            axisLabel: {
325
+                color: '#525252'
326
+            },
327
+            splitLine: {
328
+                lineStyle: {
329
+                    type: 'dotted',
330
+                    color: '#F3F3F3' //F3F3F3	
331
+                }
332
+            }
333
+        },
334
+        "legend": {
335
+            "data": ['事件解决时长'],
336
+        },
337
+        series: {
338
+            // name: '事件解决时长',
339
+            type: 'line',
340
+            symbol: 'none',
341
+            itemStyle: {
342
+                normal: {
343
+                    color: '#4facef'
344
+                }
345
+            },
346
+            lineStyle: {
347
+                normal: {
348
+                    width: 2
349
+                }
350
+            },
351
+            data: serieslist
352
+        }
353
+    };
354
+
355
+    function getdata(time) {
356
+        api_hkreport.incidentreport(time, 'incident_ops_efficiency_response').then(function(data) {
357
+            $scope.responsehead = data.averagelist;
358
+            $scope.responselist = data.list;
359
+            axilist = [];
360
+            angular.forEach(data.graphlist, function(item, index) {
361
+                axilist.push(item.accdate);
362
+                serieslist.push(item.responsetime);
363
+            })
364
+            optionlleff.xAxis.data = axilist;
365
+            myChartlleff.setOption(optionlleff);
366
+            myChartlleff.hideLoading();
367
+        })
368
+    }
369
+    getdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
370
+        //第二个图
371
+        //折线图
372
+    var axilisttwo = [];
373
+    var serieslisttwo = [];
374
+    // var headerlist = [];
375
+    $scope.responsetwohead = [];
376
+    $scope.responsetwolist = [];
377
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
378
+    var domtwoll = document.getElementById("liuliangtwo");
379
+    var myCharttwoll = echarts.init(domtwoll);
380
+    myCharttwoll.showLoading({  
381
+        text: '数据加载中...',
382
+        color: '#c23531',
383
+        textColor: '#fff',
384
+        maskColor: 'rgba(255,255,255,0)',
385
+        zlevel: 0
386
+    });
387
+    var optiontwoll = null;
388
+    optiontwoll = {
389
+        color: ['#D53A35'],
390
+        tooltip: {
391
+            trigger: 'axis',
392
+            //formatter: "{b} <br> 合格率: {c}%"
393
+        },
394
+        grid: {
395
+            top: '10%',
396
+            bottom: '15%',
397
+            left: '3%',
398
+            right: '8%',
399
+            containLabel: true
400
+        },
401
+        xAxis: {
402
+            type: 'category',
403
+            name: '',
404
+            boundaryGap: false,
405
+            axisLine: {
406
+                show: false,
407
+                lineStyle: {
408
+                    color: '#525252'
409
+                }
410
+            },
411
+            axisTick: {
412
+                show: false
413
+            },
414
+            axisLabel: {
415
+                color: '#525252'
416
+            },
417
+            data: axilisttwo
418
+        },
419
+        yAxis: {
420
+            type: 'value',
421
+            name: '',
422
+            minInterval: 1,
423
+            axisLine: {
424
+                show: false,
425
+            },
426
+            axisTick: {
427
+                show: false
428
+            },
429
+            axisLabel: {
430
+                color: '#525252'
431
+            },
432
+            splitLine: {
433
+                lineStyle: {
434
+                    type: 'dotted',
435
+                    color: '#F3F3F3' //F3F3F3	
436
+                }
437
+            }
438
+        },
439
+        "legend": {
440
+            "data": ['事件解决时长'],
441
+        },
442
+        series: {
443
+            // name: '事件解决时长',
444
+            type: 'line',
445
+            symbol: 'none',
446
+            itemStyle: {
447
+                normal: {
448
+                    color: '#4facef'
449
+                }
450
+            },
451
+            lineStyle: {
452
+                normal: {
453
+                    width: 2
454
+                }
455
+            },
456
+            data: serieslisttwo
457
+        }
458
+    };
459
+
460
+    function getdatatwo(time) {
461
+        api_hkreport.incidentreport(time, 'incident_ops_efficiency_solve').then(function(data) {
462
+            $scope.responsetwohead = data.averagelist;
463
+            $scope.responsetwolist = data.list;
464
+            axilisttwo = [];
465
+            angular.forEach(data.graphlist, function(item, index) {
466
+                axilisttwo.push(item.accdate);
467
+                serieslisttwo.push(item.responsetime);
468
+            })
469
+            optiontwoll.xAxis.data = axilisttwo;
470
+            myCharttwoll.setOption(optiontwoll);
471
+            myCharttwoll.hideLoading();
472
+        })
473
+    }
474
+    getdatatwo({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
475
+        //第二个图,逾期事件
476
+        //折线图
477
+    var axilistthree = [];
478
+    var serieslistthree = [];
479
+    // var headerlist = [];
480
+    $scope.responsethreehead = [];
481
+    $scope.responsethreelist = [];
482
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
483
+    var domthreell = document.getElementById("liuliangthree");
484
+    var myChartthreell = echarts.init(domthreell);
485
+    myChartthreell.showLoading({  
486
+        text: '数据加载中...',
487
+        color: '#c23531',
488
+        textColor: '#fff',
489
+        maskColor: 'rgba(255,255,255,0)',
490
+        zlevel: 0
491
+    });
492
+    var optionthreell = null;
493
+    optionthreell = {
494
+        color: ['#D53A35'],
495
+        tooltip: {
496
+            trigger: 'axis',
497
+            //formatter: "{b} <br> 合格率: {c}%"
498
+        },
499
+        grid: {
500
+            top: '10%',
501
+            bottom: '15%',
502
+            left: '3%',
503
+            right: '8%',
504
+            containLabel: true
505
+        },
506
+        xAxis: {
507
+            type: 'category',
508
+            name: '',
509
+            boundaryGap: false,
510
+            axisLine: {
511
+                show: false,
512
+                lineStyle: {
513
+                    color: '#525252'
514
+                }
515
+            },
516
+            axisTick: {
517
+                show: false
518
+            },
519
+            axisLabel: {
520
+                color: '#525252'
521
+            },
522
+            data: axilisttwo
523
+        },
524
+        yAxis: {
525
+            type: 'value',
526
+            name: '',
527
+            minInterval: 1,
528
+            axisLine: {
529
+                show: false,
530
+            },
531
+            axisTick: {
532
+                show: false
533
+            },
534
+            axisLabel: {
535
+                color: '#525252'
536
+            },
537
+            splitLine: {
538
+                lineStyle: {
539
+                    type: 'dotted',
540
+                    color: '#F3F3F3' //F3F3F3	
541
+                }
542
+            }
543
+        },
544
+        "legend": {
545
+            "data": ['事件解决时长'],
546
+        },
547
+        series: {
548
+            // name: '事件解决时长',
549
+            type: 'line',
550
+            symbol: 'none',
551
+            itemStyle: {
552
+                normal: {
553
+                    color: '#4facef'
554
+                }
555
+            },
556
+            lineStyle: {
557
+                normal: {
558
+                    width: 2
559
+                }
560
+            },
561
+            data: serieslisttwo
562
+        }
563
+    };
564
+
565
+    function getdatathree(time) {
566
+        api_hkreport.incidentreport(time, 'incident_ops_efficiency_overdue').then(function(data) {
567
+            $scope.responsethreehead = data.averagelist;
568
+            $scope.responsethreelist = data.list;
569
+            axilistthree = [];
570
+            angular.forEach(data.graphlist, function(item, index) {
571
+                axilistthree.push(item.accdate);
572
+                serieslisttwo.push(item.responsetime);
573
+            })
574
+            optionthreell.xAxis.data = axilistthree;
575
+            myChartthreell.setOption(optionthreell);
576
+            myChartthreell.hideLoading();
577
+        })
578
+    }
579
+    getdatathree({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
580
+
581
+}]);

+ 461 - 0
assets/js/controllers/report/handlegroup.js

@@ -0,0 +1,461 @@
1
+'use strict';
2
+app.controller('reporthandlegroupCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport) {
3
+    var ROWS = "ROWS";
4
+    var COLUMNS = "COLUMNS";
5
+    $scope.treeshow = true;
6
+    $scope.searchstate = "";
7
+    $scope.headers = "请选择事件树形列表!";
8
+    var workspace = {};
9
+    $scope.parameters = {};
10
+    $scope.starttimes = {};
11
+    $scope.endtimes = {};
12
+    $scope.category = {};
13
+    $scope.reportName = "报表";
14
+    $scope.allheight = 100;
15
+    $scope.isMaskground = false;
16
+    //表格
17
+    $scope.rRows = [];
18
+    $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近7天', value: 1 }, { name: '近30天', value: 2 }, { name: '近90天', value: 3 }, { name: '近半年', value: 4 }, { name: '近一年', value: 5 }];
19
+    // var starttime, endtime
20
+    // $scope.starttimes = moment().startOf('month').format('YYYYMMDD');
21
+    // $scope.endtimes = moment().format('YYYYMMDD');
22
+    function startdata() {
23
+        $scope.searchkeys = { 'group': {}, 'quikly': { name: '近7天', value: 1 } };
24
+        $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
25
+        $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
26
+        $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
27
+        $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
28
+    }
29
+    startdata();
30
+    $scope.changeForm = function(paramDateFrom) {
31
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
32
+        $scope.starttimes = moment(paramDateFrom).format('YYYYMMDD');
33
+    }
34
+    $scope.changeTo = function(paramDateTo) {
35
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
36
+        $scope.endtimes = moment(paramDateTo).format('YYYYMMDD');
37
+    }
38
+
39
+
40
+    $scope.open = function($event) {
41
+        $event.preventDefault();
42
+        $event.stopPropagation();
43
+
44
+        $scope.opened = !$scope.opened;
45
+    };
46
+    $scope.endOpen = function($event) {
47
+        $event.preventDefault();
48
+        $event.stopPropagation();
49
+        $scope.startOpened = false;
50
+        $scope.endOpened = !$scope.endOpened;
51
+    };
52
+    $scope.startOpen = function($event) {
53
+        $event.preventDefault();
54
+        $event.stopPropagation();
55
+        $scope.endOpened = false;
56
+        $scope.startOpened = !$scope.startOpened;
57
+    };
58
+
59
+    function ConvertDateParameter(parameters) {
60
+        var result = undefined;
61
+        if (angular.isArray(parameters)) {
62
+            // 
63
+        } else {
64
+            result = {};
65
+            for (var k in parameters) {
66
+                if (k.indexOf("Date") > 0) {
67
+                    if (angular.isDate(parameters[k])) {
68
+                        result[k] = moment(parameters[k]).format("YYYY-MM-DD");
69
+                    } else if (angular.isString(parameters[k])) {
70
+                        result[k] = parameters[k];
71
+                    }
72
+                }
73
+            }
74
+        }
75
+        return result;
76
+    }
77
+    $scope.restData = function() {
78
+        startdata();
79
+        $scope.mdxquery();
80
+    }
81
+    $scope.mdxquery = function(key) {
82
+        var changedate = ConvertDateParameter($scope.parameters)
83
+        getdata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
84
+            // getlistdata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
85
+            // getpiedata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
86
+            // getpiedata({ "end": $scope.parameters.paramDateFrom, "start": $scope.parameters.paramDateTo })
87
+    }
88
+    $scope.onChangetime = function(key) {
89
+        if (key.value == 1) {
90
+            $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYY-MM-DD');
91
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
92
+            $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYY-MM-DD").format("YYYY-MM-DD");
93
+            $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYY-MM-DD").format("YYYY-MM-DD");
94
+        } else if (key.value == 2) {
95
+            $scope.starttimes = moment(new Date().getTime() - 86400000 * 30).format('YYYY-MM-DD');
96
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
97
+            $scope.parameters.paramDateFrom = $scope.starttimes;
98
+            $scope.parameters.paramDateTo = $scope.endtimes;
99
+        } else if (key.value == 3) {
100
+            $scope.starttimes = moment(new Date().getTime() - 86400000 * 90).format('YYYY-MM-DD');
101
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
102
+            $scope.parameters.paramDateFrom = $scope.starttimes;
103
+            $scope.parameters.paramDateTo = $scope.endtimes;
104
+        } else if (key.value == 4) {
105
+            $scope.searchstate = "month";
106
+            $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 6)).format('YYYY-MM-DD');
107
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
108
+            $scope.parameters.paramDateFrom = $scope.starttimes;
109
+            $scope.parameters.paramDateTo = $scope.endtimes;
110
+        } else if (key.value == 5) {
111
+            $scope.searchstate = "month";
112
+            $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 12)).format('YYYY-MM-DD');
113
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
114
+            $scope.parameters.paramDateFrom = $scope.starttimes;
115
+            $scope.parameters.paramDateTo = $scope.endtimes;
116
+        }
117
+        // $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
118
+        // $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
119
+        // $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
120
+        // $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
121
+        // $scope.mdxquery();
122
+    }
123
+
124
+    // $scope.execute = function() {
125
+    //     api_report.list($scope.token).then(function(response) {
126
+    //         $scope.select_treedata = $scope.my_data = response;
127
+    //     });
128
+    // }
129
+
130
+    $scope.searchOptions = function() {
131
+        if (angular.isDefined(workspace.query)) {
132
+            var queryParameters = workspace.query.parameters;
133
+            for (var parm in queryParameters) {
134
+                if (parm == 'Week') {
135
+
136
+                } else {
137
+
138
+                }
139
+            }
140
+        }
141
+    }
142
+
143
+    //pie 工单解决率
144
+    // $scope.pielenddata = ["处理人", "处理人1", "处理人2"];
145
+    // $scope.piebodydata = [{ "value": 1, "name": "处理人", "proportion": "25%" }, { "value": 1, "name": "处理人1", "proportion": "25%" }, { "value": 2, "name": "处理人2", "proportion": "50%" }];
146
+    $scope.pielenddata = [];
147
+    $scope.piebodydata = [];
148
+    var domgroup = document.getElementById("reportgroup");
149
+    var myChartgroup = echarts.init(domgroup);
150
+    var app = {};
151
+    var option = null;
152
+    myChartgroup.showLoading({  
153
+        text: '数据加载中...',
154
+        color: '#c23531',
155
+        textColor: '#fff',
156
+        maskColor: 'rgba(255,255,255,0)',
157
+        zlevel: 0
158
+    });
159
+    myChartgroup.hideLoading();
160
+    option = {
161
+        title: {
162
+            subtext: 0,
163
+            text: "事件总数",
164
+            itemGap: 3,
165
+            "x": '24%',
166
+            "y": '40%',
167
+            textAlign: "center",
168
+            "textStyle": {
169
+                "fontWeight": 'normal',
170
+                "fontSize": 12,
171
+                "color": '#333',
172
+
173
+            },
174
+            "subtextStyle": {
175
+                "fontWeight": 'normal',
176
+                "fontSize": 18,
177
+                "color": '#005395',
178
+                "lineHeight": 14
179
+            },
180
+
181
+        },
182
+        tooltip: {
183
+            "backgroundColor": "rgba(0,0,0,9)",
184
+            "textStyle": {
185
+                "fontSize": 12,
186
+                "color": '#f9f9f9',
187
+            },
188
+            trigger: 'item',
189
+            formatter: "{b}: {c} ({d}%)"
190
+        },
191
+        legend: {
192
+            orient: 'vertical',
193
+            icon: "circle",
194
+            x: '50%',
195
+            y: 'center',
196
+            itemGap: 10,
197
+            itemWidth: 8,
198
+            itemHeight: 8,
199
+            borderRadius: 4,
200
+            textStyle: {
201
+                color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
202
+            },
203
+            data: $scope.pielenddata,
204
+            formatter: function(param) {
205
+                for (var i = 0; i < $scope.pielenddata.length; i++) {
206
+                    if ($scope.piebodydata[i].name == param) {
207
+                        return '    ' + $scope.piebodydata[i].name + '  |  ' + $scope.piebodydata[i].value + '    ' + $scope.piebodydata[i].proportion + '%';
208
+                    }
209
+                }
210
+            },
211
+            textStyle: {
212
+                rich: {
213
+                    white: {
214
+                        color: "#fff",
215
+                        fontSize: 12,
216
+                        padding: [6, 0, 0, 0]
217
+                    }
218
+                }
219
+            }
220
+        },
221
+        series: [{
222
+            // name: $scope.startlist.title,
223
+            type: 'pie',
224
+            radius: ['70%', '85%'],
225
+            center: ['25%', '50%'],
226
+            color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
227
+            hoverAnimation: true,
228
+            label: {
229
+                normal: {
230
+                    show: false,
231
+                    position: 'center'
232
+                },
233
+                formatter: [
234
+                    '{a|这段文本采用样式a}',
235
+                    '{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}'
236
+                ].join('\n'),
237
+
238
+                rich: {
239
+                    a: {
240
+                        color: 'red',
241
+                        lineHeight: 10
242
+                    },
243
+                    b: {
244
+                        backgroundColor: {
245
+                            image: 'xxx/xxx.jpg'
246
+                        },
247
+                        height: 40
248
+                    },
249
+                    x: {
250
+                        fontSize: 18,
251
+                        fontFamily: 'Microsoft YaHei',
252
+                        borderColor: '#449933',
253
+                        borderRadius: 4
254
+                    },
255
+                }
256
+            },
257
+            labelLine: {
258
+                normal: {
259
+                    show: false
260
+                }
261
+            },
262
+            data: $scope.piebodydata
263
+        }]
264
+    };
265
+
266
+    // if (option && typeof option === "object") {
267
+    //     myChart.setOption(option);
268
+    //     myChart.hideLoading();
269
+    // }
270
+
271
+    // function getpiedata(time) {
272
+    //     api_hkreport.incidentreport(time, 'incident_source_pie').then(function(data) {
273
+    //         var sum = 0
274
+    //         angular.forEach(data.data[1], function(item, index) {
275
+    //             data.data[1][index].value = data.data[1][index].count;
276
+    //             sum += Number(data.data[1][index].value);
277
+    //         })
278
+    //         $scope.pielenddata = data.data[0];
279
+    //         $scope.piebodydata = data.data[1];
280
+    //         option.series[0].data = $scope.piebodydata;
281
+    //         option.legend.data = $scope.pielenddata;
282
+    //         option.title.subtext = sum;
283
+    //         myChart.setOption(option);
284
+    //         myChart.hideLoading();
285
+    //     })
286
+    // }
287
+    // getpiedata({ "end": $scope.parameters.paramDateFrom, "start": $scope.parameters.paramDateTo })
288
+
289
+    //bar 存储容量
290
+    //start事件月统计图
291
+    var domfaultgroup = document.getElementById("faultgroup");
292
+    var myChartfaultgroup = echarts.init(domfaultgroup);
293
+    var app = {};
294
+    var optionfaultgroup = null;
295
+    app.title = '当月事件工单处理TOP5';
296
+    var XData = [];
297
+    var yData = [];
298
+    // XData.map(function() {
299
+    //         yData.push((Math.random() * 1000 + 100).toFixed(0))
300
+    //     })
301
+    // var dataMin=parseInt(Math.min.apply(null, yData)/2);
302
+    myChartfaultgroup.showLoading({  
303
+        text: '数据加载中...',
304
+        color: '#c23531',
305
+        textColor: '#fff',
306
+        maskColor: 'rgba(255,255,255,0)',
307
+        zlevel: 0
308
+    });
309
+    myChartfaultgroup.hideLoading();
310
+    optionfaultgroup = {
311
+        title: {
312
+            // text: '(件)故障数量',
313
+            x: '10',
314
+            y: '0',
315
+            textStyle: {
316
+                fontWeight: 'normal',
317
+                fontSize: 12,
318
+                color: "#56c9ff",
319
+            }
320
+        },
321
+        xAxis: {
322
+            type: 'value',
323
+            axisTick: {
324
+                show: false
325
+            },
326
+            splitLine: {
327
+                show: true,
328
+                lineStyle: {
329
+                    type: 'dashed',
330
+                    color: '#eee'
331
+                }
332
+            },
333
+            splitArea: {
334
+                show: false
335
+            },
336
+            // data: XData,
337
+            axisLine: {
338
+                show: false,
339
+                lineStyle: {
340
+                    color: '#ddd'
341
+                }
342
+            },
343
+            axisLabel: {
344
+                textStyle: {
345
+                    color: '#999999',
346
+                    fontSize: 12,
347
+                }
348
+            },
349
+        },
350
+        yAxis: {
351
+            type: 'category',
352
+            data: [],
353
+            axisTick: {
354
+                show: false
355
+            },
356
+            splitLine: {
357
+                show: false
358
+            },
359
+            splitArea: {
360
+                show: false
361
+            },
362
+            axisLabel: {
363
+                show: true,
364
+                textStyle: {
365
+                    color: '#999999',
366
+                    fontSize: 12,
367
+                }
368
+            },
369
+            axisLine: {
370
+                show: true,
371
+                lineStyle: {
372
+                    color: '#cecece'
373
+                }
374
+            }
375
+        },
376
+        grid: {
377
+            left: 10,
378
+            top: 25,
379
+            bottom: 0,
380
+            right: 20,
381
+            containLabel: true
382
+        },
383
+        "tooltip": {
384
+            "trigger": "item",
385
+            "textStyle": {
386
+                "fontSize": 12
387
+            },
388
+            "formatter": "{b0}:{c0}"
389
+        },
390
+        series: {
391
+            type: "bar",
392
+            itemStyle: {
393
+                normal: {
394
+                    color: "#005395",
395
+                }
396
+            },
397
+            label: {
398
+                normal: {
399
+                    show: true,
400
+                    position: 'right',
401
+                    textStyle: {
402
+                        // color: '# 56 c9ff '
403
+                    }
404
+                }
405
+            },
406
+            barWidth: 18,
407
+            // barWidth: '30%',
408
+            // data: yData
409
+            data: [0, 0, 0, 0, 0]
410
+        }
411
+    };
412
+    // if (optionfault && typeof optionfault === "object") {
413
+    //     myChartfault.setOption(optionfault, true);
414
+    // }
415
+
416
+
417
+    function getdata(time) {
418
+        api_hkreport.incidentreport(time, 'incident_handler_group').then(function(data) {
419
+            // var sum = 0
420
+            // angular.forEach(data.data[1], function(item, index) {
421
+            //     data.data[1][index].value = data.data[1][index].count;
422
+            //     sum += Number(data.data[1][index].value);
423
+            // })
424
+            $scope.rRows = data.list; //表格
425
+            //饼图
426
+            // $scope.pielenddata = data.pieChart;
427
+            $scope.piebodydata = data.pieChart;
428
+            $scope.pielenddata = [];
429
+            angular.forEach($scope.piebodydata, function(item, index) {
430
+                $scope.pielenddata.push(item.name);
431
+            })
432
+            option.series[0].data = $scope.piebodydata;
433
+            option.legend.data = $scope.pielenddata;
434
+            // option.title.subtext = sum;
435
+            myChartgroup.setOption(option);
436
+            myChartgroup.hideLoading();
437
+            //柱状图
438
+            var barGraph = [];
439
+            var baryx = [];
440
+            angular.forEach(data.barGraph, function(item) {
441
+                barGraph.push(item.num);
442
+                baryx.push(item.name);
443
+            })
444
+            optionfaultgroup.yAxis.data = baryx.reverse();
445
+            optionfaultgroup.series.data = barGraph.reverse();
446
+            myChartfaultgroup.setOption(optionfaultgroup);
447
+            myChartfaultgroup.hideLoading();
448
+        })
449
+    }
450
+    getdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
451
+
452
+    //表格
453
+    $scope.rRows = [];
454
+
455
+    // function getlistdata(time) {
456
+    //     api_hkreport.incidentreport(time, 'incident_source').then(function(data) {
457
+    //         $scope.rRows = data.data;
458
+    //     })
459
+    // }
460
+    // getlistdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
461
+}]);

+ 459 - 0
assets/js/controllers/report/handlepeople.js

@@ -0,0 +1,459 @@
1
+'use strict';
2
+app.controller('reporthandlepeopleCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", "api_user_data", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport, api_user_data) {
3
+    var ROWS = "ROWS";
4
+    var COLUMNS = "COLUMNS";
5
+    $scope.treeshow = true;
6
+    $scope.searchstate = "";
7
+    $scope.headers = "请选择事件树形列表!";
8
+    var workspace = {};
9
+    $scope.parameters = {};
10
+    $scope.starttimes = {};
11
+    $scope.endtimes = {};
12
+    $scope.category = {};
13
+    $scope.reportName = "报表";
14
+    $scope.allheight = 100;
15
+    $scope.isMaskground = false;
16
+    $scope.group = [];
17
+    //表格
18
+    $scope.rRowspeople = [];
19
+    $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近7天', value: 1 }, { name: '近30天', value: 2 }, { name: '近90天', value: 3 }, { name: '近半年', value: 4 }, { name: '近一年', value: 5 }];
20
+    // var starttime, endtime
21
+    // $scope.starttimes = moment().startOf('month').format('YYYYMMDD');
22
+    // $scope.endtimes = moment().format('YYYYMMDD');
23
+    function startdata() {
24
+        $scope.searchkeys = { 'group': {}, 'quikly': { name: '近7天', value: 1 } };
25
+        $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
26
+        $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
27
+        $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
28
+        $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
29
+    }
30
+    startdata();
31
+    $scope.changeForm = function(paramDateFrom) {
32
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
33
+        $scope.starttimes = moment(paramDateFrom).format('YYYYMMDD');
34
+    }
35
+    $scope.changeTo = function(paramDateTo) {
36
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
37
+        $scope.endtimes = moment(paramDateTo).format('YYYYMMDD');
38
+    }
39
+
40
+
41
+    $scope.open = function($event) {
42
+        $event.preventDefault();
43
+        $event.stopPropagation();
44
+
45
+        $scope.opened = !$scope.opened;
46
+    };
47
+    $scope.endOpen = function($event) {
48
+        $event.preventDefault();
49
+        $event.stopPropagation();
50
+        $scope.startOpened = false;
51
+        $scope.endOpened = !$scope.endOpened;
52
+    };
53
+    $scope.startOpen = function($event) {
54
+        $event.preventDefault();
55
+        $event.stopPropagation();
56
+        $scope.endOpened = false;
57
+        $scope.startOpened = !$scope.startOpened;
58
+    };
59
+    //处理组
60
+    api_user_data.fetchDataList('group', { "idx": 0, "sum": 1000, "group": { "selectType": "nouser" } }).then(function(data) {
61
+        if (data.status == 200) {
62
+            $scope.group = data.list;
63
+        }
64
+    })
65
+
66
+    function ConvertDateParameter(parameters) {
67
+        var result = undefined;
68
+        if (angular.isArray(parameters)) {
69
+            // 
70
+        } else {
71
+            result = {};
72
+            for (var k in parameters) {
73
+                if (k.indexOf("Date") > 0) {
74
+                    if (angular.isDate(parameters[k])) {
75
+                        result[k] = moment(parameters[k]).format("YYYY-MM-DD");
76
+                    } else if (angular.isString(parameters[k])) {
77
+                        result[k] = parameters[k];
78
+                    }
79
+                }
80
+            }
81
+        }
82
+        return result;
83
+    }
84
+    $scope.restData = function() {
85
+        startdata();
86
+        $scope.mdxquery();
87
+    }
88
+    $scope.mdxquery = function(key) {
89
+        var changedate = ConvertDateParameter($scope.parameters)
90
+        var fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
91
+        if (key && key.group && key.group.id) {
92
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD"), "groupId": key.group.id }
93
+        } else {
94
+            fildata = { "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") }
95
+        }
96
+        getdata(fildata)
97
+            // getlistdata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
98
+            // getpiedata({ "start": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "end": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
99
+            // getpiedata({ "end": $scope.parameters.paramDateFrom, "start": $scope.parameters.paramDateTo })
100
+    }
101
+    $scope.onChangetime = function(key) {
102
+            if (key.value == 1) {
103
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYY-MM-DD');
104
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
105
+                $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYY-MM-DD").format("YYYY-MM-DD");
106
+                $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYY-MM-DD").format("YYYY-MM-DD");
107
+            } else if (key.value == 2) {
108
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 30).format('YYYY-MM-DD');
109
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
110
+                $scope.parameters.paramDateFrom = $scope.starttimes;
111
+                $scope.parameters.paramDateTo = $scope.endtimes;
112
+            } else if (key.value == 3) {
113
+                $scope.starttimes = moment(new Date().getTime() - 86400000 * 90).format('YYYY-MM-DD');
114
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
115
+                $scope.parameters.paramDateFrom = $scope.starttimes;
116
+                $scope.parameters.paramDateTo = $scope.endtimes;
117
+            } else if (key.value == 4) {
118
+                $scope.searchstate = "month";
119
+                $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 6)).format('YYYY-MM-DD');
120
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
121
+                $scope.parameters.paramDateFrom = $scope.starttimes;
122
+                $scope.parameters.paramDateTo = $scope.endtimes;
123
+            } else if (key.value == 5) {
124
+                $scope.searchstate = "month";
125
+                $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 12)).format('YYYY-MM-DD');
126
+                $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
127
+                $scope.parameters.paramDateFrom = $scope.starttimes;
128
+                $scope.parameters.paramDateTo = $scope.endtimes;
129
+            }
130
+            // $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
131
+            // $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
132
+            // $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
133
+            // $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
134
+            // $scope.mdxquery();
135
+        }
136
+        // $scope.onChangegroup = function(key) {
137
+
138
+    // }
139
+    // $scope.execute = function() {
140
+    //     api_report.list($scope.token).then(function(response) {
141
+    //         $scope.select_treedata = $scope.my_data = response;
142
+    //     });
143
+    // }
144
+
145
+    $scope.searchOptions = function() {
146
+        if (angular.isDefined(workspace.query)) {
147
+            var queryParameters = workspace.query.parameters;
148
+            for (var parm in queryParameters) {
149
+                if (parm == 'Week') {
150
+
151
+                } else {
152
+
153
+                }
154
+            }
155
+        }
156
+    }
157
+
158
+    //pie 工单解决率
159
+    // $scope.pielenddata = ["处理人", "处理人1", "处理人2"];
160
+    // $scope.piebodydata = [{ "value": 1, "name": "处理人", "proportion": "25%" }, { "value": 1, "name": "处理人1", "proportion": "25%" }, { "value": 2, "name": "处理人2", "proportion": "50%" }];
161
+    $scope.pielenddata = [];
162
+    $scope.piebodydata = [];
163
+    var dompeople = document.getElementById("reportpeople");
164
+    var myChartpeople = echarts.init(dompeople);
165
+    var app = {};
166
+    var optionpeople = null;
167
+    myChartpeople.showLoading({  
168
+        text: '数据加载中...',
169
+        color: '#c23531',
170
+        textColor: '#fff',
171
+        maskColor: 'rgba(255,255,255,0)',
172
+        zlevel: 0
173
+    });
174
+    myChartpeople.hideLoading();
175
+    optionpeople = {
176
+        title: {
177
+            subtext: 0,
178
+            text: "事件总数(件)",
179
+            itemGap: 3,
180
+            "x": '15%',
181
+            "y": '40%',
182
+            textAlign: "center",
183
+            "textStyle": {
184
+                "fontWeight": 'normal',
185
+                "fontSize": 12,
186
+                "color": '#333',
187
+
188
+            },
189
+            "subtextStyle": {
190
+                "fontWeight": 'normal',
191
+                "fontSize": 18,
192
+                "color": '#005395',
193
+                "lineHeight": 14
194
+            },
195
+
196
+        },
197
+        tooltip: {
198
+            "backgroundColor": "rgba(0,0,0,9)",
199
+            "textStyle": {
200
+                "fontSize": 12,
201
+                "color": '#f9f9f9',
202
+            },
203
+            trigger: 'item',
204
+            formatter: "{b} : {c} ({d}%)"
205
+        },
206
+        legend: {
207
+            orient: 'vertical',
208
+            icon: "circle",
209
+            x: '30%',
210
+            y: 'center',
211
+            // type: 'scroll',
212
+            pageFormatter: {
213
+                current: 1,
214
+                total: 2
215
+            },
216
+            pagemode: true,
217
+            itemGap: 10,
218
+            itemWidth: 8,
219
+            itemHeight: 8,
220
+            borderRadius: 4,
221
+            textStyle: {
222
+                color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
223
+            },
224
+            data: $scope.pielenddata,
225
+            formatter: function(param) {
226
+                for (var i = 0; i < $scope.pielenddata.length; i++) {
227
+                    if ($scope.piebodydata[i].name == param) {
228
+                        return '    ' + $scope.piebodydata[i].name + '/' + $scope.piebodydata[i].groupname + '  |  ' + $scope.piebodydata[i].value + '    ' + $scope.piebodydata[i].proportion + '%';
229
+                    }
230
+                }
231
+            },
232
+            textStyle: {
233
+                rich: {
234
+                    white: {
235
+                        color: "#fff",
236
+                        fontSize: 12,
237
+                        padding: [6, 0, 0, 0]
238
+                    }
239
+                }
240
+            }
241
+        },
242
+        series: [{
243
+            // name: $scope.startlist.title,
244
+            type: 'pie',
245
+            radius: ['60%', '80%'],
246
+            center: ['15%', '50%'],
247
+            color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
248
+            hoverAnimation: true,
249
+            label: {
250
+                normal: {
251
+                    show: false,
252
+                    position: 'center'
253
+                },
254
+                formatter: [
255
+                    '{a|这段文本采用样式a}',
256
+                    '{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}'
257
+                ].join('\n'),
258
+
259
+                rich: {
260
+                    a: {
261
+                        color: 'red',
262
+                        lineHeight: 10
263
+                    },
264
+                    b: {
265
+                        backgroundColor: {
266
+                            image: 'xxx/xxx.jpg'
267
+                        },
268
+                        height: 40
269
+                    },
270
+                    x: {
271
+                        fontSize: 18,
272
+                        fontFamily: 'Microsoft YaHei',
273
+                        borderColor: '#449933',
274
+                        borderRadius: 4
275
+                    },
276
+                }
277
+            },
278
+            labelLine: {
279
+                normal: {
280
+                    show: false
281
+                }
282
+            },
283
+            data: $scope.piebodydata
284
+        }]
285
+    };
286
+
287
+
288
+
289
+    //bar 存储容量
290
+    //start事件月统计图
291
+    var domfaultpeople = document.getElementById("faultpeople");
292
+    var myChartfaultpeople = echarts.init(domfaultpeople);
293
+    var app = {};
294
+    var optionfaultpeople = null;
295
+    app.title = '当月事件工单处理TOP5';
296
+    var XData = [];
297
+    var yData = [];
298
+    // XData.map(function() {
299
+    //         yData.push((Math.random() * 1000 + 100).toFixed(0))
300
+    //     })
301
+    // var dataMin=parseInt(Math.min.apply(null, yData)/2);
302
+    myChartfaultpeople.showLoading({  
303
+        text: '数据加载中...',
304
+        color: '#c23531',
305
+        textColor: '#fff',
306
+        maskColor: 'rgba(255,255,255,0)',
307
+        zlevel: 0
308
+    });
309
+    myChartfaultpeople.hideLoading();
310
+    optionfaultpeople = {
311
+        title: {
312
+            // text: '(件)故障数量',
313
+            x: '10',
314
+            y: '0',
315
+            textStyle: {
316
+                fontWeight: 'normal',
317
+                fontSize: 12,
318
+                color: "#56c9ff",
319
+            }
320
+        },
321
+        xAxis: {
322
+            type: 'value',
323
+            axisTick: {
324
+                show: false
325
+            },
326
+            splitLine: {
327
+                show: true,
328
+                lineStyle: {
329
+                    type: 'dashed',
330
+                    color: '#eee'
331
+                }
332
+            },
333
+            splitArea: {
334
+                show: false
335
+            },
336
+            // data: XData,
337
+            axisLine: {
338
+                show: false,
339
+                lineStyle: {
340
+                    color: '#ddd'
341
+                }
342
+            },
343
+            axisLabel: {
344
+                textStyle: {
345
+                    color: '#999999',
346
+                    fontSize: 12,
347
+                }
348
+            },
349
+        },
350
+        yAxis: {
351
+            type: 'category',
352
+            data: [],
353
+            axisTick: {
354
+                show: false
355
+            },
356
+            splitLine: {
357
+                show: false
358
+            },
359
+            splitArea: {
360
+                show: false
361
+            },
362
+            axisLabel: {
363
+                show: true,
364
+                textStyle: {
365
+                    color: '#999999',
366
+                    fontSize: 12,
367
+                }
368
+            },
369
+            axisLine: {
370
+                show: true,
371
+                lineStyle: {
372
+                    color: '#cecece'
373
+                }
374
+            }
375
+        },
376
+        grid: {
377
+            left: 10,
378
+            top: 25,
379
+            bottom: 0,
380
+            right: 20,
381
+            containLabel: true
382
+        },
383
+        "tooltip": {
384
+            "trigger": "item",
385
+            "textStyle": {
386
+                "fontSize": 12
387
+            },
388
+            "formatter": "{b0}:{c0}"
389
+        },
390
+        series: {
391
+            type: "bar",
392
+            itemStyle: {
393
+                normal: {
394
+                    color: "#005395",
395
+                }
396
+            },
397
+            label: {
398
+                normal: {
399
+                    show: true,
400
+                    position: 'right',
401
+                    textStyle: {
402
+                        // color: '# 56 c9ff '
403
+                    }
404
+                }
405
+            },
406
+            barWidth: 18,
407
+            // barWidth: '30%',
408
+            // data: yData
409
+            data: [0, 0, 0, 0, 0]
410
+        }
411
+    };
412
+
413
+
414
+    function getdata(time) {
415
+        api_hkreport.incidentreport(time, 'incident_handler').then(function(data) {
416
+            // var sum = 0
417
+            // angular.forEach(data.data[1], function(item, index) {
418
+            //     data.data[1][index].value = data.data[1][index].count;
419
+            //     sum += Number(data.data[1][index].value);
420
+            // })
421
+            $scope.rRowspeople = data.list; //表格
422
+            //饼图
423
+            // $scope.pielenddata = data.pieChart;
424
+            $scope.piebodydata = data.pieChart;
425
+            $scope.pielenddata = [];
426
+            angular.forEach($scope.piebodydata, function(item, index) {
427
+                $scope.piebodydata[index].name = item.account;
428
+                $scope.pielenddata.push(item.account);
429
+            })
430
+            optionpeople.series[0].data = $scope.piebodydata;
431
+            optionpeople.legend.data = $scope.pielenddata;
432
+            optionpeople.title.subtext = data.pieChartSum;
433
+            myChartpeople.setOption(optionpeople);
434
+            myChartpeople.hideLoading();
435
+            //柱状图
436
+            var barGraph = [];
437
+            var baryx = [];
438
+            angular.forEach(data.barGraph, function(item) {
439
+                barGraph.push(item.sum);
440
+                baryx.push(item.account + '/' + item.groupname);
441
+            })
442
+            optionfaultpeople.yAxis.data = baryx.reverse();
443
+            optionfaultpeople.series.data = barGraph.reverse();
444
+            myChartfaultpeople.setOption(optionfaultpeople);
445
+            myChartfaultpeople.hideLoading();
446
+        })
447
+    }
448
+    getdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
449
+
450
+    //表格
451
+    // $scope.rRows = [];
452
+
453
+    // function getlistdata(time) {
454
+    //     api_hkreport.incidentreport(time, 'incident_source').then(function(data) {
455
+    //         $scope.rRows = data.data;
456
+    //     })
457
+    // }
458
+    // getlistdata({ "end": $scope.parameters.paramDateTo, "start": $scope.parameters.paramDateFrom })
459
+}]);

+ 433 - 0
assets/js/controllers/report/suorce.js

@@ -0,0 +1,433 @@
1
+'use strict';
2
+app.controller('reportsuorceCtrl', ["$scope", "$rootScope", "$state", "$timeout", "$interval", "$http", "$cookieStore", "moment", "SweetAlert", "Restangular", "api_hkreport", function($scope, $rootScope, $state, $timeout, $interval, $http, $cookieStore, moment, SweetAlert, Restangular, api_hkreport) {
3
+    var ROWS = "ROWS";
4
+    var COLUMNS = "COLUMNS";
5
+    $scope.treeshow = true;
6
+    $scope.searchstate = "";
7
+    $scope.headers = "请选择事件树形列表!";
8
+    var workspace = {};
9
+    $scope.parameters = {};
10
+    $scope.starttimes = {};
11
+    $scope.endtimes = {};
12
+    $scope.category = {};
13
+    $scope.reportName = "报表";
14
+    $scope.allheight = 100;
15
+    $scope.isMaskground = false;
16
+    $scope.quikly = [{ name: '自定义', value: 0 }, { name: '近7天', value: 1 }, { name: '近30天', value: 2 }, { name: '近90天', value: 3 }, { name: '近半年', value: 4 }, { name: '近一年', value: 5 }];
17
+    // var starttime, endtime
18
+    // $scope.starttimes = moment().startOf('month').format('YYYYMMDD');
19
+    // $scope.endtimes = moment().format('YYYYMMDD');
20
+    function startdata() {
21
+        $scope.searchkeys = { 'group': {}, 'quikly': { name: '近7天', value: 1 } };
22
+        $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
23
+        $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
24
+        $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
25
+        $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
26
+    }
27
+    startdata();
28
+    $scope.changeForm = function(paramDateFrom) {
29
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
30
+        $scope.starttimes = moment(paramDateFrom).format('YYYYMMDD');
31
+    }
32
+    $scope.changeTo = function(paramDateTo) {
33
+        $scope.searchkeys.quikly = { name: '自定义', value: 0 };
34
+        $scope.endtimes = moment(paramDateTo).format('YYYYMMDD');
35
+    }
36
+
37
+
38
+    $scope.open = function($event) {
39
+        $event.preventDefault();
40
+        $event.stopPropagation();
41
+
42
+        $scope.opened = !$scope.opened;
43
+    };
44
+    $scope.endOpen = function($event) {
45
+        $event.preventDefault();
46
+        $event.stopPropagation();
47
+        $scope.startOpened = false;
48
+        $scope.endOpened = !$scope.endOpened;
49
+    };
50
+    $scope.startOpen = function($event) {
51
+        $event.preventDefault();
52
+        $event.stopPropagation();
53
+        $scope.endOpened = false;
54
+        $scope.startOpened = !$scope.startOpened;
55
+    };
56
+
57
+    function ConvertDateParameter(parameters) {
58
+        var result = undefined;
59
+        if (angular.isArray(parameters)) {
60
+            // 
61
+        } else {
62
+            result = {};
63
+            for (var k in parameters) {
64
+                if (k.indexOf("Date") > 0) {
65
+                    if (angular.isDate(parameters[k])) {
66
+                        result[k] = moment(parameters[k]).format("YYYY-MM-DD");
67
+                    } else if (angular.isString(parameters[k])) {
68
+                        result[k] = parameters[k];
69
+                    }
70
+                }
71
+            }
72
+        }
73
+        return result;
74
+    }
75
+    $scope.restData = function() {
76
+        startdata();
77
+        $scope.mdxquery();
78
+    }
79
+    $scope.mdxquery = function(key) {
80
+        var changedate = ConvertDateParameter($scope.parameters)
81
+        getdata({ "startTime": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "endTime": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
82
+        getlistdata({ "startTime": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "endTime": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
83
+        getpiedata({ "startTime": moment(changedate.paramDateFrom).format("YYYY-MM-DD"), "endTime": moment(changedate.paramDateTo).format("YYYY-MM-DD") })
84
+    }
85
+    $scope.onChangetime = function(key) {
86
+        if (key.value == 1) {
87
+            $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYY-MM-DD');
88
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
89
+            $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYY-MM-DD").format("YYYY-MM-DD");
90
+            $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYY-MM-DD").format("YYYY-MM-DD");
91
+        } else if (key.value == 2) {
92
+            $scope.starttimes = moment(new Date().getTime() - 86400000 * 30).format('YYYY-MM-DD');
93
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
94
+            $scope.parameters.paramDateFrom = $scope.starttimes;
95
+            $scope.parameters.paramDateTo = $scope.endtimes;
96
+        } else if (key.value == 3) {
97
+            $scope.starttimes = moment(new Date().getTime() - 86400000 * 90).format('YYYY-MM-DD');
98
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
99
+            $scope.parameters.paramDateFrom = $scope.starttimes;
100
+            $scope.parameters.paramDateTo = $scope.endtimes;
101
+        } else if (key.value == 4) {
102
+            $scope.searchstate = "month";
103
+            $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 6)).format('YYYY-MM-DD');
104
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
105
+            $scope.parameters.paramDateFrom = $scope.starttimes;
106
+            $scope.parameters.paramDateTo = $scope.endtimes;
107
+        } else if (key.value == 5) {
108
+            $scope.searchstate = "month";
109
+            $scope.starttimes = moment((new Date()).setMonth((new Date()).getMonth() - 12)).format('YYYY-MM-DD');
110
+            $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYY-MM-DD');
111
+            $scope.parameters.paramDateFrom = $scope.starttimes;
112
+            $scope.parameters.paramDateTo = $scope.endtimes;
113
+        }
114
+        // $scope.starttimes = moment(new Date().getTime() - 86400000 * 7).format('YYYYMMDD');
115
+        // $scope.endtimes = moment(new Date().getTime() - 86400000).format('YYYYMMDD');
116
+        // $scope.parameters.paramDateFrom = moment($scope.starttimes, "YYYYMMDD").format("YYYY-MM-DD");
117
+        // $scope.parameters.paramDateTo = moment($scope.endtimes, "YYYYMMDD").format("YYYY-MM-DD");
118
+        // $scope.mdxquery();
119
+    }
120
+
121
+    // $scope.execute = function() {
122
+    //     api_report.list($scope.token).then(function(response) {
123
+    //         $scope.select_treedata = $scope.my_data = response;
124
+    //     });
125
+    // }
126
+
127
+    $scope.searchOptions = function() {
128
+        if (angular.isDefined(workspace.query)) {
129
+            var queryParameters = workspace.query.parameters;
130
+            for (var parm in queryParameters) {
131
+                if (parm == 'Week') {
132
+
133
+                } else {
134
+
135
+                }
136
+            }
137
+        }
138
+    }
139
+
140
+    //pie 工单解决率
141
+    // $scope.pielenddata = ["处理人", "处理人1", "处理人2"];
142
+    // $scope.piebodydata = [{ "value": 1, "name": "处理人", "proportion": "25%" }, { "value": 1, "name": "处理人1", "proportion": "25%" }, { "value": 2, "name": "处理人2", "proportion": "50%" }];
143
+    $scope.pielenddata = [];
144
+    $scope.piebodydata = [];
145
+    var domsuorce = document.getElementById("reportsuorce");
146
+    var myChartsuorce = echarts.init(domsuorce);
147
+    var app = {};
148
+    var optionsuorce = null;
149
+    myChartsuorce.showLoading({  
150
+        text: '数据加载中...',
151
+        color: '#c23531',
152
+        textColor: '#fff',
153
+        maskColor: 'rgba(255,255,255,0)',
154
+        zlevel: 0
155
+    });
156
+    myChartsuorce.hideLoading();
157
+    optionsuorce = {
158
+        title: {
159
+            subtext: 0,
160
+            text: "事件总数",
161
+            itemGap: 3,
162
+            "x": '24%',
163
+            "y": '40%',
164
+            textAlign: "center",
165
+            "textStyle": {
166
+                "fontWeight": 'normal',
167
+                "fontSize": 12,
168
+                "color": '#333',
169
+
170
+            },
171
+            "subtextStyle": {
172
+                "fontWeight": 'normal',
173
+                "fontSize": 18,
174
+                "color": '#005395',
175
+                "lineHeight": 14
176
+            },
177
+
178
+        },
179
+        tooltip: {
180
+            "backgroundColor": "rgba(0,0,0,9)",
181
+            "textStyle": {
182
+                "fontSize": 12,
183
+                "color": '#f9f9f9',
184
+            },
185
+            trigger: 'item',
186
+            formatter: "{a} <br/>{b}: {c} ({d}%)"
187
+        },
188
+        legend: {
189
+            orient: 'vertical',
190
+            icon: "circle",
191
+            x: '50%',
192
+            y: 'center',
193
+            itemGap: 10,
194
+            itemWidth: 8,
195
+            itemHeight: 8,
196
+            borderRadius: 4,
197
+            textStyle: {
198
+                color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
199
+            },
200
+            data: $scope.pielenddata,
201
+            formatter: function(param) {
202
+                for (var i = 0; i < $scope.pielenddata.length; i++) {
203
+                    if ($scope.piebodydata[i].name == param) {
204
+                        return '    ' + $scope.piebodydata[i].name + '  |  ' + $scope.piebodydata[i].count + '    ' + $scope.piebodydata[i].percentage;
205
+                    }
206
+                }
207
+            },
208
+            textStyle: {
209
+                rich: {
210
+                    white: {
211
+                        color: "#fff",
212
+                        fontSize: 12,
213
+                        padding: [6, 0, 0, 0]
214
+                    }
215
+                }
216
+            }
217
+        },
218
+        series: [{
219
+            // name: $scope.startlist.title,
220
+            type: 'pie',
221
+            radius: ['70%', '85%'],
222
+            center: ['25%', '50%'],
223
+            color: ['#49a9ee', '#ffcd61', '#87c966', '#61829d', '#8496A5', '#e6eef4', '#15598F', '#61829d', '#5F9FD1', '#7EAFD6'],
224
+            hoverAnimation: true,
225
+            label: {
226
+                normal: {
227
+                    show: false,
228
+                    position: 'center'
229
+                },
230
+                formatter: [
231
+                    '{a|这段文本采用样式a}',
232
+                    '{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}'
233
+                ].join('\n'),
234
+
235
+                rich: {
236
+                    a: {
237
+                        color: 'red',
238
+                        lineHeight: 10
239
+                    },
240
+                    b: {
241
+                        backgroundColor: {
242
+                            image: 'xxx/xxx.jpg'
243
+                        },
244
+                        height: 40
245
+                    },
246
+                    x: {
247
+                        fontSize: 18,
248
+                        fontFamily: 'Microsoft YaHei',
249
+                        borderColor: '#449933',
250
+                        borderRadius: 4
251
+                    },
252
+                }
253
+            },
254
+            labelLine: {
255
+                normal: {
256
+                    show: false
257
+                }
258
+            },
259
+            data: $scope.piebodydata
260
+        }]
261
+    };
262
+
263
+    if (optionsuorce && typeof optionsuorce === "object") {
264
+        myChartsuorce.setOption(optionsuorce);
265
+        myChartsuorce.hideLoading();
266
+    }
267
+
268
+    function getpiedata(time) {
269
+        api_hkreport.incidentreport(time, 'incident_source_pie').then(function(data) {
270
+            var sum = 0
271
+            angular.forEach(data.data[1], function(item, index) {
272
+                data.data[1][index].value = data.data[1][index].count;
273
+                sum += Number(data.data[1][index].value);
274
+            })
275
+            $scope.pielenddata = data.data[0];
276
+            $scope.piebodydata = data.data[1];
277
+            optionsuorce.series[0].data = $scope.piebodydata;
278
+            optionsuorce.legend.data = $scope.pielenddata;
279
+            optionsuorce.title.subtext = sum;
280
+            myChartsuorce.setOption(optionsuorce);
281
+            myChartsuorce.hideLoading();
282
+        })
283
+    }
284
+    getpiedata({ "endTime": $scope.parameters.paramDateTo, "startTime": $scope.parameters.paramDateFrom })
285
+
286
+    //end 工单解决率
287
+    //折线图
288
+    $scope.headerslist = [];
289
+    var axilist = [];
290
+    var serieslist = [];
291
+    var headerlist = [];
292
+    var datas = [];
293
+    var colorlist = ['#005395', '#49a9ee', '#ffcd62', '#87c966', '#1ea58f'];
294
+    var domllsuorce = document.getElementById("liuliangsuorce");
295
+    var myChartllsuorce = echarts.init(domllsuorce);
296
+    myChartllsuorce.showLoading({  
297
+        text: '数据加载中...',
298
+        color: '#c23531',
299
+        textColor: '#fff',
300
+        maskColor: 'rgba(255,255,255,0)',
301
+        zlevel: 0
302
+    });
303
+    var app = {};
304
+    var optionllsuorce = null;
305
+    app.title = '流量';
306
+    $scope.llmyData = [];
307
+    var zhengliudata = 0;
308
+    var huliudata = 0;
309
+    $scope.zhengliu = 0;
310
+    $scope.huliu = 0;
311
+    // var zwmyData = [];
312
+    // var hlmyData = [];
313
+    var xhuzwmyData = [];
314
+    $scope.zhengliu = 0;
315
+    $scope.huliu = 0;
316
+    optionllsuorce = {
317
+        color: ['#D53A35'],
318
+        tooltip: {
319
+            trigger: 'axis',
320
+            //formatter: "{b} <br> 合格率: {c}%"
321
+        },
322
+        grid: {
323
+            top: '10%',
324
+            bottom: '15%',
325
+            left: '3%',
326
+            right: '8%',
327
+            containLabel: true
328
+        },
329
+        xAxis: {
330
+            type: 'category',
331
+            name: '',
332
+            boundaryGap: false,
333
+            axisLine: {
334
+                show: false,
335
+                lineStyle: {
336
+                    color: '#525252'
337
+                }
338
+            },
339
+            axisTick: {
340
+                show: false
341
+            },
342
+            axisLabel: {
343
+                color: '#525252'
344
+            },
345
+            data: axilist
346
+        },
347
+        yAxis: {
348
+            type: 'value',
349
+            minInterval: 1,
350
+            name: '',
351
+            axisLine: {
352
+                show: false,
353
+            },
354
+            axisTick: {
355
+                show: false
356
+            },
357
+            axisLabel: {
358
+                color: '#525252'
359
+            },
360
+            splitLine: {
361
+                lineStyle: {
362
+                    type: 'dotted',
363
+                    color: '#AAA' //F3F3F3	
364
+                }
365
+            }
366
+        },
367
+        "legend": {
368
+            "bottom": 0,
369
+            // "textStyle": {
370
+            //     "color": "#e6e9ed"
371
+            // },
372
+            // "inactiveColor": "#5a626d",
373
+            // "data": [
374
+            //     "全部机型"
375
+            // ],
376
+            data: headerlist,
377
+            "itemGap": 5,
378
+            "itemWidth": 16,
379
+            "itemHeight": 12,
380
+            "pageTextStyle": {
381
+                "color": "#e6e9ed"
382
+            },
383
+            "pageIconSize": 14
384
+        },
385
+        series: serieslist
386
+    };
387
+
388
+    function getdata(time) {
389
+        api_hkreport.incidentreport(time, 'incident_source_trend').then(function(data) {
390
+            headerlist = data.data[0]
391
+            axilist = data.data[1][0][0];
392
+            angular.forEach(data.data[1], function(item, index) {
393
+                // titledata.push(item.category);
394
+                // datas[index] = [];
395
+                datas = item[1];
396
+                // angular.forEach(item[1], function(itemtwo, indextwo) {
397
+                //     datas = itemtwo;
398
+                // })
399
+                serieslist[index] = {
400
+                    name: headerlist[index],
401
+                    type: 'line',
402
+                    symbol: 'none',
403
+                    itemStyle: {
404
+                        normal: {
405
+                            color: colorlist[index]
406
+                        }
407
+                    },
408
+                    lineStyle: {
409
+                        normal: {
410
+                            width: 2
411
+                        }
412
+                    },
413
+                    data: datas
414
+                }
415
+            })
416
+            optionllsuorce.xAxis.data = axilist;
417
+            optionllsuorce.legend.data = headerlist;
418
+            myChartllsuorce.setOption(optionllsuorce);
419
+            myChartllsuorce.hideLoading();
420
+        })
421
+    }
422
+    getdata({ "endTime": $scope.parameters.paramDateTo, "startTime": $scope.parameters.paramDateFrom })
423
+
424
+    //表格
425
+    $scope.rRowssuorce = [];
426
+
427
+    function getlistdata(time) {
428
+        api_hkreport.incidentreport(time, 'incident_source').then(function(data) {
429
+            $scope.rRowssuorce = data.data;
430
+        })
431
+    }
432
+    getlistdata({ "endTime": $scope.parameters.paramDateTo, "startTime": $scope.parameters.paramDateFrom })
433
+}]);

+ 22 - 0
assets/js/main.js

@@ -297,6 +297,20 @@ app.factory('api_wechatfile', ['WechatRestangular', function (WechatRestangular)
297 297
         }
298 298
     };
299 299
 }]);
300
+//报表
301
+app.factory('hkreportRestangular', function(Restangular) {
302
+    return Restangular.withConfig(function(RestangularConfigurer) {
303
+        RestangularConfigurer.setBaseUrl(reportIp + '/report');
304
+    });
305
+});
306
+app.factory('api_hkreport', ['hkreportRestangular', function(hkreportRestangular) {
307
+    var msgService = hkreportRestangular.all("data");
308
+    return {
309
+        incidentreport: function(data, key) {
310
+            return msgService.customPOST(data, key, {});
311
+        }
312
+    };
313
+}]);
300 314
 app.factory('webserviceRestangular', function (Restangular) {
301 315
     return Restangular.withConfig(function (RestangularConfigurer) {
302 316
         RestangularConfigurer.setBaseUrl(serverIp + '/webservice/');
@@ -310,6 +324,14 @@ app.factory('api_webservice', ['webserviceRestangular', function (webserviceRest
310 324
         }
311 325
     };
312 326
 }]);
327
+app.factory('api_webservice1', ['webserviceRestangular', function (webserviceRestangular) {
328
+    var dataService = webserviceRestangular.all("");
329
+    return {
330
+        fetchDataList: function (model, data) {
331
+            return dataService.customPOST(data, 'samsQuery/' + model, {});
332
+        }
333
+    };
334
+}]);
313 335
 app.factory('playRestangular', function (Restangular) {
314 336
     return Restangular.withConfig(function (RestangularConfigurer) {
315 337
         RestangularConfigurer.setBaseUrl(callIp);

+ 2 - 1
assets/views/customform/tpl/ui-repeatIncidentbtn.html

@@ -1,4 +1,5 @@
1 1
 <!-- start: SETTINGS -->
2 2
 <span></span>
3
-<div data-ng-include=" 'assets/views/partials/off-right.html' " toggleable class="charging panel panel-default hidden-xs hidden-sm" id="charging"></div>
3
+<div ng-if="!isHk" data-ng-include=" 'assets/views/partials/off-right.html' " toggleable class="charging panel panel-default hidden-xs hidden-sm" id="charging"></div>
4
+<div ng-if="isHk" data-ng-include=" 'assets/views/partials/off-right-hk.html' " toggleable class="charging panel panel-default hidden-xs hidden-sm" id="charging"></div>
4 5
 <div ng-if="true" data-ng-include=" 'assets/views/customform/tpl/ui-repeatIncident.html' " toggleable default=notactive class="repeatIncident panel panel-default hidden-xs hidden-sm " id="repeatIncident"></div>

+ 2 - 1
assets/views/customform/tpl/ui-requester.html

@@ -3,5 +3,6 @@
3 3
 
4 4
 </div>
5 5
 
6
-<div ng-if="model[options.key].account&&!roleidcode" data-ng-include=" 'assets/views/partials/off-right.html' " toggleable class="charging panel panel-default hidden-xs hidden-sm" id="charging"></div>
6
+<div ng-if="model[options.key].account&&!roleidcode&&!isHk" data-ng-include=" 'assets/views/partials/off-right.html' " toggleable class="charging panel panel-default hidden-xs hidden-sm" id="charging"></div>
7
+<div ng-if="model[options.key].account&&!roleidcode&&isHk" data-ng-include=" 'assets/views/partials/off-right-hk.html' " toggleable class="charging panel panel-default hidden-xs hidden-sm" id="charging"></div>
7 8
 <div ng-if="recently" data-ng-include=" 'assets/views/customform/tpl/off-recentlyincident.html' " toggleable class="recentlyincident panel panel-default hidden-xs hidden-sm" id="recentlyincident"></div>

+ 3 - 1
assets/views/login_login.html

@@ -95,7 +95,9 @@
95 95
                 </a>
96 96
             </nav> -->
97 97
             <h1>{{app.name}}</h1>
98
-            <img class="logo" src="../../assets/images/login/logo.png" alt="">
98
+            <img class="logo" src="../../assets/images/login/logo_zncd.png" alt="" ng-if="isZncd">
99
+            <img class="logo logo_hk" src="../../assets/images/login/logo_hk2.png" alt="" ng-if="isHk">
100
+            <img class="logo" src="../../assets/images/login/logo_default.png" alt="" ng-if="!isZncd&&!isHk">
99 101
             <img src="../../assets/images/login/bg01.png" alt="">
100 102
             <img class="map" src="../../assets/images/login/bg02.png" alt="">
101 103
         </header>

+ 140 - 0
assets/views/partials/off-right-hk.html

@@ -0,0 +1,140 @@
1
+<!-- start: SETTINGS -->
2
+<button ct-toggle="toggle" tooltip="认证计费" tooltip-placement="left" target="charging" parent-active-class="active" class="btn btn-success">
3
+    <i class="ti-money"></i>
4
+    <!-- 认证计费 -->
5
+</button>
6
+<!-- <div class="panel-heading ng-scope">
7
+    认证计费
8
+</div> -->
9
+<div class="ng-scope headersize">
10
+    认证计费
11
+</div>
12
+<div class="panel-body ng-scope">
13
+    <!-- start: FIXED HEADER -->
14
+    <tabset class="heighttab">
15
+        <tab heading="人员信息" style="min-width:50%;">
16
+            <div class="category">
17
+                <div>
18
+                    <div>
19
+                        <div class="col-md-6 padding-top-5 pull-left">
20
+                            用户名:<span class="recentin">{{sumInfo.userId}}</span>
21
+                        </div>
22
+                        <div class=" col-md-6 padding-top-5 pull-left">
23
+                            用户姓名:<span class="recentin"> {{sumInfo.userName}}</span>
24
+                        </div>
25
+                        <div class=" col-md-6 padding-top-5 pull-left">
26
+                            套餐: <span class="recentin">{{sumInfo.packageName}}</span>
27
+                        </div>
28
+                        <div class=" col-md-6 padding-top-5 pull-left">
29
+                            计费策略: <span class="recentin">{{sumInfo.policyId}}</span>
30
+                        </div>
31
+                        <div class=" col-md-6 padding-top-5 pull-left">
32
+                            账户余额: <span class="recentin">{{sumInfo.accountFee}}元</span>
33
+                        </div>
34
+                        <div class="col-md-6 padding-top-5 pull-left">
35
+                            模版名: <span class="recentin">{{sumInfo.atName}}</span>
36
+                        </div>
37
+                        <div class=" col-md-6 padding-top-5 pull-left">
38
+                            自动销户时间: <span class="recentin">{{sumInfo.autologicDestroyTime}}</span>
39
+                        </div>
40
+                        <div class=" col-md-6 padding-top-5 pull-left">
41
+                            移动电话: <span class="recentin">{{sumInfo.mobile}}</span>
42
+                        </div>
43
+                        <div class=" col-md-6 padding-top-5 pull-left">
44
+                            电话号码: <span class="recentin">{{sumInfo.tel}}</span>
45
+                        </div>
46
+                        <div class=" col-md-6 padding-top-5 pull-left">
47
+                            住址: <span class="recentin">{{sumInfo.address}}</span>
48
+                        </div>
49
+                        <div class=" col-md-6 padding-top-5 pull-left">
50
+                            本周期起始: <span class="recentin">{{sumInfo.periodStartTime}}</span>
51
+                        </div>
52
+                        <div class=" col-md-6 padding-top-5 pull-left">
53
+                            下次记账时刻:<span class="recentin"> {{sumInfo.nextBillingTime}}</span>
54
+                        </div>
55
+                        <div class=" col-md-6 padding-top-5 pull-left">
56
+                            是否是黑名单: <span class="recentin">{{sumInfo.blacklist}}</span>
57
+                        </div>
58
+                    </div>
59
+                </div>
60
+
61
+            </div>
62
+
63
+        </tab>
64
+        <tab heading="报修人上网登录信息 " style="min-width:50% ">
65
+            <div class="changechar active">
66
+                <!-- <div class="showright active"> -->
67
+                <!-- <div class="grid"> -->
68
+                <!--<div class="grid__item" ng-repeat="item in [1,2,3,4,5,6,7,8,9,10,11,12]">-->
69
+                <div>
70
+                    <!-- <a ng-click="showpage(item)"> -->
71
+                    <!-- <div class="title--preview">{{item.userip}}</div> -->
72
+                    <div ng-repeat="item in logininform_sumInfo">
73
+                        <div class="col-sm-12 ">
74
+                            <span class="category pull-left ">用户IPv4:<span class="recentin">{{item.userIpv4}}</span></span>
75
+                            <span class="category pull-right ">用户mac:<span class="recentin">{{item.userMac}}</span></span>
76
+                        </div>
77
+                        <div class="col-sm-12 ">
78
+                            <span class="category pull-left ">客户端信息:<span class="recentin">{{item.suVersion}}</span></span>
79
+                            <span class="category pull-right ">终端操作系统:<span class="recentin">{{item.createUserName}}</span></span>
80
+                        </div>
81
+                        <div class="col-sm-12 ">
82
+                            <span class="category pull-left ">DNS:<span class="recentin">{{item.userip}}</span></span>
83
+                            <span class="category pull-right ">NAS IPv4:<span class="recentin">{{item.nasip}}</span></span>
84
+                        </div>
85
+                        <div class="col-sm-12 ">
86
+                            <span class="category pull-right ">下线时间:<span class="recentin">{{item.logoutTime}}</span></span>
87
+                            <span class="category pull-left ">上线时间:<span class="recentin">{{item.loginTime}}</span></span>
88
+                        </div>
89
+                        <div class="col-sm-12">
90
+                            <span class="category pull-right ">下线原因:<span class="recentin">{{item.terminateCause}}</span></span>
91
+                            <span class="category pull-left ">网关地址:<span class="recentin">{{item.acctstart}}</span></span>
92
+                        </div>
93
+                        <div class="col-sm-12 ">
94
+                            <span class="category pull-right ">接入方式:<span class="recentin">{{item.acctstart}}</span></span>
95
+                            <span class="category pull-left ">接入位置描述:<span class="recentin">{{item.acctstart}}</span></span>
96
+                            </br>
97
+                            <hr style="margin-top: 0px;margin-bottom: 0px;margin-left:-15px;width:500px; height:1px;border:none;border-top:1px double #185598;" />
98
+                        </div>
99
+                    </div>
100
+                    <!-- </a> -->
101
+                </div>
102
+                <!-- </div> -->
103
+                <!-- </div> -->
104
+            </div>
105
+        </tab>
106
+    </tabset>
107
+    <!-- end: FIXED HEADER -->
108
+</div>
109
+<!-- end: SETTINGS -->
110
+<style>
111
+    .changechar.active {
112
+        /*width: 100%;*/
113
+        max-height: 380px;
114
+        min-height: 160px;
115
+        overflow-x: hidden;
116
+        font-size: 12px;
117
+    }
118
+    
119
+    .tab-content>.active {
120
+        /* display: none; */
121
+        padding: 0px;
122
+    }
123
+    
124
+    .nav-tabs>li>a {
125
+        border: 0 none;
126
+        border-radius: 5;
127
+        color: #8E9AA2;
128
+        min-width: 70px;
129
+        font-size: 12px;
130
+        padding: 10px 5px;
131
+    }
132
+    
133
+    .loaderinform {
134
+        height: 1px;
135
+        width: 100%;
136
+        /* margin: 8px auto; */
137
+        position: relative;
138
+        background: rgba(0, 0, 0, 0.1);
139
+    }
140
+</style>

+ 12 - 2
assets/views/partials/top-navbar.html

@@ -40,10 +40,20 @@
40 40
         <span class="sr-only">Toggle navigation</span>
41 41
         <i class="ti-view-grid"></i>
42 42
     </a>
43
-    <a class="navbar-brand pull-left margin-left-5" ui-sref="app.dashboard">
43
+    <a class="navbar-brand pull-left margin-left-5" ui-sref="app.dashboard" ng-if="isZncd">
44 44
         <!-- <img ng-src="/logo_large.png" style="width:160px;height:35px" alt="{{app.name}}" /> -->
45 45
         <!-- <span class="padding-left-10 padding-right-5"><img ng-src="/line.png"  alt="{{app.name}}" /></span> -->
46
-        <img ng-src="assets/images/login/logo.png" style="width:40px;height: 40px;" alt="{{app.name}}"
46
+        <img ng-src="assets/images/login/logo_zncd.png" style="width:40px;height: 40px;" alt="{{app.name}}"
47
+            class="jry_img_right" />{{app.author}} </a>
48
+    <a class="navbar-brand pull-left margin-left-5" ui-sref="app.dashboard" ng-if="isHk">
49
+        <!-- <img ng-src="/logo_large.png" style="width:160px;height:35px" alt="{{app.name}}" /> -->
50
+        <!-- <span class="padding-left-10 padding-right-5"><img ng-src="/line.png"  alt="{{app.name}}" /></span> -->
51
+        <img ng-src="assets/images/login/logo_hk2.png" style="width:auto;height: 35px;" alt="{{app.name}}"
52
+            class="jry_img_right" />{{app.author}} </a>
53
+    <a class="navbar-brand pull-left margin-left-5" ui-sref="app.dashboard" ng-if="!isZncd&&!isHk">
54
+        <!-- <img ng-src="/logo_large.png" style="width:160px;height:35px" alt="{{app.name}}" /> -->
55
+        <!-- <span class="padding-left-10 padding-right-5"><img ng-src="/line.png"  alt="{{app.name}}" /></span> -->
56
+        <img ng-src="assets/images/login/logo_default.png" style="width:40px;height: 40px;" alt="{{app.name}}"
47 57
             class="jry_img_right" />{{app.author}} </a>
48 58
 </div>
49 59
 <!-- end: NAVBAR HEADER -->

+ 377 - 0
assets/views/report/analysis.html

@@ -0,0 +1,377 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">事件趋势分析报表<i tooltip='请查看事件趋势分析报表相关数据。' tooltip-placement="right" class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i></h1>
5
+        </div>
6
+    </div>
7
+</section>
8
+<!-- end: PAGE TITLE -->
9
+<!-- start: BOOTSRAP NAV TREE -->
10
+<style>
11
+    .bodybackground {
12
+        background: #eee;
13
+    }
14
+    
15
+    .know-text-group {
16
+        display: inline-block;
17
+        box-sizing: border-box;
18
+        border-radius: 2px;
19
+        /* border: 1px solid #fff; */
20
+        /* padding-top: 5px; */
21
+        width: 100%;
22
+        /* padding-bottom: 5px; */
23
+    }
24
+    
25
+    .know-text-group-div {
26
+        display: inline-block;
27
+        width: 12%;
28
+        padding-top: 5px;
29
+        padding-bottom: 5px;
30
+        overflow: hidden;
31
+        white-space: nowrap;
32
+        text-overflow: ellipsis;
33
+    }
34
+    
35
+    .know-text-group-div:hover {
36
+        background-color: #005395 !important;
37
+        color: #fff;
38
+    }
39
+    
40
+    .know-text-group-div.active,
41
+    .know-text-group-div:focus,
42
+    .know-text-group-div:hover {
43
+        background-color: #005395 !important;
44
+        color: #fff;
45
+    }
46
+    
47
+    .know-text-color {
48
+        padding-left: 14px;
49
+        font-size: 14px;
50
+        color: #93989e;
51
+    }
52
+    
53
+    .know-span {
54
+        display: inline-block;
55
+        text-align: center;
56
+    }
57
+    
58
+    .know-num {
59
+        width: 28px;
60
+        height: 20px;
61
+        line-height: 20px;
62
+        font-size: 12px;
63
+        border-radius: 10px;
64
+        margin-right: 10px;
65
+        color: white;
66
+    }
67
+    
68
+    .bg-yellow {
69
+        background: #005395;
70
+    }
71
+    
72
+    .bg-green {
73
+        background: #2edbb8;
74
+    }
75
+    
76
+    .bg-blue {
77
+        background: #6f9ad4;
78
+    }
79
+    
80
+    .leftBorder {
81
+        border-left: 1px solid #eeeeee;
82
+    }
83
+    
84
+    .leftBorder.active,
85
+    .leftBorder:focus,
86
+    .leftBorder:hover {
87
+        border-left: 0px solid #005395;
88
+    }
89
+    
90
+    .divRight {
91
+        float: right;
92
+    }
93
+    
94
+    input[type="text"] {}
95
+    
96
+    .searchInput {
97
+        border: none !important;
98
+    }
99
+    /*     
100
+    input:focus {
101
+        box-shadow: none !important;
102
+        border: none !important;
103
+        background-color: white !important;
104
+    } */
105
+    
106
+    .know-left-div {
107
+        width: 706px;
108
+        /* margin-top: 15px; */
109
+        /* display: inline-block; */
110
+        float: left;
111
+        margin-right: 20px;
112
+    }
113
+    
114
+    .know-right-div {
115
+        /* margin-top: 15px; */
116
+        /* display: inline-block; */
117
+        overflow: hidden;
118
+    }
119
+    
120
+    .know-left-up-div {
121
+        margin-bottom: 20px;
122
+    }
123
+    
124
+    .know-left-div-head {
125
+        height: 34px;
126
+        line-height: 34px;
127
+        background: #e9eff8;
128
+        font-size: 14px;
129
+        color: #606367;
130
+        border-radius: 8px 8px 0 0;
131
+        padding-left: 10px;
132
+    }
133
+    /* .listheight {}
134
+     */
135
+    
136
+    .gobutton {
137
+        color: 005395;
138
+        font-family: "microsoft yahei";
139
+    }
140
+    
141
+    .gobutton:hover {
142
+        color: #1b3651;
143
+    }
144
+    
145
+    .gobutton:focus,
146
+    .gobutton:hover {
147
+        color: #1b3651;
148
+    }
149
+    
150
+    .dash_head {
151
+        font-size: 14px;
152
+    }
153
+    
154
+    .dash_headborder {
155
+        height: 260px;
156
+        border: 1px solid #dedede;
157
+        border-radius: 2px;
158
+    }
159
+    
160
+    .dashheadcolor {
161
+        border-bottom: 1px solid #dedede;
162
+        border-radius: 2px;
163
+    }
164
+    
165
+    .dash_mapborder {
166
+        height: 320px;
167
+        border: 1px solid #dedede;
168
+        border-radius: 2px;
169
+    }
170
+    
171
+    .disablecolor {
172
+        color: #f3f3f3 !important;
173
+    }
174
+    
175
+    .onlyaline {
176
+        overflow: hidden;
177
+        white-space: nowrap;
178
+        text-overflow: ellipsis;
179
+    }
180
+    
181
+    .newcolor {
182
+        color: #79a3c4;
183
+    }
184
+    
185
+    .form-controldash {
186
+        color: #93989e;
187
+        height: 20px;
188
+        border-radius: 2px;
189
+        border: 1px solid #d1d1d1;
190
+    }
191
+    
192
+    .iconcolorjingji {
193
+        color: #BE2636 !important;
194
+    }
195
+    
196
+    .iconcoloryanzhong {
197
+        color: #f5a623 !important;
198
+    }
199
+    
200
+    .iconcoloryiban {
201
+        color: #005396 !important;
202
+    }
203
+    
204
+    .iconfontkill {
205
+        font-family: iconfont!important;
206
+        font-size: 18px;
207
+        color: #000;
208
+        z-index: 1;
209
+        -webkit-font-smoothing: antialiased;
210
+        -webkit-text-stroke-width: .2px;
211
+    }
212
+    
213
+    .monthchoice {
214
+        height: 200px;
215
+        overflow-x: hidden;
216
+        overflow-y: scroll;
217
+        line-height: 30px;
218
+        text-align: center;
219
+    }
220
+    
221
+    .dropdown-menu.monthchoice {
222
+        min-width: 30px !important;
223
+    }
224
+    
225
+    .backcopycolor {
226
+        background: #f9f9f9;
227
+    }
228
+    
229
+    .backcolor {
230
+        background: #fff;
231
+        border: 1px solid #ddd;
232
+    }
233
+    
234
+    .table>tbody>tr>th {
235
+        vertical-align: middle;
236
+        text-align: center;
237
+        background: #fafafa;
238
+    }
239
+    
240
+    .table>tbody>tr>td {
241
+        vertical-align: middle;
242
+        text-align: center;
243
+    }
244
+    
245
+    .bottomcat {
246
+        border-bottom: 1px solid #eaeaea;
247
+    }
248
+    
249
+    .table.table-bordered tr {
250
+        white-space: inherit;
251
+    }
252
+    
253
+    .upreport {
254
+        color: #bf2939;
255
+    }
256
+    
257
+    .downreport {
258
+        color: #81d425;
259
+    }
260
+    
261
+    .normalreport {
262
+        color: #81abcb;
263
+    }
264
+    
265
+    .iconfontsmall {
266
+        font-family: iconfont!important;
267
+        font-size: 14px;
268
+        /* color: #005395; */
269
+        z-index: 1;
270
+        -webkit-font-smoothing: antialiased;
271
+        -webkit-text-stroke-width: .2px;
272
+    }
273
+</style>
274
+<div ng-style="bodyheight">
275
+    <div class="backcopycolor col-xs-12 padding-15">
276
+        <div ng-controller="reportanalysisCtrl" class="backcolor padding-left-15 padding-right-15">
277
+            <div class="listbote dashheadcolor">
278
+                <div class="list-controls clearfix">
279
+                    <div class="know-text-group">
280
+                        <form class="col-xs-12 col-sm-12 form-inline schesearchsize">
281
+                            <div class="row">
282
+                                <div class="">选择日期:</div>
283
+                                <div class="form-group">
284
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy" ng-change="changeForm(parameters.paramDateFrom)" ng-model="parameters.paramDateFrom" min-mode='year' min-modeon='year' max-date="parameters.paramDateTo" datepicker-mode=yeardata is-open="startOpened"
285
+                                        hour-time=true ng-init="startOpened = false" close-text="关闭" ng-click="startOpen($event)" />
286
+                                </div>
287
+                                <span>-</span>
288
+                                <div class="form-group">
289
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy" ng-change="changeTo(parameters.paramDateTo)" ng-model="parameters.paramDateTo" hour-time=true min-date="parameters.paramDateFrom" min-mode='year' min-modeon='year' datepicker-mode=yeardata
290
+                                        is-open="endOpened" ng-init="endOpened = false" close-text="关闭" ng-click="endOpen($event)" />
291
+                                </div>
292
+                                <div class="form-group">
293
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
294
+                                        <ui-select-match placeholder="">
295
+                                            {{$select.selected.name}}
296
+                                        </ui-select-match>
297
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
298
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
299
+                                        </ui-select-choices>
300
+                                    </ui-select>
301
+                                </div>
302
+                                <div class="form-group" style="margin-top: -20px;">
303
+                                    <div class="">区域:</div>
304
+                                    <ui-select class="pull-right" style="width:158px" ng-model="searchkeys.area" theme="bootstrap" ng-change="onChangearea(searchkeys)">
305
+                                        <ui-select-match placeholder="全部">
306
+                                            {{$select.selected.area}}
307
+                                        </ui-select-match>
308
+                                        <ui-select-choices repeat="item in outarea | filter: $select.search">
309
+                                            <div ng-bind-html="item.area | highlight: $select.search"></div>
310
+                                        </ui-select-choices>
311
+                                    </ui-select>
312
+                                </div>
313
+                                <div class="form-group pull-right">
314
+                                    <a class="btn btn-default defaultheight" ng-click="restData()" ng-disabled="disabledParentGroup" type="button">重置</a>
315
+                                </div>
316
+                                <div class="form-group pull-right margin-right-10">
317
+                                    <button class="btn btn-searchbutton" ng-click="mdxquery(searchkeys)" type="button">搜索</button>
318
+                                </div>
319
+                            </div>
320
+                        </form>
321
+                    </div>
322
+                </div>
323
+            </div>
324
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
325
+                <div class="col-xs-12" style="padding-left:8px;padding-right:8px">
326
+                    <div class="listheight dash_mapborder">
327
+                        <div class="fenlei col-xs-12 fontsizes-14">
328
+                            <div class="col-xs-12 bottomcat">
329
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
330
+                                    <div class="fenleifont pull-left">事件数量统计分析</div>
331
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
332
+                                </div>
333
+                            </div>
334
+                            <div id="analysis" style="width: 100%;height: 260px"></div>
335
+                        </div>
336
+                    </div>
337
+                </div>
338
+            </div>
339
+            <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
340
+                <thread>
341
+                    <tr>
342
+                        <th ng-repeat="x in headerslist  track by $index">
343
+                            {{x}}
344
+                        </th>
345
+                    </tr>
346
+                </thread>
347
+                <tbody class="tbody-hover">
348
+                    <tr ng-repeat="rowData in listsum">
349
+                        <td>{{rowData.date}}
350
+                        </td>
351
+                        <td>
352
+                            {{rowData.sum}}
353
+                        </td>
354
+                        <td>
355
+                            <span ng-if="rowData.allzzl!='-'&&rowData.allzzl>0" class="icon iconfontsmall icon-up  upreport" style="font-size: 12px"></span><span ng-if="rowData.allzzl!='-'&&rowData.allzzl==0" class="icon iconfontsmall icon-chiping  normalreport"></span>
356
+                            <span ng-if="rowData.allzzl!='-'&&rowData.allzzl<0" class="icon iconfontsmall icon-xiajiang  downreport"></span> {{rowData.allzzl}}%
357
+                        </td>
358
+                        <td ng-repeat="rowDatas in rowData.all track by $index">
359
+                            <div class="padding-right-10">{{rowDatas.category}}
360
+                            </div>
361
+                            <div><span ng-if="rowDatas.zzl!='-'&&rowDatas.zzl>0" class="icon iconfontsmall icon-up  upreport" style="font-size: 12px"></span><span ng-if="rowDatas.zzl!='-'&&rowDatas.zzl==0" class="icon iconfontsmall icon-chiping  normalreport"></span>
362
+                                <span ng-if="rowDatas.zzl!='-'&&rowDatas.zzl<0" class="icon iconfontsmall icon-xiajiang  downreport"></span>{{rowDatas.zzl}}%
363
+                            </div>
364
+                        </td>
365
+                        <!-- <td ng-repeat="rowData in rRows track by $index">
366
+                          
367
+                            <div ng-if="$index%2==0">{{rowData['zzl'+$index]}}
368
+                            </div>
369
+                        </td> -->
370
+                    </tr>
371
+                </tbody>
372
+            </table>
373
+
374
+        </div>
375
+    </div>
376
+</div>
377
+<!-- end: BOOTSRAP NAV TREE

+ 535 - 0
assets/views/report/catergry.html

@@ -0,0 +1,535 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">事件分类报表<i tooltip='请查看事件分类报表相关数据。' tooltip-placement="right" class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i></h1>
5
+        </div>
6
+    </div>
7
+</section>
8
+<!-- end: PAGE TITLE -->
9
+<!-- start: BOOTSRAP NAV TREE -->
10
+<style>
11
+    .bodybackground {
12
+        background: #eee;
13
+    }
14
+    
15
+    .know-text-group {
16
+        display: inline-block;
17
+        box-sizing: border-box;
18
+        border-radius: 2px;
19
+        /* border: 1px solid #fff; */
20
+        /* padding-top: 5px; */
21
+        width: 100%;
22
+        /* padding-bottom: 5px; */
23
+    }
24
+    
25
+    .know-text-group-div {
26
+        display: inline-block;
27
+        width: 12%;
28
+        padding-top: 5px;
29
+        padding-bottom: 5px;
30
+        overflow: hidden;
31
+        white-space: nowrap;
32
+        text-overflow: ellipsis;
33
+    }
34
+    
35
+    .know-text-group-div:hover {
36
+        background-color: #005395 !important;
37
+        color: #fff;
38
+    }
39
+    
40
+    .know-text-group-div.active,
41
+    .know-text-group-div:focus,
42
+    .know-text-group-div:hover {
43
+        background-color: #005395 !important;
44
+        color: #fff;
45
+    }
46
+    
47
+    .know-text-color {
48
+        padding-left: 14px;
49
+        font-size: 14px;
50
+        color: #93989e;
51
+    }
52
+    
53
+    .know-span {
54
+        display: inline-block;
55
+        text-align: center;
56
+    }
57
+    
58
+    .know-num {
59
+        width: 28px;
60
+        height: 20px;
61
+        line-height: 20px;
62
+        font-size: 12px;
63
+        border-radius: 10px;
64
+        margin-right: 10px;
65
+        color: white;
66
+    }
67
+    
68
+    .bg-yellow {
69
+        background: #005395;
70
+    }
71
+    
72
+    .bg-green {
73
+        background: #2edbb8;
74
+    }
75
+    
76
+    .bg-blue {
77
+        background: #6f9ad4;
78
+    }
79
+    
80
+    .leftBorder {
81
+        border-left: 1px solid #eeeeee;
82
+    }
83
+    
84
+    .leftBorder.active,
85
+    .leftBorder:focus,
86
+    .leftBorder:hover {
87
+        border-left: 0px solid #005395;
88
+    }
89
+    
90
+    .divRight {
91
+        float: right;
92
+    }
93
+    
94
+    input[type="text"] {}
95
+    
96
+    .searchInput {
97
+        border: none !important;
98
+    }
99
+    /*     
100
+    input:focus {
101
+        box-shadow: none !important;
102
+        border: none !important;
103
+        background-color: white !important;
104
+    } */
105
+    
106
+    .know-left-div {
107
+        width: 706px;
108
+        /* margin-top: 15px; */
109
+        /* display: inline-block; */
110
+        float: left;
111
+        margin-right: 20px;
112
+    }
113
+    
114
+    .know-right-div {
115
+        /* margin-top: 15px; */
116
+        /* display: inline-block; */
117
+        overflow: hidden;
118
+    }
119
+    
120
+    .know-left-up-div {
121
+        margin-bottom: 20px;
122
+    }
123
+    
124
+    .know-left-div-head {
125
+        height: 34px;
126
+        line-height: 34px;
127
+        background: #e9eff8;
128
+        font-size: 14px;
129
+        color: #606367;
130
+        border-radius: 8px 8px 0 0;
131
+        padding-left: 10px;
132
+    }
133
+    /* .listheight {}
134
+     */
135
+    
136
+    .gobutton {
137
+        color: 005395;
138
+        font-family: "microsoft yahei";
139
+    }
140
+    
141
+    .gobutton:hover {
142
+        color: #1b3651;
143
+    }
144
+    
145
+    .gobutton:focus,
146
+    .gobutton:hover {
147
+        color: #1b3651;
148
+    }
149
+    
150
+    .dash_head {
151
+        font-size: 14px;
152
+    }
153
+    
154
+    .dash_headborder {
155
+        height: 260px;
156
+        border: 1px solid #dedede;
157
+        border-radius: 2px;
158
+    }
159
+    
160
+    .dashheadcolor {
161
+        border-bottom: 1px solid #dedede;
162
+        border-radius: 2px;
163
+    }
164
+    
165
+    .dash_mapborder {
166
+        height: 320px;
167
+        border: 1px solid #dedede;
168
+        border-radius: 2px;
169
+    }
170
+    
171
+    .disablecolor {
172
+        color: #f3f3f3 !important;
173
+    }
174
+    
175
+    .onlyaline {
176
+        overflow: hidden;
177
+        white-space: nowrap;
178
+        text-overflow: ellipsis;
179
+    }
180
+    
181
+    .newcolor {
182
+        color: #79a3c4;
183
+    }
184
+    
185
+    .form-controldash {
186
+        color: #93989e;
187
+        height: 20px;
188
+        border-radius: 2px;
189
+        border: 1px solid #d1d1d1;
190
+    }
191
+    
192
+    .iconcolorjingji {
193
+        color: #BE2636 !important;
194
+    }
195
+    
196
+    .iconcoloryanzhong {
197
+        color: #f5a623 !important;
198
+    }
199
+    
200
+    .iconcoloryiban {
201
+        color: #005396 !important;
202
+    }
203
+    
204
+    .iconfontkill {
205
+        font-family: iconfont!important;
206
+        font-size: 18px;
207
+        color: #000;
208
+        z-index: 1;
209
+        -webkit-font-smoothing: antialiased;
210
+        -webkit-text-stroke-width: .2px;
211
+    }
212
+    
213
+    .monthchoice {
214
+        height: 200px;
215
+        overflow-x: hidden;
216
+        overflow-y: scroll;
217
+        line-height: 30px;
218
+        text-align: center;
219
+    }
220
+    
221
+    .dropdown-menu.monthchoice {
222
+        min-width: 30px !important;
223
+    }
224
+    
225
+    .backcopycolor {
226
+        background: #f9f9f9;
227
+    }
228
+    
229
+    .backcolor {
230
+        background: #fff;
231
+        border: 1px solid #ddd;
232
+    }
233
+    
234
+    .table>tbody>tr>th {
235
+        vertical-align: middle;
236
+        text-align: center;
237
+        background: #fafafa;
238
+    }
239
+    
240
+    .table>tbody>tr>td {
241
+        vertical-align: middle;
242
+        text-align: center;
243
+    }
244
+    
245
+    .bottomcat {
246
+        border-bottom: 1px solid #eaeaea;
247
+    }
248
+    
249
+    .table.table-bordered tr {
250
+        white-space: inherit;
251
+    }
252
+    
253
+    .tree-control .tree-input {
254
+        border-radius: 4px;
255
+        padding-top: 5px;
256
+        width: 158px !important;
257
+    }
258
+</style>
259
+<div ng-style="bodyheight">
260
+    <div class="backcopycolor col-xs-12 padding-15">
261
+        <div ng-controller="reportcatergryCtrl" class="backcolor padding-left-15 padding-right-15">
262
+            <div class="listbote dashheadcolor">
263
+                <div class="list-controls clearfix">
264
+                    <div class="know-text-group">
265
+                        <form class="col-xs-12 col-sm-12 form-inline schesearchsize">
266
+                            <div class="row">
267
+                                <div class="">选择日期:</div>
268
+                                <div class="form-group">
269
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeForm(parameters.paramDateFrom)" ng-model="parameters.paramDateFrom" max-date="parameters.paramDateTo" is-open="startOpened" hour-time=true ng-init="startOpened = false"
270
+                                        close-text="关闭" ng-click="startOpen($event)" />
271
+                                </div>
272
+                                <span>-</span>
273
+                                <div class="form-group">
274
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeTo(parameters.paramDateTo)" ng-model="parameters.paramDateTo" hour-time=true min-date="parameters.paramDateFrom" is-open="endOpened" ng-init="endOpened = false"
275
+                                        close-text="关闭" ng-click="endOpen($event)" />
276
+                                </div>
277
+                                <div class="form-group">
278
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
279
+                                        <ui-select-match placeholder="">
280
+                                            {{$select.selected.name}}
281
+                                        </ui-select-match>
282
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
283
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
284
+                                        </ui-select-choices>
285
+                                    </ui-select>
286
+                                </div>
287
+                                <div class="form-group" style="margin-top: -20px;">
288
+                                    <div class="">事件分类:</div>
289
+                                    <multi-select-tree ng-model="searchkeys.category" style="width:158px" data-input-model="select_treedataca" data-output-model="my_dataca" theme="bootstrap" multi-select="false" data-default-label="全部" data-callback="onFilterCallback(item)" data-select-only-leafs="false"
290
+                                        data-select-only-high="true" data-trans-label="label" data-switch-view="false"></multi-select-tree>
291
+                                </div>
292
+                                <div class="form-group pull-right">
293
+                                    <a class="btn btn-default defaultheight" ng-click="restData()" ng-disabled="disabledParentGroup" type="button">重置</a>
294
+                                </div>
295
+                                <div class="form-group pull-right margin-right-10">
296
+                                    <button class="btn btn-searchbutton" ng-click="mdxquery(searchkeys)" type="button">搜索</button>
297
+                                </div>
298
+                            </div>
299
+                        </form>
300
+                    </div>
301
+                </div>
302
+            </div>
303
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
304
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
305
+                    <div class="listheight dash_mapborder">
306
+                        <div class="fenlei col-xs-12 fontsizes-14">
307
+                            <div class="col-xs-12 bottomcat">
308
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
309
+                                    <div class="fenleifont pull-left">事件分类总数占比</div>
310
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
311
+                                </div>
312
+                            </div>
313
+                            <div id="reportcatergry" style="width: 100%;height: 266px"></div>
314
+                        </div>
315
+                    </div>
316
+                </div>
317
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
318
+                    <div class="listheight dash_mapborder">
319
+                        <div class="fenlei col-xs-12 fontsizes-14">
320
+                            <div class="col-xs-12 bottomcat">
321
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
322
+                                    <div class="fenleifont pull-left">事件分类趋势分析</div>
323
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
324
+                                </div>
325
+                            </div>
326
+                            <div id="liuliangcatergry" style="width: 100%;height: 260px"></div>
327
+                        </div>
328
+                    </div>
329
+                </div>
330
+            </div>
331
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
332
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
333
+                    <div class="listheight dash_mapborder">
334
+                        <div class="fenlei col-xs-12" style="height:100%">
335
+                            <div class="fenleitop fontsizes-14">
336
+                                <div class="col-xs-12 bottomcat">
337
+                                    <div class="row fontcolor-two padding-top-15 padding-bottom-15">
338
+                                        <div class="fenleifont pull-left">事件区域地点TOP5排行</div>
339
+                                        <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
340
+                                    </div>
341
+                                </div>
342
+
343
+                            </div>
344
+                            <div id="faultcatergry" class="pull-left" style="width: 100%;
345
+            height: 260px"></div>
346
+                        </div>
347
+                    </div>
348
+                </div>
349
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
350
+                    <div class="listheight dash_mapborder">
351
+                        <div class="fenlei col-xs-12" style="height:100%">
352
+                            <div class="fenleitop fontsizes-14">
353
+                                <div class="col-xs-12 bottomcat">
354
+                                    <div class="row fontcolor-two padding-top-15 padding-bottom-15">
355
+                                        <div class="fenleifont pull-left">故障原因TOP5排行</div>
356
+                                        <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
357
+                                    </div>
358
+                                </div>
359
+
360
+                            </div>
361
+                            <div id="faultgu" class="pull-left" style="width: 100%;
362
+            height: 260px"></div>
363
+                        </div>
364
+                    </div>
365
+                </div>
366
+            </div>
367
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
368
+                <div class="col-xs-12" style="padding-left:8px;padding-right:8px">
369
+                    <div class="listheight dash_mapborder">
370
+                        <div class="fenlei col-xs-12 fontsizes-14">
371
+                            <div class="col-xs-12 bottomcat">
372
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
373
+                                    <div class="fenleifont pull-left">区域地点及事件类型趋势分析</div>
374
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
375
+                                </div>
376
+                            </div>
377
+                            <div id="analysisca" style="width: 100%;height: 260px"></div>
378
+                        </div>
379
+                    </div>
380
+                </div>
381
+            </div>
382
+            <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
383
+                <thread>
384
+                    <tr>
385
+                        <th rowspan="2">
386
+                            序号
387
+                        </th>
388
+                        <th rowspan="2">
389
+                            事件分类名称
390
+                        </th>
391
+                        <th rowspan="2">
392
+                            事件总数(件)
393
+                        </th>
394
+                        <th rowspan="2">
395
+                            事件占比(%)
396
+                        </th>
397
+                        <th rowspan="1" colspan='5'>
398
+                            事件频发区域地点
399
+                        </th>
400
+                        <!-- <th rowspan="1" colspan='2'>
401
+                            时间段占比
402
+                        </th> -->
403
+                        <th rowspan="1" colspan='4'>
404
+                            优先级
405
+                        </th>
406
+                        <th rowspan="1" colspan='5'>
407
+                            关闭代码
408
+                        </th>
409
+                    </tr>
410
+                    <tr>
411
+                        <th rowspan="1">
412
+                            TOP1
413
+                        </th>
414
+                        <th rowspan="1">
415
+                            TOP2
416
+                        </th>
417
+                        <th rowspan="1">
418
+                            TOP3
419
+                        </th>
420
+                        <th rowspan="1">
421
+                            TOP4
422
+                        </th>
423
+                        <th rowspan="1">
424
+                            TOP5
425
+                        </th>
426
+                        <!-- <th rowspan="1">
427
+                            工作时间
428
+                        </th>
429
+                        <th rowspan="1">
430
+                            值班时间
431
+                        </th> -->
432
+                        <th rowspan="1">
433
+                            极高
434
+                        </th>
435
+                        <th rowspan="1">
436
+                            高
437
+                        </th>
438
+                        <th rowspan="1">
439
+                            中
440
+                        </th>
441
+                        <th rowspan="1">
442
+                            低
443
+                        </th>
444
+                        <th rowspan="1">
445
+                            关闭代码1
446
+                        </th>
447
+                        <th rowspan="1">
448
+                            关闭代码2
449
+                        </th>
450
+                        <th rowspan="1">
451
+                            关闭代码3
452
+                        </th>
453
+                        <th rowspan="1">
454
+                            关闭代码4
455
+                        </th>
456
+                        <th rowspan="1">
457
+                            关闭代码5
458
+                        </th>
459
+                    </tr>
460
+                </thread>
461
+                <tbody class="tbody-hover">
462
+                    <tr ng-repeat="rowData in rRowscatergry">
463
+                        <td>
464
+                            {{$index+1}}
465
+                        </td>
466
+                        <td>
467
+                            {{rowData.category}}
468
+                        </td>
469
+                        <td>
470
+                            {{rowData.sum}}
471
+                        </td>
472
+                        <td>
473
+                            {{rowData.proportion}}%
474
+                        </td>
475
+                        <td>
476
+                            {{rowData.tap0}}
477
+                        </td>
478
+                        <td>
479
+                            {{rowData.tap1}}
480
+                        </td>
481
+                        <td>
482
+                            {{rowData.tap2}}
483
+                        </td>
484
+                        <td>
485
+                            {{rowData.tap3}}
486
+                        </td>
487
+                        <td>
488
+                            {{rowData.tap4}}
489
+                        </td>
490
+                        <!-- <td>
491
+                            {{rowData.overtimesolve}}
492
+                        </td>
493
+                        <td>
494
+                            {{rowData.solvetime}}
495
+                        </td>
496
+                        <td>
497
+                            {{rowData.overtimesolveProportion}}%
498
+                        </td>
499
+                        <td>
500
+                            {{rowData.fcmy}}%
501
+                        </td> -->
502
+                        <td>
503
+                            {{rowData.jg}}
504
+                        </td>
505
+                        <td>
506
+                            {{rowData.g}}
507
+                        </td>
508
+                        <td>
509
+                            {{rowData.z}}
510
+                        </td>
511
+                        <td>
512
+                            {{rowData.d}}
513
+                        </td>
514
+                        <td>
515
+                            {{rowData.gbdm1}}
516
+                        </td>
517
+                        <td>
518
+                            {{rowData.gbdm2}}
519
+                        </td>
520
+                        <td>
521
+                            {{rowData.gbdm3}}
522
+                        </td>
523
+                        <td>
524
+                            {{rowData.gbdm4}}
525
+                        </td>
526
+                        <td>
527
+                            {{rowData.gbdm5}}
528
+                        </td>
529
+                    </tr>
530
+                </tbody>
531
+            </table>
532
+        </div>
533
+    </div>
534
+</div>
535
+<!-- end: BOOTSRAP NAV TREE

+ 546 - 0
assets/views/report/efficiency.html

@@ -0,0 +1,546 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">事件运维效率统计<i tooltip='请查看事件运维效率统计相关数据。' tooltip-placement="right" class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i></h1>
5
+        </div>
6
+    </div>
7
+</section>
8
+<!-- end: PAGE TITLE -->
9
+<!-- start: BOOTSRAP NAV TREE -->
10
+<style>
11
+    .bodybackground {
12
+        background: #eee;
13
+    }
14
+    
15
+    .know-text-group {
16
+        display: inline-block;
17
+        box-sizing: border-box;
18
+        border-radius: 2px;
19
+        /* border: 1px solid #fff; */
20
+        /* padding-top: 5px; */
21
+        width: 100%;
22
+        /* padding-bottom: 5px; */
23
+    }
24
+    
25
+    .know-text-group-div {
26
+        display: inline-block;
27
+        width: 12%;
28
+        padding-top: 5px;
29
+        padding-bottom: 5px;
30
+        overflow: hidden;
31
+        white-space: nowrap;
32
+        text-overflow: ellipsis;
33
+    }
34
+    
35
+    .know-text-group-div:hover {
36
+        background-color: #005395 !important;
37
+        color: #fff;
38
+    }
39
+    
40
+    .know-text-group-div.active,
41
+    .know-text-group-div:focus,
42
+    .know-text-group-div:hover {
43
+        background-color: #005395 !important;
44
+        color: #fff;
45
+    }
46
+    
47
+    .know-text-color {
48
+        padding-left: 14px;
49
+        font-size: 14px;
50
+        color: #93989e;
51
+    }
52
+    
53
+    .know-span {
54
+        display: inline-block;
55
+        text-align: center;
56
+    }
57
+    
58
+    .know-num {
59
+        width: 28px;
60
+        height: 20px;
61
+        line-height: 20px;
62
+        font-size: 12px;
63
+        border-radius: 10px;
64
+        margin-right: 10px;
65
+        color: white;
66
+    }
67
+    
68
+    .bg-yellow {
69
+        background: #005395;
70
+    }
71
+    
72
+    .bg-green {
73
+        background: #2edbb8;
74
+    }
75
+    
76
+    .bg-blue {
77
+        background: #6f9ad4;
78
+    }
79
+    
80
+    .leftBorder {
81
+        border-left: 1px solid #eeeeee;
82
+    }
83
+    
84
+    .leftBorder.active,
85
+    .leftBorder:focus,
86
+    .leftBorder:hover {
87
+        border-left: 0px solid #005395;
88
+    }
89
+    
90
+    .divRight {
91
+        float: right;
92
+    }
93
+    
94
+    input[type="text"] {}
95
+    
96
+    .searchInput {
97
+        border: none !important;
98
+    }
99
+    /*     
100
+    input:focus {
101
+        box-shadow: none !important;
102
+        border: none !important;
103
+        background-color: white !important;
104
+    } */
105
+    
106
+    .know-left-div {
107
+        width: 706px;
108
+        /* margin-top: 15px; */
109
+        /* display: inline-block; */
110
+        float: left;
111
+        margin-right: 20px;
112
+    }
113
+    
114
+    .know-right-div {
115
+        /* margin-top: 15px; */
116
+        /* display: inline-block; */
117
+        overflow: hidden;
118
+    }
119
+    
120
+    .know-left-up-div {
121
+        margin-bottom: 20px;
122
+    }
123
+    
124
+    .know-left-div-head {
125
+        height: 34px;
126
+        line-height: 34px;
127
+        background: #e9eff8;
128
+        font-size: 14px;
129
+        color: #606367;
130
+        border-radius: 8px 8px 0 0;
131
+        padding-left: 10px;
132
+    }
133
+    /* .listheight {}
134
+     */
135
+    
136
+    .gobutton {
137
+        color: 005395;
138
+        font-family: "microsoft yahei";
139
+    }
140
+    
141
+    .gobutton:hover {
142
+        color: #1b3651;
143
+    }
144
+    
145
+    .gobutton:focus,
146
+    .gobutton:hover {
147
+        color: #1b3651;
148
+    }
149
+    
150
+    .dash_head {
151
+        font-size: 14px;
152
+    }
153
+    
154
+    .dash_headborder {
155
+        height: 260px;
156
+        border: 1px solid #dedede;
157
+        border-radius: 2px;
158
+    }
159
+    
160
+    .dashheadcolor {
161
+        border-bottom: 1px solid #dedede;
162
+        border-radius: 2px;
163
+    }
164
+    
165
+    .dash_mapborder {
166
+        height: 320px;
167
+        border: 1px solid #dedede;
168
+        border-radius: 2px;
169
+    }
170
+    
171
+    .disablecolor {
172
+        color: #f3f3f3 !important;
173
+    }
174
+    
175
+    .onlyaline {
176
+        overflow: hidden;
177
+        white-space: nowrap;
178
+        text-overflow: ellipsis;
179
+    }
180
+    
181
+    .newcolor {
182
+        color: #79a3c4;
183
+    }
184
+    
185
+    .form-controldash {
186
+        color: #93989e;
187
+        height: 20px;
188
+        border-radius: 2px;
189
+        border: 1px solid #d1d1d1;
190
+    }
191
+    
192
+    .iconcolorjingji {
193
+        color: #BE2636 !important;
194
+    }
195
+    
196
+    .iconcoloryanzhong {
197
+        color: #f5a623 !important;
198
+    }
199
+    
200
+    .iconcoloryiban {
201
+        color: #005396 !important;
202
+    }
203
+    
204
+    .iconfontkill {
205
+        font-family: iconfont!important;
206
+        font-size: 18px;
207
+        color: #000;
208
+        z-index: 1;
209
+        -webkit-font-smoothing: antialiased;
210
+        -webkit-text-stroke-width: .2px;
211
+    }
212
+    
213
+    .monthchoice {
214
+        height: 200px;
215
+        overflow-x: hidden;
216
+        overflow-y: scroll;
217
+        line-height: 30px;
218
+        text-align: center;
219
+    }
220
+    
221
+    .dropdown-menu.monthchoice {
222
+        min-width: 30px !important;
223
+    }
224
+    
225
+    .backcopycolor {
226
+        background: #f9f9f9;
227
+    }
228
+    
229
+    .backcolor {
230
+        background: #fff;
231
+        border: 1px solid #ddd;
232
+    }
233
+    
234
+    .table>tbody>tr>th {
235
+        vertical-align: middle;
236
+        text-align: center;
237
+        background: #fafafa;
238
+    }
239
+    
240
+    .table>tbody>tr>td {
241
+        vertical-align: middle;
242
+        text-align: center;
243
+    }
244
+    
245
+    .bottomcat {
246
+        border-bottom: 1px solid #eaeaea;
247
+    }
248
+    
249
+    .table.table-bordered tr {
250
+        white-space: inherit;
251
+    }
252
+    
253
+    .tree-control .tree-input {
254
+        border-radius: 4px;
255
+        padding-top: 5px;
256
+        width: 158px !important;
257
+    }
258
+    
259
+    .timecolor {
260
+        color: #f30922;
261
+    }
262
+</style>
263
+<div ng-style="bodyheight">
264
+    <div class="backcopycolor col-xs-12 padding-15">
265
+        <div ng-controller="reportefficiencyCtrl" class="backcolor padding-left-15 padding-right-15">
266
+            <div class="listbote dashheadcolor">
267
+                <div class="list-controls clearfix">
268
+                    <div class="know-text-group">
269
+                        <form class="col-xs-12 col-sm-12 form-inline schesearchsize">
270
+                            <div class="row">
271
+                                <div class="">选择日期:</div>
272
+                                <div class="form-group">
273
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeForm(parameters.paramDateFrom)" ng-model="parameters.paramDateFrom" max-date="parameters.paramDateTo" is-open="startOpened" hour-time=true ng-init="startOpened = false"
274
+                                        close-text="关闭" ng-click="startOpen($event)" />
275
+                                </div>
276
+                                <span>-</span>
277
+                                <div class="form-group">
278
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeTo(parameters.paramDateTo)" ng-model="parameters.paramDateTo" hour-time=true min-date="parameters.paramDateFrom" is-open="endOpened" ng-init="endOpened = false"
279
+                                        close-text="关闭" ng-click="endOpen($event)" />
280
+                                </div>
281
+                                <div class="form-group">
282
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
283
+                                        <ui-select-match placeholder="">
284
+                                            {{$select.selected.name}}
285
+                                        </ui-select-match>
286
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
287
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
288
+                                        </ui-select-choices>
289
+                                    </ui-select>
290
+                                </div>
291
+                                <div class="form-group" style="margin-top: -20px;">
292
+                                    <div class="">事件分类:</div>
293
+                                    <!-- <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
294
+                                        <ui-select-match placeholder="">
295
+                                            {{$select.selected.name}}
296
+                                        </ui-select-match>
297
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
298
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
299
+                                        </ui-select-choices>
300
+                                    </ui-select> -->
301
+                                    <multi-select-tree ng-model="searchkeys.category" style="width:158px" data-input-model="select_treedata" data-output-model="my_data" theme="bootstrap" multi-select="false" data-default-label="全部" data-callback="onFilterCallback(item)" data-select-only-leafs="false"
302
+                                        data-select-only-high="true" data-trans-label="label" data-switch-view="false"></multi-select-tree>
303
+                                </div>
304
+                                <div class="form-group pull-right">
305
+                                    <a class="btn btn-default defaultheight" ng-click="restData()" ng-disabled="disabledParentGroup" type="button">重置</a>
306
+                                </div>
307
+                                <div class="form-group pull-right margin-right-10">
308
+                                    <button class="btn btn-searchbutton" ng-click="mdxquery(searchkeys)" type="button">搜索</button>
309
+                                </div>
310
+                            </div>
311
+                        </form>
312
+                    </div>
313
+                </div>
314
+            </div>
315
+            <!---响应事件--->
316
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
317
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
318
+                    <div class="listheight dash_mapborder">
319
+                        <div class="fenlei col-xs-12 fontsizes-14">
320
+                            <div class="col-xs-12 bottomcat">
321
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
322
+                                    <div class="fenleifont pull-left">事件响应时长趋势分析</div>
323
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
324
+                                </div>
325
+                            </div>
326
+                            <div id="liuliangeff" style="width: 100%;height: 260px"></div>
327
+                        </div>
328
+                    </div>
329
+                </div>
330
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
331
+                    <div class="listheight dash_mapborder col-xs-12 padding-top-15 padding-bottom-15" style="overflow:scroll">
332
+                        <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
333
+                            <thread>
334
+                                <tr>
335
+                                    <th>
336
+                                        响应事件总数(件)
337
+                                    </th>
338
+                                    <th>
339
+                                        响应平均值(时长:分钟)
340
+                                    </th>
341
+                                </tr>
342
+                            </thread>
343
+                            <tbody class="tbody-hover">
344
+                                <tr ng-repeat="rowData in responsehead">
345
+                                    <td>
346
+                                        {{rowData.sum}}
347
+                                    </td>
348
+                                    <td>
349
+                                        {{rowData.responsetime}}
350
+                                    </td>
351
+                                </tr>
352
+                            </tbody>
353
+                        </table>
354
+                        <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
355
+                            <thread>
356
+                                <tr>
357
+                                    <th>
358
+                                        序号
359
+                                    </th>
360
+                                    <th>
361
+                                        处理人
362
+                                    </th>
363
+                                    <th>
364
+                                        响应事件总数(件)
365
+                                    </th>
366
+                                    <th>
367
+                                        响应平均值(时长:分钟)
368
+                                    </th>
369
+                                </tr>
370
+                            </thread>
371
+                            <tbody class="tbody-hover">
372
+                                <tr ng-repeat="rowData in responselist" ng-class="{'timecolor':rowData.responsetime>responsehead[0].responsetime}">
373
+                                    <td>
374
+                                        {{$index+1}}
375
+                                    </td>
376
+                                    <td>
377
+                                        {{rowData.name}}
378
+                                    </td>
379
+                                    <td>
380
+                                        {{rowData.sum}}
381
+                                    </td>
382
+                                    <td>
383
+                                        {{rowData.responsetime}}
384
+                                    </td>
385
+                                </tr>
386
+                            </tbody>
387
+                        </table>
388
+                    </div>
389
+                </div>
390
+            </div>
391
+            <!---解决事件--->
392
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
393
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
394
+                    <div class="listheight dash_mapborder">
395
+                        <div class="fenlei col-xs-12 fontsizes-14">
396
+                            <div class="col-xs-12 bottomcat">
397
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
398
+                                    <div class="fenleifont pull-left">事件解决时长趋势分析</div>
399
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
400
+                                </div>
401
+                            </div>
402
+                            <div id="liuliangtwo" style="width: 100%;height: 260px"></div>
403
+                        </div>
404
+                    </div>
405
+                </div>
406
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
407
+                    <div class="listheight dash_mapborder col-xs-12 padding-top-15 padding-bottom-15" style="overflow:scroll">
408
+                        <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
409
+                            <thread>
410
+                                <tr>
411
+                                    <th>
412
+                                        解决事件总数(件)
413
+                                    </th>
414
+                                    <th>
415
+                                        解决平均值(时长:分钟)
416
+                                    </th>
417
+                                </tr>
418
+                            </thread>
419
+                            <tbody class="tbody-hover">
420
+                                <tr ng-repeat="rowData in responsetwohead">
421
+                                    <td>
422
+                                        {{rowData.sum}}
423
+                                    </td>
424
+                                    <td>
425
+                                        {{rowData.responsetime}}
426
+                                    </td>
427
+                                </tr>
428
+                            </tbody>
429
+                        </table>
430
+                        <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
431
+                            <thread>
432
+                                <tr>
433
+                                    <th>
434
+                                        序号
435
+                                    </th>
436
+                                    <th>
437
+                                        处理人
438
+                                    </th>
439
+                                    <th>
440
+                                        解决事件总数(件)
441
+                                    </th>
442
+                                    <th>
443
+                                        解决平均值(时长:分钟)
444
+                                    </th>
445
+                                </tr>
446
+                            </thread>
447
+                            <tbody class="tbody-hover">
448
+                                <tr ng-repeat="rowData in responsetwolist" ng-class="{'timecolor':rowData.responsetime>responsetwohead[0].responsetime}">
449
+                                    <td>
450
+                                        {{$index+1}}
451
+                                    </td>
452
+                                    <td>
453
+                                        {{rowData.name}}
454
+                                    </td>
455
+                                    <td>
456
+                                        {{rowData.sum}}
457
+                                    </td>
458
+                                    <td>
459
+                                        {{rowData.responsetime}}
460
+                                    </td>
461
+                                </tr>
462
+                            </tbody>
463
+                        </table>
464
+                    </div>
465
+                </div>
466
+            </div>
467
+            <!---逾期事件--->
468
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
469
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
470
+                    <div class="listheight dash_mapborder">
471
+                        <div class="fenlei col-xs-12 fontsizes-14">
472
+                            <div class="col-xs-12 bottomcat">
473
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
474
+                                    <div class="fenleifont pull-left">事件逾期时长趋势分析</div>
475
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
476
+                                </div>
477
+                            </div>
478
+                            <div id="liuliangthree" style="width: 100%;height: 260px"></div>
479
+                        </div>
480
+                    </div>
481
+                </div>
482
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
483
+                    <div class="listheight dash_mapborder col-xs-12 padding-top-15 padding-bottom-15" style="overflow:scroll">
484
+                        <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
485
+                            <thread>
486
+                                <tr>
487
+                                    <th>
488
+                                        逾期解决事件总数(件)
489
+                                    </th>
490
+                                    <th>
491
+                                        逾期平均值(时长:分钟)
492
+                                    </th>
493
+                                </tr>
494
+                            </thread>
495
+                            <tbody class="tbody-hover">
496
+                                <tr ng-repeat="rowData in responsethreehead">
497
+                                    <td>
498
+                                        {{rowData.sum}}
499
+                                    </td>
500
+                                    <td>
501
+                                        {{rowData.responsetime}}
502
+                                    </td>
503
+                                </tr>
504
+                            </tbody>
505
+                        </table>
506
+                        <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
507
+                            <thread>
508
+                                <tr>
509
+                                    <th>
510
+                                        序号
511
+                                    </th>
512
+                                    <th>
513
+                                        处理人
514
+                                    </th>
515
+                                    <th>
516
+                                        响应事件总数(件)
517
+                                    </th>
518
+                                    <th>
519
+                                        响应平均值(时长:分钟)
520
+                                    </th>
521
+                                </tr>
522
+                            </thread>
523
+                            <tbody class="tbody-hover">
524
+                                <tr ng-repeat="rowData in responsethreelist" ng-class="{'timecolor':rowData.responsetime>responsethreehead[0].responsetime}">
525
+                                    <td ng-class="{'timecolor':rowData.responsetime>responsethreehead[0].responsetime}">
526
+                                        {{$index+1}}
527
+                                    </td>
528
+                                    <td>
529
+                                        {{rowData.name}}
530
+                                    </td>
531
+                                    <td>
532
+                                        {{rowData.sum}}
533
+                                    </td>
534
+                                    <td>
535
+                                        {{rowData.responsetime}}
536
+                                    </td>
537
+                                </tr>
538
+                            </tbody>
539
+                        </table>
540
+                    </div>
541
+                </div>
542
+            </div>
543
+        </div>
544
+    </div>
545
+</div>
546
+<!-- end: BOOTSRAP NAV TREE-->

+ 501 - 0
assets/views/report/handlegroup.html

@@ -0,0 +1,501 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">事件处理组报表<i tooltip='请查看事件处理组报表相关数据。' tooltip-placement="right" class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i></h1>
5
+        </div>
6
+    </div>
7
+</section>
8
+<!-- end: PAGE TITLE -->
9
+<!-- start: BOOTSRAP NAV TREE -->
10
+<style>
11
+    .bodybackground {
12
+        background: #eee;
13
+    }
14
+    
15
+    .know-text-group {
16
+        display: inline-block;
17
+        box-sizing: border-box;
18
+        border-radius: 2px;
19
+        /* border: 1px solid #fff; */
20
+        /* padding-top: 5px; */
21
+        width: 100%;
22
+        /* padding-bottom: 5px; */
23
+    }
24
+    
25
+    .know-text-group-div {
26
+        display: inline-block;
27
+        width: 12%;
28
+        padding-top: 5px;
29
+        padding-bottom: 5px;
30
+        overflow: hidden;
31
+        white-space: nowrap;
32
+        text-overflow: ellipsis;
33
+    }
34
+    
35
+    .know-text-group-div:hover {
36
+        background-color: #005395 !important;
37
+        color: #fff;
38
+    }
39
+    
40
+    .know-text-group-div.active,
41
+    .know-text-group-div:focus,
42
+    .know-text-group-div:hover {
43
+        background-color: #005395 !important;
44
+        color: #fff;
45
+    }
46
+    
47
+    .know-text-color {
48
+        padding-left: 14px;
49
+        font-size: 14px;
50
+        color: #93989e;
51
+    }
52
+    
53
+    .know-span {
54
+        display: inline-block;
55
+        text-align: center;
56
+    }
57
+    
58
+    .know-num {
59
+        width: 28px;
60
+        height: 20px;
61
+        line-height: 20px;
62
+        font-size: 12px;
63
+        border-radius: 10px;
64
+        margin-right: 10px;
65
+        color: white;
66
+    }
67
+    
68
+    .bg-yellow {
69
+        background: #005395;
70
+    }
71
+    
72
+    .bg-green {
73
+        background: #2edbb8;
74
+    }
75
+    
76
+    .bg-blue {
77
+        background: #6f9ad4;
78
+    }
79
+    
80
+    .leftBorder {
81
+        border-left: 1px solid #eeeeee;
82
+    }
83
+    
84
+    .leftBorder.active,
85
+    .leftBorder:focus,
86
+    .leftBorder:hover {
87
+        border-left: 0px solid #005395;
88
+    }
89
+    
90
+    .divRight {
91
+        float: right;
92
+    }
93
+    
94
+    input[type="text"] {}
95
+    
96
+    .searchInput {
97
+        border: none !important;
98
+    }
99
+    /*     
100
+    input:focus {
101
+        box-shadow: none !important;
102
+        border: none !important;
103
+        background-color: white !important;
104
+    } */
105
+    
106
+    .know-left-div {
107
+        width: 706px;
108
+        /* margin-top: 15px; */
109
+        /* display: inline-block; */
110
+        float: left;
111
+        margin-right: 20px;
112
+    }
113
+    
114
+    .know-right-div {
115
+        /* margin-top: 15px; */
116
+        /* display: inline-block; */
117
+        overflow: hidden;
118
+    }
119
+    
120
+    .know-left-up-div {
121
+        margin-bottom: 20px;
122
+    }
123
+    
124
+    .know-left-div-head {
125
+        height: 34px;
126
+        line-height: 34px;
127
+        background: #e9eff8;
128
+        font-size: 14px;
129
+        color: #606367;
130
+        border-radius: 8px 8px 0 0;
131
+        padding-left: 10px;
132
+    }
133
+    /* .listheight {}
134
+     */
135
+    
136
+    .gobutton {
137
+        color: 005395;
138
+        font-family: "microsoft yahei";
139
+    }
140
+    
141
+    .gobutton:hover {
142
+        color: #1b3651;
143
+    }
144
+    
145
+    .gobutton:focus,
146
+    .gobutton:hover {
147
+        color: #1b3651;
148
+    }
149
+    
150
+    .dash_head {
151
+        font-size: 14px;
152
+    }
153
+    
154
+    .dash_headborder {
155
+        height: 260px;
156
+        border: 1px solid #dedede;
157
+        border-radius: 2px;
158
+    }
159
+    
160
+    .dashheadcolor {
161
+        border-bottom: 1px solid #dedede;
162
+        border-radius: 2px;
163
+    }
164
+    
165
+    .dash_mapborder {
166
+        height: 320px;
167
+        border: 1px solid #dedede;
168
+        border-radius: 2px;
169
+    }
170
+    
171
+    .disablecolor {
172
+        color: #f3f3f3 !important;
173
+    }
174
+    
175
+    .onlyaline {
176
+        overflow: hidden;
177
+        white-space: nowrap;
178
+        text-overflow: ellipsis;
179
+    }
180
+    
181
+    .newcolor {
182
+        color: #79a3c4;
183
+    }
184
+    
185
+    .form-controldash {
186
+        color: #93989e;
187
+        height: 20px;
188
+        border-radius: 2px;
189
+        border: 1px solid #d1d1d1;
190
+    }
191
+    
192
+    .iconcolorjingji {
193
+        color: #BE2636 !important;
194
+    }
195
+    
196
+    .iconcoloryanzhong {
197
+        color: #f5a623 !important;
198
+    }
199
+    
200
+    .iconcoloryiban {
201
+        color: #005396 !important;
202
+    }
203
+    
204
+    .iconfontkill {
205
+        font-family: iconfont!important;
206
+        font-size: 18px;
207
+        color: #000;
208
+        z-index: 1;
209
+        -webkit-font-smoothing: antialiased;
210
+        -webkit-text-stroke-width: .2px;
211
+    }
212
+    
213
+    .monthchoice {
214
+        height: 200px;
215
+        overflow-x: hidden;
216
+        overflow-y: scroll;
217
+        line-height: 30px;
218
+        text-align: center;
219
+    }
220
+    
221
+    .dropdown-menu.monthchoice {
222
+        min-width: 30px !important;
223
+    }
224
+    
225
+    .backcopycolor {
226
+        background: #f9f9f9;
227
+    }
228
+    
229
+    .backcolor {
230
+        background: #fff;
231
+        border: 1px solid #ddd;
232
+    }
233
+    
234
+    .table>tbody>tr>th {
235
+        vertical-align: middle;
236
+        text-align: center;
237
+        background: #fafafa;
238
+    }
239
+    
240
+    .table>tbody>tr>td {
241
+        vertical-align: middle;
242
+        text-align: center;
243
+    }
244
+    
245
+    .bottomcat {
246
+        border-bottom: 1px solid #eaeaea;
247
+    }
248
+    
249
+    .table.table-bordered tr {
250
+        white-space: inherit;
251
+    }
252
+</style>
253
+<div ng-style="bodyheight">
254
+    <div class="backcopycolor col-xs-12 padding-15">
255
+        <div ng-controller="reporthandlegroupCtrl" class="backcolor padding-left-15 padding-right-15">
256
+            <div class="listbote dashheadcolor">
257
+                <div class="list-controls clearfix">
258
+                    <div class="know-text-group">
259
+                        <form class="col-xs-12 col-sm-12 form-inline schesearchsize">
260
+                            <div class="row">
261
+                                <div class="">选择日期:</div>
262
+                                <div class="form-group">
263
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeForm(parameters.paramDateFrom)" ng-model="parameters.paramDateFrom" max-date="parameters.paramDateTo" is-open="startOpened" hour-time=true ng-init="startOpened = false"
264
+                                        close-text="关闭" ng-click="startOpen($event)" />
265
+                                </div>
266
+                                <span>-</span>
267
+                                <div class="form-group">
268
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeTo(parameters.paramDateTo)" ng-model="parameters.paramDateTo" hour-time=true min-date="parameters.paramDateFrom" is-open="endOpened" ng-init="endOpened = false"
269
+                                        close-text="关闭" ng-click="endOpen($event)" />
270
+                                </div>
271
+                                <div class="form-group">
272
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
273
+                                        <ui-select-match placeholder="">
274
+                                            {{$select.selected.name}}
275
+                                        </ui-select-match>
276
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
277
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
278
+                                        </ui-select-choices>
279
+                                    </ui-select>
280
+                                </div>
281
+                                <div class="form-group pull-right">
282
+                                    <a class="btn btn-default defaultheight" ng-click="restData()" ng-disabled="disabledParentGroup" type="button">重置</a>
283
+                                </div>
284
+                                <div class="form-group pull-right margin-right-10">
285
+                                    <button class="btn btn-searchbutton" ng-click="mdxquery('all')" type="button">搜索</button>
286
+                                </div>
287
+                            </div>
288
+                        </form>
289
+                    </div>
290
+                </div>
291
+            </div>
292
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
293
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
294
+                    <div class="listheight dash_mapborder">
295
+                        <div class="fenlei col-xs-12 fontsizes-14">
296
+                            <div class="col-xs-12 bottomcat">
297
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
298
+                                    <div class="fenleifont pull-left">工作组事件处理总数及占比</div>
299
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
300
+                                </div>
301
+                            </div>
302
+                            <div id="reportgroup" style="width: 100%;height: 200px"></div>
303
+                        </div>
304
+                    </div>
305
+                </div>
306
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
307
+                    <div class="listheight dash_mapborder">
308
+                        <div class="fenlei col-xs-12" style="height:100%">
309
+                            <div class="fenleitop fontsizes-14">
310
+                                <div class="col-xs-12 bottomcat">
311
+                                    <div class="row fontcolor-two padding-top-15 padding-bottom-15">
312
+                                        <div class="fenleifont pull-left">工作组事件按时处理TOP5排名</div>
313
+                                        <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
314
+                                    </div>
315
+                                </div>
316
+
317
+                            </div>
318
+                            <div id="faultgroup" class="pull-left" style="width: 100%;
319
+            height: 260px"></div>
320
+                        </div>
321
+                    </div>
322
+                </div>
323
+            </div>
324
+            <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
325
+                <thread>
326
+                    <tr>
327
+                        <th rowspan="2">
328
+                            序号
329
+                        </th>
330
+                        <th rowspan="2">
331
+                            工作组
332
+                        </th>
333
+                        <th rowspan="2">
334
+                            事件总数(件)
335
+                        </th>
336
+                        <th rowspan="2">
337
+                            事件占比(%)
338
+                        </th>
339
+                        <th rowspan="1" colspan='4'>
340
+                            响应状况
341
+                        </th>
342
+                        <th rowspan="1" colspan='4'>
343
+                            解决状况
344
+                        </th>
345
+                        <th rowspan="1" colspan='4'>
346
+                            满意度
347
+                        </th>
348
+                        <th rowspan="1" colspan='9'>
349
+                            工单权重(复杂度)
350
+                        </th>
351
+                    </tr>
352
+                    <tr>
353
+                        <th rowspan="1">
354
+                            按时响应
355
+                        </th>
356
+                        <th rowspan="1">
357
+                            超时响应
358
+                        </th>
359
+                        <th rowspan="1">
360
+                            平均响应时间(分)
361
+                        </th>
362
+                        <th rowspan="1">
363
+                            超时响应占比
364
+                        </th>
365
+                        <th rowspan="1">
366
+                            按时解决
367
+                        </th>
368
+                        <th rowspan="1">
369
+                            超时解决
370
+                        </th>
371
+                        <th rowspan="1">
372
+                            平均解决时间(分)
373
+                        </th>
374
+                        <th rowspan="1">
375
+                            超时解决占比
376
+                        </th>
377
+                        <th rowspan="1">
378
+                            非常满意
379
+                        </th>
380
+                        <th rowspan="1">
381
+                            比较满意
382
+                        </th>
383
+                        <th rowspan="1">
384
+                            较满意
385
+                        </th>
386
+                        <th rowspan="1">
387
+                            一般满意
388
+                        </th>
389
+                        <th rowspan="1">
390
+                            1
391
+                        </th>
392
+                        <th rowspan="1">
393
+                            2
394
+                        </th>
395
+                        <th rowspan="1">
396
+                            3
397
+                        </th>
398
+                        <th rowspan="1">
399
+                            4
400
+                        </th>
401
+                        <th rowspan="1">
402
+                            5
403
+                        </th>
404
+                        <th rowspan="1">
405
+                            6
406
+                        </th>
407
+                        <th rowspan="1">
408
+                            7
409
+                        </th>
410
+                        <th rowspan="1">
411
+                            8
412
+                        </th>
413
+                        <th rowspan="1">
414
+                            9
415
+                        </th>
416
+                    </tr>
417
+                </thread>
418
+                <tbody class="tbody-hover">
419
+                    <tr ng-repeat="rowData in rRows">
420
+                        <td>
421
+                            {{$index+1}}
422
+                        </td>
423
+                        <td>
424
+                            {{rowData.name}}
425
+                        </td>
426
+                        <td>
427
+                            {{rowData.num}}
428
+                        </td>
429
+                        <td>
430
+                            {{rowData.proportion}}%
431
+                        </td>
432
+                        <td>
433
+                            {{rowData.ontimeresponse}}
434
+                        </td>
435
+                        <td>
436
+                            {{rowData.overtimeresponse}}
437
+                        </td>
438
+                        <td>
439
+                            {{rowData.responsetime}}
440
+                        </td>
441
+                        <td>
442
+                            {{rowData.overtimeresponseProportion}}%
443
+                        </td>
444
+                        <td>
445
+                            {{rowData.ontimesolve}}
446
+                        </td>
447
+                        <td>
448
+                            {{rowData.overtimesolve}}
449
+                        </td>
450
+                        <td>
451
+                            {{rowData.solvetime}}
452
+                        </td>
453
+                        <td>
454
+                            {{rowData.overtimesolveProportion}}%
455
+                        </td>
456
+                        <td>
457
+                            {{rowData.fcmy}}%
458
+                        </td>
459
+                        <td>
460
+                            {{rowData.bymy}}%
461
+                        </td>
462
+                        <td>
463
+                            {{rowData.my}}%
464
+                        </td>
465
+                        <td>
466
+                            {{rowData.ybmy}}%
467
+                        </td>
468
+                        <td>
469
+                            {{rowData.fzd1}}%
470
+                        </td>
471
+                        <td>
472
+                            {{rowData.fzd2}}%
473
+                        </td>
474
+                        <td>
475
+                            {{rowData.fzd3}}%
476
+                        </td>
477
+                        <td>
478
+                            {{rowData.fzd4}}%
479
+                        </td>
480
+                        <td>
481
+                            {{rowData.fzd5}}%
482
+                        </td>
483
+                        <td>
484
+                            {{rowData.fzd6}}%
485
+                        </td>
486
+                        <td>
487
+                            {{rowData.fzd7}}%
488
+                        </td>
489
+                        <td>
490
+                            {{rowData.fzd8}}%
491
+                        </td>
492
+                        <td>
493
+                            {{rowData.fzd9}}%
494
+                        </td>
495
+                    </tr>
496
+                </tbody>
497
+            </table>
498
+        </div>
499
+    </div>
500
+</div>
501
+<!-- end: BOOTSRAP NAV TREE

+ 518 - 0
assets/views/report/handlepeople.html

@@ -0,0 +1,518 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">事件处理人报表<i tooltip='请查看事件处理人报表相关数据。' tooltip-placement="right" class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i></h1>
5
+        </div>
6
+    </div>
7
+</section>
8
+<!-- end: PAGE TITLE -->
9
+<!-- start: BOOTSRAP NAV TREE -->
10
+<style>
11
+    .bodybackground {
12
+        background: #eee;
13
+    }
14
+    
15
+    .know-text-group {
16
+        display: inline-block;
17
+        box-sizing: border-box;
18
+        border-radius: 2px;
19
+        /* border: 1px solid #fff; */
20
+        /* padding-top: 5px; */
21
+        width: 100%;
22
+        /* padding-bottom: 5px; */
23
+    }
24
+    
25
+    .know-text-group-div {
26
+        display: inline-block;
27
+        width: 12%;
28
+        padding-top: 5px;
29
+        padding-bottom: 5px;
30
+        overflow: hidden;
31
+        white-space: nowrap;
32
+        text-overflow: ellipsis;
33
+    }
34
+    
35
+    .know-text-group-div:hover {
36
+        background-color: #005395 !important;
37
+        color: #fff;
38
+    }
39
+    
40
+    .know-text-group-div.active,
41
+    .know-text-group-div:focus,
42
+    .know-text-group-div:hover {
43
+        background-color: #005395 !important;
44
+        color: #fff;
45
+    }
46
+    
47
+    .know-text-color {
48
+        padding-left: 14px;
49
+        font-size: 14px;
50
+        color: #93989e;
51
+    }
52
+    
53
+    .know-span {
54
+        display: inline-block;
55
+        text-align: center;
56
+    }
57
+    
58
+    .know-num {
59
+        width: 28px;
60
+        height: 20px;
61
+        line-height: 20px;
62
+        font-size: 12px;
63
+        border-radius: 10px;
64
+        margin-right: 10px;
65
+        color: white;
66
+    }
67
+    
68
+    .bg-yellow {
69
+        background: #005395;
70
+    }
71
+    
72
+    .bg-green {
73
+        background: #2edbb8;
74
+    }
75
+    
76
+    .bg-blue {
77
+        background: #6f9ad4;
78
+    }
79
+    
80
+    .leftBorder {
81
+        border-left: 1px solid #eeeeee;
82
+    }
83
+    
84
+    .leftBorder.active,
85
+    .leftBorder:focus,
86
+    .leftBorder:hover {
87
+        border-left: 0px solid #005395;
88
+    }
89
+    
90
+    .divRight {
91
+        float: right;
92
+    }
93
+    
94
+    input[type="text"] {}
95
+    
96
+    .searchInput {
97
+        border: none !important;
98
+    }
99
+    /*     
100
+    input:focus {
101
+        box-shadow: none !important;
102
+        border: none !important;
103
+        background-color: white !important;
104
+    } */
105
+    
106
+    .know-left-div {
107
+        width: 706px;
108
+        /* margin-top: 15px; */
109
+        /* display: inline-block; */
110
+        float: left;
111
+        margin-right: 20px;
112
+    }
113
+    
114
+    .know-right-div {
115
+        /* margin-top: 15px; */
116
+        /* display: inline-block; */
117
+        overflow: hidden;
118
+    }
119
+    
120
+    .know-left-up-div {
121
+        margin-bottom: 20px;
122
+    }
123
+    
124
+    .know-left-div-head {
125
+        height: 34px;
126
+        line-height: 34px;
127
+        background: #e9eff8;
128
+        font-size: 14px;
129
+        color: #606367;
130
+        border-radius: 8px 8px 0 0;
131
+        padding-left: 10px;
132
+    }
133
+    /* .listheight {}
134
+     */
135
+    
136
+    .gobutton {
137
+        color: 005395;
138
+        font-family: "microsoft yahei";
139
+    }
140
+    
141
+    .gobutton:hover {
142
+        color: #1b3651;
143
+    }
144
+    
145
+    .gobutton:focus,
146
+    .gobutton:hover {
147
+        color: #1b3651;
148
+    }
149
+    
150
+    .dash_head {
151
+        font-size: 14px;
152
+    }
153
+    
154
+    .dash_headborder {
155
+        height: 260px;
156
+        border: 1px solid #dedede;
157
+        border-radius: 2px;
158
+    }
159
+    
160
+    .dashheadcolor {
161
+        border-bottom: 1px solid #dedede;
162
+        border-radius: 2px;
163
+    }
164
+    
165
+    .dash_mapborder {
166
+        height: 320px;
167
+        border: 1px solid #dedede;
168
+        border-radius: 2px;
169
+    }
170
+    
171
+    .disablecolor {
172
+        color: #f3f3f3 !important;
173
+    }
174
+    
175
+    .onlyaline {
176
+        overflow: hidden;
177
+        white-space: nowrap;
178
+        text-overflow: ellipsis;
179
+    }
180
+    
181
+    .newcolor {
182
+        color: #79a3c4;
183
+    }
184
+    
185
+    .form-controldash {
186
+        color: #93989e;
187
+        height: 20px;
188
+        border-radius: 2px;
189
+        border: 1px solid #d1d1d1;
190
+    }
191
+    
192
+    .iconcolorjingji {
193
+        color: #BE2636 !important;
194
+    }
195
+    
196
+    .iconcoloryanzhong {
197
+        color: #f5a623 !important;
198
+    }
199
+    
200
+    .iconcoloryiban {
201
+        color: #005396 !important;
202
+    }
203
+    
204
+    .iconfontkill {
205
+        font-family: iconfont!important;
206
+        font-size: 18px;
207
+        color: #000;
208
+        z-index: 1;
209
+        -webkit-font-smoothing: antialiased;
210
+        -webkit-text-stroke-width: .2px;
211
+    }
212
+    
213
+    .monthchoice {
214
+        height: 200px;
215
+        overflow-x: hidden;
216
+        overflow-y: scroll;
217
+        line-height: 30px;
218
+        text-align: center;
219
+    }
220
+    
221
+    .dropdown-menu.monthchoice {
222
+        min-width: 30px !important;
223
+    }
224
+    
225
+    .backcopycolor {
226
+        background: #f9f9f9;
227
+    }
228
+    
229
+    .backcolor {
230
+        background: #fff;
231
+        border: 1px solid #ddd;
232
+    }
233
+    
234
+    .table-nowrap>tbody>tr>th {
235
+        vertical-align: middle;
236
+        text-align: center;
237
+        background: #fafafa;
238
+        white-space: normal;
239
+    }
240
+    
241
+    .table-nowrap>tbody>tr>td {
242
+        vertical-align: middle;
243
+        text-align: center;
244
+        white-space: normal;
245
+    }
246
+    
247
+    .bottomcat {
248
+        border-bottom: 1px solid #eaeaea;
249
+    }
250
+    
251
+    .table.table-bordered tr {
252
+        white-space: inherit;
253
+    }
254
+</style>
255
+<div ng-style="bodyheight">
256
+    <div class="backcopycolor col-xs-12 padding-15">
257
+        <div ng-controller="reporthandlepeopleCtrl" class="backcolor padding-left-15 padding-right-15">
258
+            <div class="listbote dashheadcolor">
259
+                <div class="list-controls clearfix">
260
+                    <div class="know-text-group">
261
+                        <form class="col-xs-12 col-sm-12 form-inline schesearchsize">
262
+                            <div class="row">
263
+                                <div class="">选择日期:</div>
264
+                                <div class="form-group">
265
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeForm(parameters.paramDateFrom)" ng-model="parameters.paramDateFrom" max-date="parameters.paramDateTo" is-open="startOpened" hour-time=true ng-init="startOpened = false"
266
+                                        close-text="关闭" ng-click="startOpen($event)" />
267
+                                </div>
268
+                                <span>-</span>
269
+                                <div class="form-group">
270
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeTo(parameters.paramDateTo)" ng-model="parameters.paramDateTo" hour-time=true min-date="parameters.paramDateFrom" is-open="endOpened" ng-init="endOpened = false"
271
+                                        close-text="关闭" ng-click="endOpen($event)" />
272
+                                </div>
273
+                                <div class="form-group">
274
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
275
+                                        <ui-select-match placeholder="">
276
+                                            {{$select.selected.name}}
277
+                                        </ui-select-match>
278
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
279
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
280
+                                        </ui-select-choices>
281
+                                    </ui-select>
282
+                                </div>
283
+                                <div class="form-group" style="margin-top: -20px;">
284
+                                    <div class="">选择处理组:</div>
285
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.group" theme="bootstrap">
286
+                                        <ui-select-match placeholder="全部">
287
+                                            {{$select.selected.groupName}}
288
+                                        </ui-select-match>
289
+                                        <ui-select-choices repeat="item in group" refresh="onChangegroup($select.search)">
290
+                                            <div ng-bind-html="item.groupName | highlight: $select.search"></div>
291
+                                        </ui-select-choices>
292
+                                    </ui-select>
293
+                                </div>
294
+                                <div class="form-group pull-right">
295
+                                    <a class="btn btn-default defaultheight" ng-click="restData()" ng-disabled="disabledParentGroup" type="button">重置</a>
296
+                                </div>
297
+                                <div class="form-group pull-right margin-right-10">
298
+                                    <button class="btn btn-searchbutton" ng-click="mdxquery(searchkeys)" type="button">搜索</button>
299
+                                </div>
300
+                            </div>
301
+                        </form>
302
+                    </div>
303
+                </div>
304
+            </div>
305
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
306
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
307
+                    <div class="listheight dash_mapborder">
308
+                        <div class="fenlei col-xs-12 fontsizes-14">
309
+                            <div class="col-xs-12 bottomcat">
310
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
311
+                                    <div class="fenleifont pull-left">处理人事件处理总数及占比</div>
312
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
313
+                                </div>
314
+                            </div>
315
+                            <div class="col-xs-12 bottomcat" style="display: inline;
316
+                            white-space: nowrap;
317
+                            overflow-x:scroll;
318
+                            float:left;
319
+                            overflow-y:hidden">
320
+                                <div id="reportpeople" style="width: 200%;height: 266px;"></div>
321
+                            </div>
322
+                            <!-- <div class="js-eclegend-tool" style="position: absolute;right: 20px;top: 40%"></div> -->
323
+                        </div>
324
+                    </div>
325
+                </div>
326
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
327
+                    <div class="listheight dash_mapborder">
328
+                        <div class="fenlei col-xs-12" style="height:100%">
329
+                            <div class="fenleitop fontsizes-14">
330
+                                <div class="col-xs-12 bottomcat">
331
+                                    <div class="row fontcolor-two padding-top-15 padding-bottom-15">
332
+                                        <div class="fenleifont pull-left">处理人事件按时处理TOP5排名</div>
333
+                                        <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
334
+                                    </div>
335
+                                </div>
336
+
337
+                            </div>
338
+                            <div id="faultpeople" class="pull-left" style="width: 100%;
339
+            height: 260px"></div>
340
+                        </div>
341
+                    </div>
342
+                </div>
343
+            </div>
344
+            <table class="table table-bordered table-nowrap" cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
345
+                <thread>
346
+                    <tr>
347
+                        <th rowspan="2">
348
+                            序号
349
+                        </th>
350
+                        <th rowspan="2">
351
+                            处理人
352
+                        </th>
353
+                        <th rowspan="2">
354
+                            事件总数(件)
355
+                        </th>
356
+                        <th rowspan="2">
357
+                            事件占比(%)
358
+                        </th>
359
+                        <th rowspan="1" colspan='4'>
360
+                            响应状况
361
+                        </th>
362
+                        <th rowspan="1" colspan='4'>
363
+                            解决状况
364
+                        </th>
365
+                        <th rowspan="1" colspan='4'>
366
+                            满意度
367
+                        </th>
368
+                        <th rowspan="1" colspan='4'>
369
+                            工单权重(复杂度)
370
+                        </th>
371
+                        <!-- <th rowspan="2">
372
+                            发起转派
373
+                        </th> -->
374
+                        <th rowspan="2">
375
+                            接受转派
376
+                        </th>
377
+                        <!-- <th rowspan="2">
378
+                            发起升级
379
+                        </th> -->
380
+                        <th rowspan="2">
381
+                            接受升级
382
+                        </th>
383
+                    </tr>
384
+                    <tr>
385
+                        <th rowspan="1">
386
+                            按时响应
387
+                        </th>
388
+                        <th rowspan="1">
389
+                            超时响应
390
+                        </th>
391
+                        <th rowspan="1">
392
+                            平均响应时间(分)
393
+                        </th>
394
+                        <th rowspan="1">
395
+                            超时响应占比
396
+                        </th>
397
+                        <th rowspan="1">
398
+                            按时解决
399
+                        </th>
400
+                        <th rowspan="1">
401
+                            超时解决
402
+                        </th>
403
+                        <th rowspan="1">
404
+                            平均解决时间(分)
405
+                        </th>
406
+                        <th rowspan="1">
407
+                            超时解决占比
408
+                        </th>
409
+                        <th rowspan="1">
410
+                            非常满意
411
+                        </th>
412
+                        <th rowspan="1">
413
+                            比较满意
414
+                        </th>
415
+                        <th rowspan="1">
416
+                            较满意
417
+                        </th>
418
+                        <th rowspan="1">
419
+                            一般满意
420
+                        </th>
421
+                        <th rowspan="1">
422
+                            1
423
+                        </th>
424
+                        <th rowspan="1">
425
+                            2
426
+                        </th>
427
+                        <th rowspan="1">
428
+                            3
429
+                        </th>
430
+                        <th rowspan="1">
431
+                            4
432
+                        </th>
433
+                    </tr>
434
+                </thread>
435
+                <tbody class="tbody-hover">
436
+                    <tr ng-repeat="rowData in rRowspeople">
437
+                        <td>
438
+                            {{$index+1}}
439
+                        </td>
440
+                        <td>
441
+                            {{rowData.name}}
442
+                        </td>
443
+                        <td>
444
+                            {{rowData.sum}}
445
+                        </td>
446
+                        <td>
447
+                            {{rowData.proportion}}%
448
+                        </td>
449
+                        <td>
450
+                            {{rowData.ontimeresponse}}
451
+                        </td>
452
+                        <td>
453
+                            {{rowData.overtimeresponse}}
454
+                        </td>
455
+                        <td>
456
+                            {{rowData.responsetime}}
457
+                        </td>
458
+                        <td>
459
+                            {{rowData.overtimeresponseProportion}}%
460
+                        </td>
461
+                        <td>
462
+                            {{rowData.ontimesolve}}
463
+                        </td>
464
+                        <td>
465
+                            {{rowData.overtimesolve}}
466
+                        </td>
467
+                        <td>
468
+                            {{rowData.solvetime}}
469
+                        </td>
470
+                        <td>
471
+                            {{rowData.overtimesolveProportion}}%
472
+                        </td>
473
+                        <td>
474
+                            {{rowData.fcmy}}%
475
+                        </td>
476
+                        <td>
477
+                            {{rowData.bymy}}%
478
+                        </td>
479
+                        <td>
480
+                            {{rowData.my}}%
481
+                        </td>
482
+                        <td>
483
+                            {{rowData.ybmy}}%
484
+                        </td>
485
+                        <td>
486
+                            {{rowData.fzd1}}%
487
+                        </td>
488
+                        <td>
489
+                            {{rowData.fzd2}}%
490
+                        </td>
491
+                        <td>
492
+                            {{rowData.fzd3}}%
493
+                        </td>
494
+                        <td>
495
+                            {{rowData.fzd4}}%
496
+                        </td>
497
+                        <td>
498
+                            {{rowData.jszp}}%
499
+                        </td>
500
+                        <td>
501
+                            {{rowData.jssj}}%
502
+                        </td>
503
+                        <!-- <td>
504
+                            {{rowData.fzd7}}%
505
+                        </td>
506
+                        <td>
507
+                            {{rowData.fzd8}}%
508
+                        </td>
509
+                        <td>
510
+                            {{rowData.fzd9}}%
511
+                        </td> -->
512
+                    </tr>
513
+                </tbody>
514
+            </table>
515
+        </div>
516
+    </div>
517
+</div>
518
+<!-- end: BOOTSRAP NAV TREE

+ 378 - 0
assets/views/report/suorce.html

@@ -0,0 +1,378 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">事件来源报表<i tooltip='请查看事件来源报表相关数据。' tooltip-placement="right" class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i></h1>
5
+        </div>
6
+    </div>
7
+</section>
8
+<!-- end: PAGE TITLE -->
9
+<!-- start: BOOTSRAP NAV TREE -->
10
+<style>
11
+    .bodybackground {
12
+        background: #eee;
13
+    }
14
+    
15
+    .know-text-group {
16
+        display: inline-block;
17
+        box-sizing: border-box;
18
+        border-radius: 2px;
19
+        /* border: 1px solid #fff; */
20
+        /* padding-top: 5px; */
21
+        width: 100%;
22
+        /* padding-bottom: 5px; */
23
+    }
24
+    
25
+    .know-text-group-div {
26
+        display: inline-block;
27
+        width: 12%;
28
+        padding-top: 5px;
29
+        padding-bottom: 5px;
30
+        overflow: hidden;
31
+        white-space: nowrap;
32
+        text-overflow: ellipsis;
33
+    }
34
+    
35
+    .know-text-group-div:hover {
36
+        background-color: #005395 !important;
37
+        color: #fff;
38
+    }
39
+    
40
+    .know-text-group-div.active,
41
+    .know-text-group-div:focus,
42
+    .know-text-group-div:hover {
43
+        background-color: #005395 !important;
44
+        color: #fff;
45
+    }
46
+    
47
+    .know-text-color {
48
+        padding-left: 14px;
49
+        font-size: 14px;
50
+        color: #93989e;
51
+    }
52
+    
53
+    .know-span {
54
+        display: inline-block;
55
+        text-align: center;
56
+    }
57
+    
58
+    .know-num {
59
+        width: 28px;
60
+        height: 20px;
61
+        line-height: 20px;
62
+        font-size: 12px;
63
+        border-radius: 10px;
64
+        margin-right: 10px;
65
+        color: white;
66
+    }
67
+    
68
+    .bg-yellow {
69
+        background: #005395;
70
+    }
71
+    
72
+    .bg-green {
73
+        background: #2edbb8;
74
+    }
75
+    
76
+    .bg-blue {
77
+        background: #6f9ad4;
78
+    }
79
+    
80
+    .leftBorder {
81
+        border-left: 1px solid #eeeeee;
82
+    }
83
+    
84
+    .leftBorder.active,
85
+    .leftBorder:focus,
86
+    .leftBorder:hover {
87
+        border-left: 0px solid #005395;
88
+    }
89
+    
90
+    .divRight {
91
+        float: right;
92
+    }
93
+    
94
+    input[type="text"] {}
95
+    
96
+    .searchInput {
97
+        border: none !important;
98
+    }
99
+    /*     
100
+    input:focus {
101
+        box-shadow: none !important;
102
+        border: none !important;
103
+        background-color: white !important;
104
+    } */
105
+    
106
+    .know-left-div {
107
+        width: 706px;
108
+        /* margin-top: 15px; */
109
+        /* display: inline-block; */
110
+        float: left;
111
+        margin-right: 20px;
112
+    }
113
+    
114
+    .know-right-div {
115
+        /* margin-top: 15px; */
116
+        /* display: inline-block; */
117
+        overflow: hidden;
118
+    }
119
+    
120
+    .know-left-up-div {
121
+        margin-bottom: 20px;
122
+    }
123
+    
124
+    .know-left-div-head {
125
+        height: 34px;
126
+        line-height: 34px;
127
+        background: #e9eff8;
128
+        font-size: 14px;
129
+        color: #606367;
130
+        border-radius: 8px 8px 0 0;
131
+        padding-left: 10px;
132
+    }
133
+    /* .listheight {}
134
+     */
135
+    
136
+    .gobutton {
137
+        color: 005395;
138
+        font-family: "microsoft yahei";
139
+    }
140
+    
141
+    .gobutton:hover {
142
+        color: #1b3651;
143
+    }
144
+    
145
+    .gobutton:focus,
146
+    .gobutton:hover {
147
+        color: #1b3651;
148
+    }
149
+    
150
+    .dash_head {
151
+        font-size: 14px;
152
+    }
153
+    
154
+    .dash_headborder {
155
+        height: 260px;
156
+        border: 1px solid #dedede;
157
+        border-radius: 2px;
158
+    }
159
+    
160
+    .dashheadcolor {
161
+        border-bottom: 1px solid #dedede;
162
+        border-radius: 2px;
163
+    }
164
+    
165
+    .dash_mapborder {
166
+        height: 320px;
167
+        border: 1px solid #dedede;
168
+        border-radius: 2px;
169
+    }
170
+    
171
+    .disablecolor {
172
+        color: #f3f3f3 !important;
173
+    }
174
+    
175
+    .onlyaline {
176
+        overflow: hidden;
177
+        white-space: nowrap;
178
+        text-overflow: ellipsis;
179
+    }
180
+    
181
+    .newcolor {
182
+        color: #79a3c4;
183
+    }
184
+    
185
+    .form-controldash {
186
+        color: #93989e;
187
+        height: 20px;
188
+        border-radius: 2px;
189
+        border: 1px solid #d1d1d1;
190
+    }
191
+    
192
+    .iconcolorjingji {
193
+        color: #BE2636 !important;
194
+    }
195
+    
196
+    .iconcoloryanzhong {
197
+        color: #f5a623 !important;
198
+    }
199
+    
200
+    .iconcoloryiban {
201
+        color: #005396 !important;
202
+    }
203
+    
204
+    .iconfontkill {
205
+        font-family: iconfont!important;
206
+        font-size: 18px;
207
+        color: #000;
208
+        z-index: 1;
209
+        -webkit-font-smoothing: antialiased;
210
+        -webkit-text-stroke-width: .2px;
211
+    }
212
+    
213
+    .monthchoice {
214
+        height: 200px;
215
+        overflow-x: hidden;
216
+        overflow-y: scroll;
217
+        line-height: 30px;
218
+        text-align: center;
219
+    }
220
+    
221
+    .dropdown-menu.monthchoice {
222
+        min-width: 30px !important;
223
+    }
224
+    
225
+    .backcopycolor {
226
+        background: #f9f9f9;
227
+    }
228
+    
229
+    .backcolor {
230
+        background: #fff;
231
+        border: 1px solid #ddd;
232
+    }
233
+    
234
+    .table>tbody>tr>th {
235
+        vertical-align: middle;
236
+        text-align: center;
237
+        background: #fafafa;
238
+    }
239
+    
240
+    .table>tbody>tr>td {
241
+        vertical-align: middle;
242
+        text-align: center;
243
+    }
244
+    
245
+    .bottomcat {
246
+        border-bottom: 1px solid #eaeaea;
247
+    }
248
+    
249
+    .table.table-bordered tr {
250
+        white-space: inherit;
251
+    }
252
+    
253
+    .cs-skin-slide>span {
254
+        height: 34px;
255
+    }
256
+</style>
257
+<div ng-style="bodyheight">
258
+    <div class="backcopycolor col-xs-12 padding-15">
259
+        <div ng-controller="reportsuorceCtrl" class="backcolor padding-left-15 padding-right-15">
260
+            <div class="listbote dashheadcolor">
261
+                <div class="list-controls clearfix">
262
+                    <div class="know-text-group">
263
+                        <form class="col-xs-12 col-sm-12 form-inline schesearchsize">
264
+                            <div class="row">
265
+                                <div class="">选择日期:</div>
266
+                                <div class="form-group">
267
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeForm(parameters.paramDateFrom)" ng-model="parameters.paramDateFrom" max-date="parameters.paramDateTo" is-open="startOpened" hour-time=true ng-init="startOpened = false"
268
+                                        close-text="关闭" ng-click="startOpen($event)" />
269
+                                </div>
270
+                                <span>-</span>
271
+                                <div class="form-group">
272
+                                    <input type="text" class="form-control" datepicker-popuptime="yyyy-MM-dd" ng-change="changeTo(parameters.paramDateTo)" ng-model="parameters.paramDateTo" hour-time=true min-date="parameters.paramDateFrom" is-open="endOpened" ng-init="endOpened = false"
273
+                                        close-text="关闭" ng-click="endOpen($event)" />
274
+                                </div>
275
+                                <!-- <div class="form-group">
276
+                                    <select class="form-control" ng-model="phone" ng-change="phoneChange(phone)">  
277
+                                        <option ng-repeat="x in runNumber" value="{{x.name}}">{{x.name}}</option>  
278
+                                    </select>
279
+                                </div> -->
280
+                                <!-- <div class="form-group" style="min-width:158px;">
281
+                                    <select ng-model="searchTypes" class="cs-select cs-skin-slide">
282
+                                              <option value="">近7天</option>				
283
+                                            <option value="todo" ng-attr-class="{searchTypes=='todo'?'cs-selected':''}">最近30天</option>
284
+                                            <option value="create" ng-attr-class="{searchTypes=='create'?'cs-selected':''}">最近30天</option>
285
+                                            <option value="done" ng-attr-class="{searchTypes=='done'?'cs-selected':''}">最近半年</option>
286
+                                        </select>
287
+                                </div> -->
288
+                                <div class="form-group">
289
+                                    <ui-select class="pull-left" style="width:158px" ng-model="searchkeys.quikly" theme="bootstrap" ng-change="onChangetime(searchkeys.quikly)">
290
+                                        <ui-select-match placeholder="">
291
+                                            {{$select.selected.name}}
292
+                                        </ui-select-match>
293
+                                        <ui-select-choices repeat="item in quikly" refresh="onChangehandling($select.search)">
294
+                                            <div ng-bind-html="item.name | highlight: $select.search"></div>
295
+                                        </ui-select-choices>
296
+                                    </ui-select>
297
+                                </div>
298
+                                <div class="form-group pull-right">
299
+                                    <a class="btn btn-default defaultheight" ng-click="restData()" ng-disabled="disabledParentGroup" type="button">重置</a>
300
+                                </div>
301
+                                <div class="form-group pull-right margin-right-10">
302
+                                    <button class="btn btn-searchbutton" ng-click="mdxquery('all')" type="button">搜索</button>
303
+                                </div>
304
+                            </div>
305
+                        </form>
306
+                    </div>
307
+                </div>
308
+            </div>
309
+            <div class="row margin-top-15 margin-bottom-15" style="margin-left:-7px;margin-right:-7px">
310
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
311
+                    <div class="listheight dash_mapborder">
312
+                        <div class="fenlei col-xs-12 fontsizes-14">
313
+                            <div class="col-xs-12 bottomcat">
314
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
315
+                                    <div class="fenleifont pull-left">事件来源总数及占比</div>
316
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
317
+                                </div>
318
+                            </div>
319
+                            <div id="reportsuorce" style="width: 100%;height: 200px"></div>
320
+                        </div>
321
+                    </div>
322
+                </div>
323
+                <div class="col-xs-6" style="padding-left:8px;padding-right:8px">
324
+                    <div class="listheight dash_mapborder">
325
+                        <div class="fenlei col-xs-12 fontsizes-14">
326
+                            <div class="col-xs-12 bottomcat">
327
+                                <div class="row fontcolor-two padding-top-15 padding-bottom-15">
328
+                                    <div class="fenleifont pull-left">事件来源趋势分析</div>
329
+                                    <div class="fenleifont pull-right fontcolor-ten fontsizes-14"></div>
330
+                                </div>
331
+                            </div>
332
+                            <div id="liuliangsuorce" style="width: 100%;height: 260px"></div>
333
+                        </div>
334
+                    </div>
335
+                </div>
336
+
337
+            </div>
338
+            <table class="table table-bordered " cellspacing="0" cellpadding="20" style="font-weight:normal !important;margin-bottom: 15px;">
339
+                <thread>
340
+                    <tr>
341
+                        <th>
342
+                            序号
343
+                        </th>
344
+                        <th>
345
+                            事件来源
346
+                        </th>
347
+                        <th>
348
+                            事件总数(件)
349
+                        </th>
350
+                        <th>
351
+                            事件占比(%)
352
+                        </th>
353
+                    </tr>
354
+                </thread>
355
+                <tbody class="tbody-hover">
356
+                    <tr ng-repeat="rowData in rRowssuorce">
357
+                        <td>
358
+                            <div>{{$index+1}}</div>
359
+                        </td>
360
+                        <td>
361
+                            <div>{{rowData._name}}</div>
362
+                        </td>
363
+                        <td>
364
+                            <div>{{rowData._count}}</div>
365
+                        </td>
366
+                        <td>
367
+                            <div>{{rowData.percentage}}%</div>
368
+                        </td>
369
+                        <!-- <td ng-repeat="fieldData in rowData">
370
+                            <div>{{fieldData.value.value}}</div>
371
+                        </td> -->
372
+                    </tr>
373
+                </tbody>
374
+            </table>
375
+        </div>
376
+    </div>
377
+</div>
378
+<!-- end: BOOTSRAP NAV TREE

+ 3 - 1
index.html

@@ -19,7 +19,9 @@
19 19
     <!-- <link href="http://fonts.googleapis.com/css?family=Lato:300,400,400italic,600,700|Raleway:300,400,500,600,700|Crete+Round:400italic" rel="stylesheet" type="text/css" /> -->
20 20
     <!-- Bootstrap -->
21 21
     <link rel="stylesheet" href="../bower_components/bootstrap/dist/css/bootstrap.css">
22
-    <link rel="icon" type="image/png" sizes="32x32" href="assets/images/login/logo.png">
22
+    <link rel="icon" type="image/png" sizes="32x32" href="assets/images/login/logo_zncd.png" ng-if="isZncd">
23
+    <link rel="icon" type="image/png" sizes="32x32" href="assets/images/login/logo_hk.png" ng-if="isHk">
24
+    <link rel="icon" type="image/png" sizes="32x32" href="assets/images/login/logo_default.png" ng-if="!isHk&&!isZncd">
23 25
     <!-- Font Awesome -->
24 26
     <link rel="stylesheet" href="../bower_components/font-awesome/css/font-awesome.min.css">
25 27
     <link rel="stylesheet" href="../bower_components/font-awesome/css/font-awesome.min.css">

+ 1 - 0
package.json

@@ -4,6 +4,7 @@
4 4
   "description": "AngularJs Bootstrap Admin Template",
5 5
   "scripts": {
6 6
     "development": "node ./upload/development.js",
7
+    "development110": "node ./upload/development110.js",
7 8
     "production": "node ./upload/production.js",
8 9
     "build": "npx gulp build"
9 10
   },

+ 45 - 0
upload/development110.js

@@ -0,0 +1,45 @@
1
+const shell = require('shelljs')
2
+const path = require('path');
3
+const config = {
4
+  ip: "192.168.3.110", // ssh地址
5
+  username: "root", // ssh 用户名
6
+  port: 22,      //端口
7
+  password: "DStech@123", // ssh 密码
8
+  // path: '/home/itsm/project/web/pc', // 上传地址,删除地址(第一次部署)
9
+  path: '/home/itsm/project/web/pc/assets', // 上传地址,删除地址(bower_components太大,第二次以后的更新只更新assets,具体的灵活应变)
10
+  // buildPath: '../dist' // 本地打包后文件地址(第一次部署)
11
+  buildPath: '../dist/assets' // 本地打包后文件地址(bower_components太大,第二次以后的更新只更新assets,具体的灵活应变)
12
+}
13
+let Client = require('ssh2-sftp-client');
14
+
15
+function connectSSh() {
16
+  let sftp = new Client();
17
+  sftp.connect({
18
+    host: config.ip,
19
+    port: config.port,
20
+    username: config.username,
21
+    password: config.password
22
+  }).then(() => {
23
+    console.log("-----先执行删除服务器文件-----")
24
+    return sftp.rmdir(config.path, true);
25
+  }).then(() => {
26
+    // 上传文件
27
+    console.log("-----开始上传-----")
28
+    return sftp.uploadDir(path.resolve(__dirname, config.buildPath), config.path);
29
+  }).then((data) => {
30
+    console.log("-----上传完成-----");
31
+    sftp.end();
32
+  }).catch((err) => {
33
+    console.log(err, '-----失败-----');
34
+    sftp.end();
35
+  });
36
+}
37
+function runTask() {
38
+  //打包完成
39
+  if (shell.exec(`npm run build`).code == 0) {
40
+    console.log("-----打包成功-----");
41
+    //提交上传
42
+    connectSSh();
43
+  }
44
+}
45
+runTask()