Browse Source

上下班统计

seimin 1 year ago
parent
commit
3109911087

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

@@ -132,6 +132,8 @@ app.constant('JS_REQUIRES', {
132 132
         'taskDetailedCtr':'assets/js/controllers/task/taskDetailedCtrl.js',//任务清单
133 133
         'workingFormCtr':'assets/js/controllers/working/workingFormCtr.js',//上下班管理
134 134
         'workingHistoryFormCtr':'assets/js/controllers/working/workingHistoryFormCtr.js',//每日上下班记录
135
+        'workingStatisticsCtrl':'assets/js/controllers/working/workingStatisticsCtrl.js',//上下班统计
136
+        'workingStatisticsDetailCtrl':'assets/js/controllers/working/workingStatisticsDetailCtrl.js',//上下班统计-详情
135 137
         //*** outside service
136 138
         'dnsmanageCtrl': 'assets/js/controllers/externalservice/dnsmanageCtrl.js',
137 139
         'emailhandleCtrl': 'assets/js/controllers/externalservice/emailhandleCtrl.js',

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

@@ -514,6 +514,26 @@ app.config(['$authProvider', '$httpProvider', '$stateProvider', '$urlRouterProvi
514 514
                 ncyBreadcrumb: {
515 515
                     label: 'incident list'
516 516
                 }
517
+            }).state('app.working.statistics', {
518
+                url: '/statistics/:startTime/:endTime',
519
+                templateUrl: "assets/views/working/statistics.html",
520
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'angularBootstrapNavTree', 'multi.select.tree', 'spin', 'ladda', 'angular-ladda', 'ui.grid', 'moment', 'angularPrint', 'angularFileUpload', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'moment', 'workingStatisticsCtrl'),
521
+                title: 'incident.LIST',
522
+                pdKey: 'bpm_incident',
523
+                icon: 'ti-list',
524
+                ncyBreadcrumb: {
525
+                    label: 'incident list'
526
+                }
527
+            }).state('app.working.statisticsDetail', {
528
+                url: '/statistics/:userId/:userName/:startTime/:endTime/:msg/:msgType',
529
+                templateUrl: "assets/views/working/statisticsDetail.html",
530
+                resolve: loadSequence('jquery-sparkline', 'ui.select', 'angularBootstrapNavTree', 'multi.select.tree', 'spin', 'ladda', 'angular-ladda', 'ui.grid', 'moment', 'angularPrint', 'angularFileUpload', 'ui.select', 'multi.select.tree', 'angularBootstrapNavTree', 'moment', 'workingStatisticsDetailCtrl'),
531
+                title: 'incident.LIST',
532
+                pdKey: 'bpm_incident',
533
+                icon: 'ti-list',
534
+                ncyBreadcrumb: {
535
+                    label: 'incident list'
536
+                }
517 537
             }).state('app.incident.editor', {
518 538
                 url: '/editor/{taskId}/{processInstanceId}/{dataId}',
519 539
                 templateUrl: "assets/views/customform/index.html",

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

@@ -2342,6 +2342,11 @@ app.controller('AppCtrl', ['$rootScope', '$scope', '$state', '$translate', '$loc
2342 2342
                     item.tipshow = true;
2343 2343
                   }
2344 2344
                 }
2345
+                if (response.alarmCount > 0) {
2346
+                  if (item.id == 58) {
2347
+                    item.tipshow = true;
2348
+                  }
2349
+                }
2345 2350
                 if (item.children) {
2346 2351
                   angular.forEach(item.children, function (index) {
2347 2352
                     if (response.hjzxCount !== null && response.hjzxCount !== undefined) {
@@ -2427,6 +2432,16 @@ app.controller('AppCtrl', ['$rootScope', '$scope', '$state', '$translate', '$loc
2427 2432
                       }
2428 2433
                     }
2429 2434
 
2435
+                    if (response.alarmCount !== null && response.alarmCount !== undefined) {
2436
+                      if (index.id == 1227) {
2437
+                        if (response.alarmCount < 100) {
2438
+                          index.tipnum = response.alarmCount;
2439
+                        } else {
2440
+                          index.tipnum = "99+";
2441
+                        }
2442
+                      }
2443
+                    }
2444
+
2430 2445
 
2431 2446
                     if (response.toAuditCount && response.toReleaseCount && (parseInt(response.toReleaseCount) + parseInt(response.toAuditCount)) > 0) {
2432 2447
                       if (index.id == 23) {

+ 127 - 0
assets/js/controllers/working/workingStatisticsCtrl.js

@@ -0,0 +1,127 @@
1
+'use strict';
2
+app.controller('workingStatisticsCtrl', ["$scope", "$rootScope", "$state", "$stateParams", "$timeout", "$interval", "$http", "$cookieStore", "SweetAlert", "Restangular", "api_report", "api_statistic", "moment", 'api_user_data', 'api_login', 'api_bpm', function ($scope, $rootScope, $state, $stateParams, $timeout, $interval, $http, $cookieStore, SweetAlert, Restangular, api_report, api_statistic, moment, api_user_data, api_login, api_bpm) {
3
+    console.info($stateParams);
4
+    $scope.stateParams = {
5
+        startTime: $stateParams.startTime ? moment(+$stateParams.startTime).format('YYYY-MM-DD') : '',
6
+        endTime: $stateParams.endTime ? moment(+$stateParams.endTime).format('YYYY-MM-DD')  : '',
7
+    };
8
+    // 根据路由参数重置
9
+    $scope.paramsReset = function(){
10
+        $scope.searchstate = 'none';
11
+        $scope.starttimesModel = $scope.stateParams.startTime ? $scope.stateParams.startTime : '';
12
+        $scope.endtimesModel = $scope.stateParams.endTime ? $scope.stateParams.endTime : '';
13
+    }
14
+    //日期选择
15
+    $scope.nowtimes = moment().format('YYYY-MM-DD')//当前日期;
16
+    //上周
17
+    $scope.week = function () {
18
+        $scope.searchstate = "week";
19
+        var weeks = new Date().getDay();
20
+        $scope.starttimesModel = moment(new Date().getTime() - 86400000 * (weeks + 6)).format('YYYY-MM-DD');
21
+        $scope.endtimesModel = moment(new Date().getTime() - 86400000 * (weeks)).format('YYYY-MM-DD');
22
+    }
23
+    //上月
24
+    $scope.month = function () {
25
+        $scope.searchstate = "month";
26
+        $scope.starttimesModel = moment().startOf('month').add(-1, 'M').format('YYYY-MM-DD');
27
+        $scope.endtimesModel = moment().endOf('month').add(-1, 'M').format('YYYY-MM-DD');
28
+    }
29
+    //去年
30
+    $scope.year = function () {
31
+        $scope.searchstate = "year";
32
+        $scope.starttimesModel = moment().startOf('year').add(-1, 'y').format('YYYY-MM-DD');
33
+        $scope.endtimesModel = moment().endOf('year').add(-1, 'y').format('YYYY-MM-DD');
34
+    }
35
+    // 今天
36
+    $scope.today = function () {
37
+        $scope.searchstate = "today";
38
+        $scope.starttimesModel = moment().format('YYYY-MM-DD');
39
+        $scope.endtimesModel = moment().format('YYYY-MM-DD');
40
+    }
41
+    //近N日
42
+    $scope.day = function (num) {
43
+        num = num > 1 ? num : 1;
44
+        $scope.searchstate = "none";
45
+        $scope.starttimesModel = moment().subtract(num, "days").format("YYYY-MM-DD");
46
+        $scope.endtimesModel = moment().subtract(1, "days").format("YYYY-MM-DD");
47
+    }
48
+    
49
+    //选择上一周,上个月,去年
50
+    $scope.chooseDate = function (date) {
51
+        switch (date) {
52
+            case 'week':
53
+                $scope.week();
54
+                break;
55
+            case 'month':
56
+                $scope.month();
57
+                break;
58
+            case 'year':
59
+                $scope.year();
60
+                break;
61
+            case 'today':
62
+                $scope.today();
63
+                break;
64
+        }
65
+    };
66
+    /**
67
+     *日历
68
+     */
69
+    //打开开始日期选择框
70
+    $scope.startOpen = function ($event) {
71
+        $event.preventDefault();
72
+        $event.stopPropagation();
73
+        $scope.endOpened = false;
74
+        $scope.startOpened = !$scope.startOpened;
75
+    };
76
+    //打开结束日期选择框
77
+    $scope.endOpen = function ($event) {
78
+        $event.preventDefault();
79
+        $event.stopPropagation();
80
+        $scope.startOpened = false;
81
+        $scope.endOpened = !$scope.endOpened;
82
+    };
83
+    //重置
84
+    $scope.reload = function (isReload) {
85
+        //点击重置时传true,切换tab传false
86
+        if (isReload) {
87
+            $scope.week();
88
+        }
89
+        $scope.searchstate = 'none';
90
+        $scope.sortActive = 'totaltop';
91
+        $scope.name = 'total';//表格排序,字段名称
92
+        $scope.type = 'desc';//表格排序,排序方式desc,asc
93
+        $scope.direction = 'top';//箭头方向 top,bottom
94
+        $scope.mdxquery();
95
+    };
96
+    $scope.isArrays = function (arr) {
97
+        return Array.isArray(arr);
98
+    };
99
+    //综合统计
100
+    $scope.zhtj_list = null;//表格列表
101
+    /**
102
+     *  查询
103
+     */
104
+    $scope.mdxquery = function () {
105
+        $scope.zhtj_list = null;
106
+        // 请求列表
107
+        api_login.onlineCount({
108
+            "type": 'count',
109
+            "startTime": $scope.starttimesModel ? moment($scope.starttimesModel).format('YYYY-MM-DD') + ' 00:00:00' : undefined,
110
+            "endTime": $scope.endtimesModel ? moment($scope.endtimesModel).format('YYYY-MM-DD') + ' 23:59:59' : undefined,
111
+        }).then(function (res) {
112
+            if (res.status == 200) {
113
+                $scope.zhtj_list = res.data || [];//表格列表
114
+            }
115
+        })
116
+    };
117
+    // 详情
118
+    $scope.goToDetail = function(rowData, msg, msgType){
119
+        let startTime = $scope.starttimesModel ? moment($scope.starttimesModel).valueOf() : '';
120
+        let endTime = $scope.endtimesModel ? moment($scope.endtimesModel).valueOf() : '';
121
+        $state.go('app.working.statisticsDetail', {userId: rowData[0], userName: rowData[1], startTime, endTime, msg, msgType });
122
+    }
123
+    //默认
124
+    $stateParams.startTime ? $scope.paramsReset() : $scope.week();
125
+    //初始化
126
+    $scope.mdxquery();
127
+}])

+ 133 - 0
assets/js/controllers/working/workingStatisticsDetailCtrl.js

@@ -0,0 +1,133 @@
1
+'use strict';
2
+app.controller('workingStatisticsDetailCtrl', ["$scope", "$rootScope", "$state", "$stateParams", "$timeout", "$interval", "$http", "$cookieStore", "SweetAlert", "Restangular", "api_report", "api_statistic", "moment", 'api_user_data', 'api_login', 'api_bpm', function ($scope, $rootScope, $state, $stateParams, $timeout, $interval, $http, $cookieStore, SweetAlert, Restangular, api_report, api_statistic, moment, api_user_data, api_login, api_bpm) {
3
+    console.info($stateParams);
4
+    $scope.stateParams = {
5
+        userId: +$stateParams.userId,
6
+        userName: $stateParams.userName,
7
+        startTime: $stateParams.startTime ? moment(+$stateParams.startTime).format('YYYY-MM-DD') : '',
8
+        endTime: $stateParams.endTime ? moment(+$stateParams.endTime).format('YYYY-MM-DD')  : '',
9
+        msg: $stateParams.msg,
10
+        msgType: $stateParams.msgType,
11
+    };
12
+    // 根据路由参数重置
13
+    $scope.paramsReset = function(){
14
+        $scope.searchstate = 'none';
15
+        $scope.starttimesModel = $scope.stateParams.startTime ? $scope.stateParams.startTime : '';
16
+        $scope.endtimesModel = $scope.stateParams.endTime ? $scope.stateParams.endTime : '';
17
+    }
18
+    // 返回上一页
19
+    $scope.goBack = function(){
20
+        let startTime = $scope.starttimesModel ? moment($scope.starttimesModel).valueOf() : '';
21
+        let endTime = $scope.endtimesModel ? moment($scope.endtimesModel).valueOf() : '';
22
+        $state.go('app.working.statistics', {startTime, endTime });
23
+    }
24
+    //日期选择
25
+    $scope.nowtimes = moment().format('YYYY-MM-DD')//当前日期;
26
+    //上周
27
+    $scope.week = function () {
28
+        $scope.searchstate = "week";
29
+        var weeks = new Date().getDay();
30
+        $scope.starttimesModel = moment(new Date().getTime() - 86400000 * (weeks + 6)).format('YYYY-MM-DD');
31
+        $scope.endtimesModel = moment(new Date().getTime() - 86400000 * (weeks)).format('YYYY-MM-DD');
32
+    }
33
+    //上月
34
+    $scope.month = function () {
35
+        $scope.searchstate = "month";
36
+        $scope.starttimesModel = moment().startOf('month').add(-1, 'M').format('YYYY-MM-DD');
37
+        $scope.endtimesModel = moment().endOf('month').add(-1, 'M').format('YYYY-MM-DD');
38
+    }
39
+    //去年
40
+    $scope.year = function () {
41
+        $scope.searchstate = "year";
42
+        $scope.starttimesModel = moment().startOf('year').add(-1, 'y').format('YYYY-MM-DD');
43
+        $scope.endtimesModel = moment().endOf('year').add(-1, 'y').format('YYYY-MM-DD');
44
+    }
45
+    // 今天
46
+    $scope.today = function () {
47
+        $scope.searchstate = "today";
48
+        $scope.starttimesModel = moment().format('YYYY-MM-DD');
49
+        $scope.endtimesModel = moment().format('YYYY-MM-DD');
50
+    }
51
+    //近N日
52
+    $scope.day = function (num) {
53
+        num = num > 1 ? num : 1;
54
+        $scope.searchstate = "none";
55
+        $scope.starttimesModel = moment().subtract(num, "days").format("YYYY-MM-DD");
56
+        $scope.endtimesModel = moment().subtract(1, "days").format("YYYY-MM-DD");
57
+    }
58
+    
59
+    //选择上一周,上个月,去年
60
+    $scope.chooseDate = function (date) {
61
+        switch (date) {
62
+            case 'week':
63
+                $scope.week();
64
+                break;
65
+            case 'month':
66
+                $scope.month();
67
+                break;
68
+            case 'year':
69
+                $scope.year();
70
+                break;
71
+            case 'today':
72
+                $scope.today();
73
+                break;
74
+        }
75
+    };
76
+    /**
77
+     *日历
78
+     */
79
+    //打开开始日期选择框
80
+    $scope.startOpen = function ($event) {
81
+        $event.preventDefault();
82
+        $event.stopPropagation();
83
+        $scope.endOpened = false;
84
+        $scope.startOpened = !$scope.startOpened;
85
+    };
86
+    //打开结束日期选择框
87
+    $scope.endOpen = function ($event) {
88
+        $event.preventDefault();
89
+        $event.stopPropagation();
90
+        $scope.startOpened = false;
91
+        $scope.endOpened = !$scope.endOpened;
92
+    };
93
+    //重置
94
+    $scope.reload = function (isReload) {
95
+        //点击重置时传true,切换tab传false
96
+        if (isReload) {
97
+            $scope.paramsReset();
98
+        }
99
+        $scope.searchstate = 'none';
100
+        $scope.sortActive = 'totaltop';
101
+        $scope.name = 'total';//表格排序,字段名称
102
+        $scope.type = 'desc';//表格排序,排序方式desc,asc
103
+        $scope.direction = 'top';//箭头方向 top,bottom
104
+        $scope.mdxquery();
105
+    };
106
+    $scope.isArrays = function (arr) {
107
+        return Array.isArray(arr);
108
+    };
109
+    //综合统计
110
+    $scope.zhtj_list = null;//表格列表
111
+    /**
112
+     *  查询
113
+     */
114
+    $scope.mdxquery = function () {
115
+        $scope.zhtj_list = null;
116
+        // 请求列表
117
+        api_login.onlineCount({
118
+            "type": 'info',
119
+            "userId": $scope.stateParams.userId,
120
+            "infoType": $scope.stateParams.msgType,
121
+            "startTime": $scope.starttimesModel ? moment($scope.starttimesModel).format('YYYY-MM-DD') + ' 00:00:00' : undefined,
122
+            "endTime": $scope.endtimesModel ? moment($scope.endtimesModel).format('YYYY-MM-DD') + ' 23:59:59' : undefined,
123
+        }).then(function (res) {
124
+            if (res.status == 200) {
125
+                $scope.zhtj_list = res.data || [];//表格列表
126
+            }
127
+        })
128
+    };
129
+    //默认
130
+    $scope.paramsReset();
131
+    //初始化
132
+    $scope.mdxquery();
133
+}])

+ 3 - 0
assets/js/main.js

@@ -512,6 +512,9 @@ app.factory('api_report_data', ['UserRestangular', function (UserRestangular) {
512 512
 app.factory('api_login', ['UserRestangular', function (UserRestangular) {
513 513
     var loginService = UserRestangular.all("auth");
514 514
     return {
515
+        onlineCount: function (data) {
516
+            return loginService.customPOST(data, 'onlineCount', {});
517
+        },
515 518
         getProjectName: function () {
516 519
             return loginService.customGET('getSysName');
517 520
         },

+ 548 - 0
assets/views/working/statistics.html

@@ -0,0 +1,548 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">上下班统计
5
+                <i tooltip='上下班统计,查看相关数据。' tooltip-placement="right"
6
+                    class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i>
7
+            </h1>
8
+        </div>
9
+    </div>
10
+</section>
11
+<div class="col-md-12 col-sm-12">
12
+    <div class="row deck_body" ng-controller="workingStatisticsCtrl">
13
+        <div class="service_head">
14
+            <div class="deck_head_L ac">
15
+                <span>上下班统计</span>
16
+            </div>
17
+        </div>
18
+        <div class="deck_cont">
19
+            <!-- 筛选条件 -->
20
+            <div class="deck_cont_head">
21
+                <form class="col-xs-12 col-sm-12 form-inline P-0 clearfix">
22
+                    <!-- 选择日期 -->
23
+                    <div class="selectDate P-0 fl">
24
+                        <div class="selectDate-hd clearfix">
25
+                            <p class="fl">选择日期:</p>
26
+                            <div class="lastDate fr"><span ng-class="{active:searchstate=='week'}"
27
+                                    ng-click="chooseDate('week')">上一周</span>|<span
28
+                                    ng-class="{active:searchstate=='month'}"
29
+                                    ng-click="chooseDate('month')">上一月</span>
30
+                                    <!-- |<span
31
+                                    ng-class="{active:searchstate=='year'}"
32
+                                    ng-click="chooseDate('year')">上一年</span>|<span
33
+                                    ng-class="{active:searchstate=='today'}" ng-click="chooseDate('today')">今天</span> -->
34
+                            </div>
35
+                        </div>
36
+                        <div class="clearfix">
37
+                            <div class="form-group fl">
38
+                                <input placeholder="开始日期" type="text" ng-readonly="true" class="form-control smallline"
39
+                                    datepicker-popuptime="yyyy-MM-dd" ng-model="starttimesModel" max-date="endtimesModel"
40
+                                    is-open="startOpened" ng-init="startOpened = false" ng-click="startOpen($event)" />
41
+                                <i class="iconfont icon-yuqixinxiu form-dataIcon"></i>
42
+                            </div>
43
+                            <span class="form-line fl">一</span>
44
+                            <div class="form-group fl">
45
+                                <input placeholder="结束日期" type="text" ng-readonly="true" class="form-control smallline"
46
+                                    datepicker-popuptime="yyyy-MM-dd" ng-model="endtimesModel" min-date="starttimesModel"
47
+                                    max-date="nowtimes" is-open="endOpened" ng-init="endOpened = false"
48
+                                    ng-click="endOpen($event)" />
49
+                                <i class="iconfont icon-yuqixinxiu form-dataIcon"></i>
50
+                            </div>
51
+                        </div>
52
+                    </div>
53
+                    <!-- 搜索重置 -->
54
+                    <div class="col-xs-3 col-sm-3 pull-right P-0 searchBtnBox">
55
+                        <div class="btn btn_search fl" ng-click="mdxquery(name, type)">搜索</div>
56
+                        <div class="btn btn_reset fl" ng-click="reload(true)">重置</div>
57
+                    </div>
58
+                </form>
59
+            </div>
60
+            <!-- 上下班统计 -->
61
+            <div class="deck_cont_body">
62
+                <div class="deck_cont_body_TB1" ng-if="isArrays(zhtj_list)&&zhtj_list.length>0">
63
+                    <div class="TB">
64
+                        <div class="TB_cont">
65
+                            <table class="jry_table jry_table_head" cellspacing="0" cellpadding="16"
66
+                                style="font-weight:normal !important;table-layout:fixed">
67
+                                <thead>
68
+                                    <tr>
69
+                                        <th style="width:5%">
70
+                                            序号
71
+                                        </th>
72
+                                        <th style="width:19%" tooltip='姓名' tooltip-placement="top">
73
+                                            姓名
74
+                                        </th>
75
+                                        <th style="width:19%" tooltip='显示当前人员时间范围内所有日期的打卡记录' tooltip-placement="top">
76
+                                            打卡天数
77
+                                        </th>
78
+                                        <th style="width:19%" tooltip='显示当前人员时间范围内所有日期的打卡记录并且迟到的记录' tooltip-placement="top">
79
+                                            迟到次数
80
+                                        </th>
81
+                                        <th style="width:19%" tooltip='显示当前人员时间范围内所有日期的打卡记录并且早退的记录' tooltip-placement="top">
82
+                                            早退次数
83
+                                        </th>
84
+                                        <th style="width:19%" tooltip='显示当前人员时间范围内所有日期的打卡记录并且未打下班卡的记录' tooltip-placement="top">
85
+                                            未打卡下班次数
86
+                                        </th>
87
+                                    </tr>
88
+                                </thead>
89
+                            </table>
90
+                            <div class="jry_table_wrap" ng-nicescroll>
91
+                                <table class="jry_table jry_table_body" cellspacing="0" cellpadding="16"
92
+                                    style="font-weight:normal !important;margin-bottom: 16px;table-layout:fixed">
93
+                                    <tbody class="tbody-hover service_form-hover">
94
+                                        <tr ng-repeat="rowData in zhtj_list">
95
+                                            <td style="width:5%">
96
+                                                {{$index+1}}
97
+                                            </td>
98
+                                            <td style="width:19%">
99
+                                                {{rowData[1]}}
100
+                                            </td>
101
+                                            <td class="cursor" style="width:19%" ng-click="goToDetail(rowData, '打卡天数', 'punch')">
102
+                                                {{rowData[2]}}
103
+                                            </td>
104
+                                            <td class="cursor" style="width:19%" ng-click="goToDetail(rowData, '迟到次数', 'late')">
105
+                                                {{rowData[3]}}
106
+                                            </td>
107
+                                            <td class="cursor" style="width:19%" ng-click="goToDetail(rowData, '早退次数', 'early')">
108
+                                                {{rowData[4]}}
109
+                                            </td>
110
+                                            <td class="cursor" style="width:19%" ng-click="goToDetail(rowData, '未打卡下班次数', 'workEarly')">
111
+                                                {{rowData[5]}}
112
+                                            </td>
113
+                                        </tr>
114
+                                    </tbody>
115
+                                </table>
116
+                            </div>
117
+                        </div>
118
+                    </div>
119
+
120
+                </div>
121
+                <div class="noData" ng-if="isArrays(zhtj_list)&&zhtj_list.length==0">查询无记录</div>
122
+                <div class="noData" ng-if="!isArrays(zhtj_list)"><img src="/assets/images/loading.gif" alt=""></div>
123
+            </div>
124
+        </div>
125
+    </div>
126
+</div>
127
+</div>
128
+<style>
129
+    p {
130
+        margin-bottom: 0;
131
+    }
132
+
133
+    em,
134
+    i,
135
+    strong {
136
+        font-style: normal;
137
+    }
138
+
139
+    .searchBtnBox {
140
+        padding-top: 30px;
141
+    }
142
+
143
+    .deck_body {
144
+        height: 100%;
145
+        background: #f9f9f9;
146
+        padding: 16px;
147
+    }
148
+
149
+    .service_head {
150
+        height: 50px;
151
+        width: 100%
152
+    }
153
+
154
+    .service_head .deck_head_L {
155
+        float: left;
156
+        width: 100%;
157
+        height: 100%;
158
+        text-align: center;
159
+        border-top: 5px solid #EAEAEA;
160
+        color: #717171;
161
+        font-size: 14px;
162
+        line-height: 45px;
163
+        cursor: pointer;
164
+    }
165
+
166
+    .service_head .deck_head_R {
167
+        float: left;
168
+        width: 50%;
169
+        height: 100%;
170
+        text-align: center;
171
+        border-top: 5px solid #EAEAEA;
172
+        color: #717171;
173
+        font-size: 14px;
174
+        line-height: 45px;
175
+        cursor: pointer;
176
+    }
177
+
178
+    .ac {
179
+        background: #E6EEF4;
180
+        color: #353535 !important;
181
+        border-top: 5px solid #79A3C4 !important;
182
+    }
183
+
184
+    .deck_cont {
185
+        width: 100%;
186
+        height: 100%;
187
+        padding: 16px;
188
+        background: #fff;
189
+        border-width: 0px 1px 1px 1px;
190
+        border-width: 0px 1px 1px 1px;
191
+        border-color: #EAEAEA;
192
+        border-style: solid;
193
+    }
194
+
195
+    .deck_cont_head {
196
+        border-bottom: 1px solid #EAEAEA;
197
+        padding: 16px 10px 16px 10px;
198
+        zoom: 1;
199
+    }
200
+
201
+    .deck_cont_head::after {
202
+        content: "";
203
+        display: block;
204
+        height: 0;
205
+        clear: both;
206
+        visibility: hidden;
207
+    }
208
+
209
+    .P-0 {
210
+        padding-left: 0px;
211
+        padding-right: 0px;
212
+    }
213
+
214
+    .P-T-15 {
215
+        padding-top: 16px;
216
+    }
217
+
218
+    .form-control.smallline {
219
+        width: 120px;
220
+        height: 34px;
221
+        padding-left: 8px;
222
+        padding-right: 8px;
223
+        color: #999;
224
+        font-size: 12px;
225
+    }
226
+
227
+    .deck_cont_body_TB1 {
228
+        padding-top: 16px;
229
+    }
230
+
231
+    .deck_cont_body_TB2 {
232
+        padding-top: 16px;
233
+    }
234
+
235
+    .TB_head {
236
+        width: 100%;
237
+        height: 54px
238
+    }
239
+
240
+    .TB_head_L {
241
+        float: left;
242
+        height: 100%;
243
+        border-left: 8px solid #005395;
244
+        padding: 0px 16px;
245
+    }
246
+
247
+    .TB_head_R {
248
+        float: left;
249
+        height: 100%;
250
+        border-left: 8px solid #49A9EE;
251
+        padding: 0px 16px;
252
+    }
253
+
254
+    .TB_ITEM {
255
+        float: left;
256
+        margin-right: 16px;
257
+        text-align: center;
258
+    }
259
+
260
+    .MR_15 {
261
+        margin-right: 16px;
262
+    }
263
+
264
+    .TB_ITEM p {
265
+        font-size: 12px;
266
+        color: #666
267
+    }
268
+
269
+    .TB_ITEM span {
270
+        font-size: 24px;
271
+        color: #333;
272
+        line-height: 1.2;
273
+    }
274
+
275
+    .TB_LDZH{
276
+        text-align: center;
277
+    }
278
+
279
+    .TB_LDZH p {
280
+        font-size: 14px;
281
+        color: #666
282
+    }
283
+
284
+    .TB_LDZH span {
285
+        font-size: 32px;
286
+        color: #333;
287
+        line-height: 1.2;
288
+    }
289
+
290
+    .TB_ZHL {
291
+        height: 100%;
292
+        padding-top: 22px;
293
+    }
294
+
295
+    .TB_ZHL p {
296
+        font-size: 12px;
297
+        color: #7B7B7B
298
+    }
299
+
300
+    .TB_ZHL span {
301
+        font-weight: 600;
302
+        font-size: 22px;
303
+    }
304
+
305
+    .TB_cont {
306
+        height: 350px;
307
+        width: 100%;
308
+        /* overflow-x: hidden; */
309
+        /* overflow-y: auto; */
310
+    }
311
+
312
+    .TB_cont #ldzh {
313
+        height: 100%;
314
+    }
315
+
316
+    .TB_cont #sjfx {
317
+        height: 100%;
318
+    }
319
+
320
+    .TB_cont #sjqs {
321
+        height: 100%;
322
+    }
323
+
324
+    .TB_cont #sjpd {
325
+        height: 100%;
326
+    }
327
+
328
+    .TB_head_R1 {
329
+        border-color: #005395;
330
+    }
331
+
332
+    .TB_LB {
333
+        height: 100%;
334
+        width: 100%;
335
+        border: 1px solid #EAEAEA;
336
+    }
337
+
338
+    .TB_LB_head {
339
+        height: 50px;
340
+        background: #FAFAFA;
341
+        border-bottom: 1px solid #EAEAEA;
342
+        color: #333;
343
+        font-size: 14px;
344
+    }
345
+
346
+    .TB_LB_body {
347
+        height: 40px;
348
+        border-bottom: 1px solid #EAEAEA;
349
+        color: #7B7B7B;
350
+    }
351
+
352
+    .TB_LB_item {
353
+        height: 100%;
354
+        float: left;
355
+        text-align: center;
356
+        line-height: 40px;
357
+        border-right: 1px solid #EAEAEA;
358
+    }
359
+
360
+    .TB_LB_head .TB_LB_item {
361
+        line-height: 50px;
362
+        font-weight: 600;
363
+    }
364
+
365
+    .btn-default {
366
+        height: 30px;
367
+    }
368
+
369
+    .form-line {
370
+        height: 34px;
371
+        line-height: 34px;
372
+        padding-left: 8px;
373
+        padding-right: 8px;
374
+        color: #979797;
375
+    }
376
+
377
+    .form-dataIcon {
378
+        color: #ddd;
379
+        font-size: 16px;
380
+        position: absolute;
381
+        right: 8px;
382
+        top: 50%;
383
+        transform: translateY(-50%);
384
+    }
385
+
386
+    .selectDate {
387
+        width: 270px;
388
+    }
389
+
390
+    .selectDate .selectDate-hd {
391
+        margin-bottom: 8px;
392
+    }
393
+
394
+    .selectDate .lastDate {
395
+        color: #ddd;
396
+    }
397
+
398
+    .selectDate .lastDate span {
399
+        margin-left: 4px;
400
+        margin-right: 4px;
401
+        color: #005395;
402
+        font-size: 12px;
403
+        cursor: pointer;
404
+    }
405
+
406
+    .selectDate .lastDate span.active {
407
+        border-bottom: 1px solid #005395;
408
+    }
409
+
410
+    .selectDate .lastDate span:last-child {
411
+        margin-right: 0;
412
+    }
413
+
414
+    .searchBtnBox .btn {
415
+        width: 60px;
416
+        height: 34px;
417
+        line-height: 26px;
418
+        margin: 0 0 0 8px;
419
+    }
420
+
421
+    .btn_search {
422
+        background-color: #005395;
423
+    }
424
+
425
+    .btn_reset {
426
+        background-color: #fff;
427
+        border: 1px solid #ddd;
428
+    }
429
+
430
+    .btn_reset:hover {
431
+        border: 1px solid #999;
432
+        color: #666;
433
+    }
434
+
435
+    .btn_export {
436
+        padding: 3px 16px;
437
+        background-color: #e6eef4;
438
+        border: 1px #005395 solid;
439
+        color: #005395;
440
+    }
441
+
442
+    .btn_export:hover {
443
+        color: #79a3c4;
444
+        border-color: #79a3c4;
445
+    }
446
+
447
+    .TB_ITEMS {
448
+        margin-left: 24px;
449
+        margin-top: 10px;
450
+    }
451
+
452
+    /* table */
453
+    .jry_table_wrap {
454
+        margin-top: -1px;
455
+        height: 310px;
456
+        overflow-x: hidden;
457
+        overflow-y: auto;
458
+    }
459
+
460
+    .jry_table {
461
+        border: 1px solid #ddd;
462
+        text-align: center;
463
+        width: 100%;
464
+        position: relative;
465
+    }
466
+
467
+    .jry_table_head {
468
+        margin-top: 16px;
469
+        background-color: #f9f9f9;
470
+    }
471
+
472
+    .jry_table_head th {
473
+        cursor: pointer;
474
+    }
475
+
476
+    .jry_table_body .tbody-hover {
477
+        width: 100%;
478
+    }
479
+
480
+    .jry_table_body .tbody-hover.service_form-hover td.cursor {
481
+        cursor: pointer;
482
+    }
483
+
484
+    .jry_table_body .tbody-hover.service_form-hover td.cursor:hover {
485
+        text-decoration: underline;
486
+    }
487
+
488
+    .jry_table th,
489
+    .jry_table td {
490
+        word-wrap: break-word;
491
+        padding: 6px 8px;
492
+        border: 1px solid #ddd;
493
+    }
494
+
495
+    .jry_table th {
496
+        text-align: center;
497
+        font-size: 13px;
498
+    }
499
+
500
+    .jry_table th strong {
501
+        position: relative;
502
+    }
503
+
504
+    .sort-wrap {
505
+        position: absolute;
506
+        right: -12px;
507
+        top: 50%;
508
+        transform: translateY(-50%);
509
+        width: 12px;
510
+        display: flex;
511
+        flex-direction: column;
512
+        justify-content: center;
513
+        line-height: normal;
514
+    }
515
+
516
+    .sortItem {
517
+        font-size: 12px;
518
+        color: #ddd;
519
+        height: 12px;
520
+        cursor: pointer;
521
+        position: absolute;
522
+    }
523
+
524
+    .sortItem.active {
525
+        color: #999;
526
+    }
527
+
528
+    .sortItem.icon-xiangshang {
529
+        bottom: -2px;
530
+    }
531
+
532
+    .sortItem.icon-xiangxia {
533
+        top: -2px;
534
+    }
535
+    /* 查询无记录 */
536
+    .noData{
537
+        font-size: 16px;
538
+        text-align: center;
539
+        font-weight: bold;
540
+        margin-top: 16px;
541
+        width: 100%;
542
+        min-height: 420px;
543
+    }
544
+
545
+    .form-control.smallline {
546
+        background-color: #fff;
547
+    }
548
+</style>

+ 573 - 0
assets/views/working/statisticsDetail.html

@@ -0,0 +1,573 @@
1
+<section id="page-title">
2
+    <div class="row">
3
+        <div class="col-sm-8">
4
+            <h1 class="mainTitle">上下班统计
5
+                <i tooltip='上下班统计,查看相关数据。' tooltip-placement="right"
6
+                    class="fa  ti-help-alt margin-left-10 fontcolor-five pointfont"></i>
7
+            </h1>
8
+        </div>
9
+    </div>
10
+</section>
11
+<div class="col-md-12 col-sm-12">
12
+    <div class="row deck_body" ng-controller="workingStatisticsDetailCtrl">
13
+        <div class="service_head">
14
+            <div class="deck_head_L ac">
15
+                <span>{{stateParams.userName}}-{{stateParams.msg}}</span>
16
+            </div>
17
+        </div>
18
+        <div class="deck_cont">
19
+            <!-- 筛选条件 -->
20
+            <div class="deck_cont_head">
21
+                <form class="col-xs-12 col-sm-12 form-inline P-0 clearfix">
22
+                    <!-- 选择日期 -->
23
+                    <div class="selectDate P-0 fl">
24
+                        <div class="selectDate-hd clearfix">
25
+                            <p class="fl">选择日期:</p>
26
+                            <div class="lastDate fr"><span ng-class="{active:searchstate=='week'}"
27
+                                    ng-click="chooseDate('week')">上一周</span>|<span
28
+                                    ng-class="{active:searchstate=='month'}"
29
+                                    ng-click="chooseDate('month')">上一月</span>
30
+                                    <!-- |<span
31
+                                    ng-class="{active:searchstate=='year'}"
32
+                                    ng-click="chooseDate('year')">上一年</span>|<span
33
+                                    ng-class="{active:searchstate=='today'}" ng-click="chooseDate('today')">今天</span> -->
34
+                            </div>
35
+                        </div>
36
+                        <div class="clearfix">
37
+                            <div class="form-group fl">
38
+                                <input placeholder="开始日期" type="text" ng-readonly="true" class="form-control smallline"
39
+                                    datepicker-popuptime="yyyy-MM-dd" ng-model="starttimesModel" max-date="endtimesModel"
40
+                                    is-open="startOpened" ng-init="startOpened = false" ng-click="startOpen($event)" />
41
+                                <i class="iconfont icon-yuqixinxiu form-dataIcon"></i>
42
+                            </div>
43
+                            <span class="form-line fl">一</span>
44
+                            <div class="form-group fl">
45
+                                <input placeholder="结束日期" type="text" ng-readonly="true" class="form-control smallline"
46
+                                    datepicker-popuptime="yyyy-MM-dd" ng-model="endtimesModel" min-date="starttimesModel"
47
+                                    max-date="nowtimes" is-open="endOpened" ng-init="endOpened = false"
48
+                                    ng-click="endOpen($event)" />
49
+                                <i class="iconfont icon-yuqixinxiu form-dataIcon"></i>
50
+                            </div>
51
+                        </div>
52
+                    </div>
53
+                    <!-- 搜索重置 -->
54
+                    <div class="col-xs-3 col-sm-3 pull-right P-0 searchBtnBox">
55
+                        <div class="btn btn_search fl" ng-click="mdxquery(name, type)">搜索</div>
56
+                        <div class="btn btn_reset fl" ng-click="reload(true)">重置</div>
57
+                        <div class="btn btn_reset fl" ng-click="goBack()">返回</div>
58
+                    </div>
59
+                </form>
60
+            </div>
61
+            <!-- 上下班统计 -->
62
+            <div class="deck_cont_body">
63
+                <div class="deck_cont_body_TB1" ng-if="isArrays(zhtj_list)&&zhtj_list.length>0">
64
+                    <div class="TB">
65
+                        <div class="TB_cont">
66
+                            <table class="jry_table jry_table_head" cellspacing="0" cellpadding="16"
67
+                                style="font-weight:normal !important;table-layout:fixed">
68
+                                <thead>
69
+                                    <tr>
70
+                                        <th style="width:10%">
71
+                                            序号
72
+                                        </th>
73
+                                        <th style="width:10%" tooltip='日期' tooltip-placement="top">
74
+                                            日期
75
+                                        </th>
76
+                                        <th style="width:10%" tooltip='姓名' tooltip-placement="top">
77
+                                            姓名
78
+                                        </th>
79
+                                        <th style="width:10%" tooltip='公司' tooltip-placement="top">
80
+                                            公司
81
+                                        </th>
82
+                                        <th style="width:10%" tooltip='上班打卡时间' tooltip-placement="top">
83
+                                            上班打卡时间
84
+                                        </th>
85
+                                        <th style="width:10%" tooltip='上班打卡地址' tooltip-placement="top">
86
+                                            上班打卡地址
87
+                                        </th>
88
+                                        <th style="width:10%" tooltip='是否迟到' tooltip-placement="top">
89
+                                            是否迟到
90
+                                        </th>
91
+                                        <th style="width:10%" tooltip='下班打卡时间' tooltip-placement="top">
92
+                                            下班打卡时间
93
+                                        </th>
94
+                                        <th style="width:10%" tooltip='下班打卡地址' tooltip-placement="top">
95
+                                            下班打卡地址
96
+                                        </th>
97
+                                        <th style="width:10%" tooltip='是否早退' tooltip-placement="top">
98
+                                            是否早退
99
+                                        </th>
100
+                                    </tr>
101
+                                </thead>
102
+                            </table>
103
+                            <div class="jry_table_wrap" ng-nicescroll>
104
+                                <table class="jry_table jry_table_body" cellspacing="0" cellpadding="16"
105
+                                    style="font-weight:normal !important;margin-bottom: 16px;table-layout:fixed">
106
+                                    <tbody class="tbody-hover service_form-hover">
107
+                                        <tr ng-repeat="rowData in zhtj_list">
108
+                                            <td style="width:10%">
109
+                                                {{$index+1}}
110
+                                            </td>
111
+                                            <td style="width:10%">
112
+                                                {{rowData[0] | date:"yyyy-MM-dd HH:mm:ss"}}
113
+                                            </td>
114
+                                            <td style="width:10%">
115
+                                                {{rowData[1]}}
116
+                                            </td>
117
+                                            <td style="width:10%">
118
+                                                {{rowData[2]}}
119
+                                            </td>
120
+                                            <td style="width:10%">
121
+                                                {{rowData[3] | date:"yyyy-MM-dd HH:mm:ss"}}
122
+                                            </td>
123
+                                            <td style="width:10%">
124
+                                                {{rowData[4]}}
125
+                                            </td>
126
+                                            <td style="width:10%">
127
+                                                {{rowData[5] == 1 ? '是' : '否'}}
128
+                                            </td>
129
+                                            <td style="width:10%">
130
+                                                {{rowData[6] | date:"yyyy-MM-dd HH:mm:ss"}}
131
+                                            </td>
132
+                                            <td style="width:10%">
133
+                                                {{rowData[7]}}
134
+                                            </td>
135
+                                            <td style="width:10%">
136
+                                                {{rowData[8] == 1 ? '是' : '否'}}
137
+                                            </td>
138
+                                        </tr>
139
+                                    </tbody>
140
+                                </table>
141
+                            </div>
142
+                        </div>
143
+                    </div>
144
+
145
+                </div>
146
+                <div class="noData" ng-if="isArrays(zhtj_list)&&zhtj_list.length==0">查询无记录</div>
147
+                <div class="noData" ng-if="!isArrays(zhtj_list)"><img src="/assets/images/loading.gif" alt=""></div>
148
+            </div>
149
+        </div>
150
+    </div>
151
+</div>
152
+</div>
153
+<style>
154
+    p {
155
+        margin-bottom: 0;
156
+    }
157
+
158
+    em,
159
+    i,
160
+    strong {
161
+        font-style: normal;
162
+    }
163
+
164
+    .searchBtnBox {
165
+        padding-top: 30px;
166
+    }
167
+
168
+    .deck_body {
169
+        height: 100%;
170
+        background: #f9f9f9;
171
+        padding: 16px;
172
+    }
173
+
174
+    .service_head {
175
+        height: 50px;
176
+        width: 100%
177
+    }
178
+
179
+    .service_head .deck_head_L {
180
+        float: left;
181
+        width: 100%;
182
+        height: 100%;
183
+        text-align: center;
184
+        border-top: 5px solid #EAEAEA;
185
+        color: #717171;
186
+        font-size: 14px;
187
+        line-height: 45px;
188
+        cursor: pointer;
189
+    }
190
+
191
+    .service_head .deck_head_R {
192
+        float: left;
193
+        width: 50%;
194
+        height: 100%;
195
+        text-align: center;
196
+        border-top: 5px solid #EAEAEA;
197
+        color: #717171;
198
+        font-size: 14px;
199
+        line-height: 45px;
200
+        cursor: pointer;
201
+    }
202
+
203
+    .ac {
204
+        background: #E6EEF4;
205
+        color: #353535 !important;
206
+        border-top: 5px solid #79A3C4 !important;
207
+    }
208
+
209
+    .deck_cont {
210
+        width: 100%;
211
+        height: 100%;
212
+        padding: 16px;
213
+        background: #fff;
214
+        border-width: 0px 1px 1px 1px;
215
+        border-width: 0px 1px 1px 1px;
216
+        border-color: #EAEAEA;
217
+        border-style: solid;
218
+    }
219
+
220
+    .deck_cont_head {
221
+        border-bottom: 1px solid #EAEAEA;
222
+        padding: 16px 10px 16px 10px;
223
+        zoom: 1;
224
+    }
225
+
226
+    .deck_cont_head::after {
227
+        content: "";
228
+        display: block;
229
+        height: 0;
230
+        clear: both;
231
+        visibility: hidden;
232
+    }
233
+
234
+    .P-0 {
235
+        padding-left: 0px;
236
+        padding-right: 0px;
237
+    }
238
+
239
+    .P-T-15 {
240
+        padding-top: 16px;
241
+    }
242
+
243
+    .form-control.smallline {
244
+        width: 120px;
245
+        height: 34px;
246
+        padding-left: 8px;
247
+        padding-right: 8px;
248
+        color: #999;
249
+        font-size: 12px;
250
+    }
251
+
252
+    .deck_cont_body_TB1 {
253
+        padding-top: 16px;
254
+    }
255
+
256
+    .deck_cont_body_TB2 {
257
+        padding-top: 16px;
258
+    }
259
+
260
+    .TB_head {
261
+        width: 100%;
262
+        height: 54px
263
+    }
264
+
265
+    .TB_head_L {
266
+        float: left;
267
+        height: 100%;
268
+        border-left: 8px solid #005395;
269
+        padding: 0px 16px;
270
+    }
271
+
272
+    .TB_head_R {
273
+        float: left;
274
+        height: 100%;
275
+        border-left: 8px solid #49A9EE;
276
+        padding: 0px 16px;
277
+    }
278
+
279
+    .TB_ITEM {
280
+        float: left;
281
+        margin-right: 16px;
282
+        text-align: center;
283
+    }
284
+
285
+    .MR_15 {
286
+        margin-right: 16px;
287
+    }
288
+
289
+    .TB_ITEM p {
290
+        font-size: 12px;
291
+        color: #666
292
+    }
293
+
294
+    .TB_ITEM span {
295
+        font-size: 24px;
296
+        color: #333;
297
+        line-height: 1.2;
298
+    }
299
+
300
+    .TB_LDZH{
301
+        text-align: center;
302
+    }
303
+
304
+    .TB_LDZH p {
305
+        font-size: 14px;
306
+        color: #666
307
+    }
308
+
309
+    .TB_LDZH span {
310
+        font-size: 32px;
311
+        color: #333;
312
+        line-height: 1.2;
313
+    }
314
+
315
+    .TB_ZHL {
316
+        height: 100%;
317
+        padding-top: 22px;
318
+    }
319
+
320
+    .TB_ZHL p {
321
+        font-size: 12px;
322
+        color: #7B7B7B
323
+    }
324
+
325
+    .TB_ZHL span {
326
+        font-weight: 600;
327
+        font-size: 22px;
328
+    }
329
+
330
+    .TB_cont {
331
+        height: 350px;
332
+        width: 100%;
333
+        /* overflow-x: hidden; */
334
+        /* overflow-y: auto; */
335
+    }
336
+
337
+    .TB_cont #ldzh {
338
+        height: 100%;
339
+    }
340
+
341
+    .TB_cont #sjfx {
342
+        height: 100%;
343
+    }
344
+
345
+    .TB_cont #sjqs {
346
+        height: 100%;
347
+    }
348
+
349
+    .TB_cont #sjpd {
350
+        height: 100%;
351
+    }
352
+
353
+    .TB_head_R1 {
354
+        border-color: #005395;
355
+    }
356
+
357
+    .TB_LB {
358
+        height: 100%;
359
+        width: 100%;
360
+        border: 1px solid #EAEAEA;
361
+    }
362
+
363
+    .TB_LB_head {
364
+        height: 50px;
365
+        background: #FAFAFA;
366
+        border-bottom: 1px solid #EAEAEA;
367
+        color: #333;
368
+        font-size: 14px;
369
+    }
370
+
371
+    .TB_LB_body {
372
+        height: 40px;
373
+        border-bottom: 1px solid #EAEAEA;
374
+        color: #7B7B7B;
375
+    }
376
+
377
+    .TB_LB_item {
378
+        height: 100%;
379
+        float: left;
380
+        text-align: center;
381
+        line-height: 40px;
382
+        border-right: 1px solid #EAEAEA;
383
+    }
384
+
385
+    .TB_LB_head .TB_LB_item {
386
+        line-height: 50px;
387
+        font-weight: 600;
388
+    }
389
+
390
+    .btn-default {
391
+        height: 30px;
392
+    }
393
+
394
+    .form-line {
395
+        height: 34px;
396
+        line-height: 34px;
397
+        padding-left: 8px;
398
+        padding-right: 8px;
399
+        color: #979797;
400
+    }
401
+
402
+    .form-dataIcon {
403
+        color: #ddd;
404
+        font-size: 16px;
405
+        position: absolute;
406
+        right: 8px;
407
+        top: 50%;
408
+        transform: translateY(-50%);
409
+    }
410
+
411
+    .selectDate {
412
+        width: 270px;
413
+    }
414
+
415
+    .selectDate .selectDate-hd {
416
+        margin-bottom: 8px;
417
+    }
418
+
419
+    .selectDate .lastDate {
420
+        color: #ddd;
421
+    }
422
+
423
+    .selectDate .lastDate span {
424
+        margin-left: 4px;
425
+        margin-right: 4px;
426
+        color: #005395;
427
+        font-size: 12px;
428
+        cursor: pointer;
429
+    }
430
+
431
+    .selectDate .lastDate span.active {
432
+        border-bottom: 1px solid #005395;
433
+    }
434
+
435
+    .selectDate .lastDate span:last-child {
436
+        margin-right: 0;
437
+    }
438
+
439
+    .searchBtnBox .btn {
440
+        width: 60px;
441
+        height: 34px;
442
+        line-height: 26px;
443
+        margin: 0 0 0 8px;
444
+    }
445
+
446
+    .btn_search {
447
+        background-color: #005395;
448
+    }
449
+
450
+    .btn_reset {
451
+        background-color: #fff;
452
+        border: 1px solid #ddd;
453
+    }
454
+
455
+    .btn_reset:hover {
456
+        border: 1px solid #999;
457
+        color: #666;
458
+    }
459
+
460
+    .btn_export {
461
+        padding: 3px 16px;
462
+        background-color: #e6eef4;
463
+        border: 1px #005395 solid;
464
+        color: #005395;
465
+    }
466
+
467
+    .btn_export:hover {
468
+        color: #79a3c4;
469
+        border-color: #79a3c4;
470
+    }
471
+
472
+    .TB_ITEMS {
473
+        margin-left: 24px;
474
+        margin-top: 10px;
475
+    }
476
+
477
+    /* table */
478
+    .jry_table_wrap {
479
+        margin-top: -1px;
480
+        height: 310px;
481
+        overflow-x: hidden;
482
+        overflow-y: auto;
483
+    }
484
+
485
+    .jry_table {
486
+        border: 1px solid #ddd;
487
+        text-align: center;
488
+        width: 100%;
489
+        position: relative;
490
+    }
491
+
492
+    .jry_table_head {
493
+        margin-top: 16px;
494
+        background-color: #f9f9f9;
495
+    }
496
+
497
+    .jry_table_head th {
498
+        cursor: pointer;
499
+    }
500
+
501
+    .jry_table_body .tbody-hover {
502
+        width: 100%;
503
+    }
504
+
505
+    .jry_table_body .tbody-hover.service_form-hover td.cursor {
506
+        cursor: pointer;
507
+    }
508
+
509
+    .jry_table_body .tbody-hover.service_form-hover td.cursor:hover {
510
+        text-decoration: underline;
511
+    }
512
+
513
+    .jry_table th,
514
+    .jry_table td {
515
+        word-wrap: break-word;
516
+        padding: 6px 8px;
517
+        border: 1px solid #ddd;
518
+    }
519
+
520
+    .jry_table th {
521
+        text-align: center;
522
+        font-size: 13px;
523
+    }
524
+
525
+    .jry_table th strong {
526
+        position: relative;
527
+    }
528
+
529
+    .sort-wrap {
530
+        position: absolute;
531
+        right: -12px;
532
+        top: 50%;
533
+        transform: translateY(-50%);
534
+        width: 12px;
535
+        display: flex;
536
+        flex-direction: column;
537
+        justify-content: center;
538
+        line-height: normal;
539
+    }
540
+
541
+    .sortItem {
542
+        font-size: 12px;
543
+        color: #ddd;
544
+        height: 12px;
545
+        cursor: pointer;
546
+        position: absolute;
547
+    }
548
+
549
+    .sortItem.active {
550
+        color: #999;
551
+    }
552
+
553
+    .sortItem.icon-xiangshang {
554
+        bottom: -2px;
555
+    }
556
+
557
+    .sortItem.icon-xiangxia {
558
+        top: -2px;
559
+    }
560
+    /* 查询无记录 */
561
+    .noData{
562
+        font-size: 16px;
563
+        text-align: center;
564
+        font-weight: bold;
565
+        margin-top: 16px;
566
+        width: 100%;
567
+        min-height: 420px;
568
+    }
569
+
570
+    .form-control.smallline {
571
+        background-color: #fff;
572
+    }
573
+</style>