Переглянути джерело

Merge branch 'master' of http://git.bocai108.com:10180/Ethan/Customer-Service

vali 6 роки тому
батько
коміт
60d64c44fb

+ 2 - 2
application/admin/controller/Accounts.php

@@ -180,8 +180,8 @@ class Accounts extends Base
 
         $operate = '<a style="margin-left:5px;" href="' . url('Accounts/edit', ['id' => $id]) . '"><button type="button" class="btn btn-primary btn-sm"><i class="fa fa-paste"></i> 编辑</button></a> ';
 
-        $operate .= '<a href="javascript:accountDel(' . $id . ')"><button type="button" class="btn btn-danger btn-sm">';
-        $operate .= '<i class="fa fa-trash-o"></i> 删除</button></a> ';
+//        $operate .= '<a href="javascript:accountDel(' . $id . ')"><button type="button" class="btn btn-danger btn-sm">';
+//        $operate .= '<i class="fa fa-trash-o"></i> 删除</button></a> ';
 
         return $operate;
     }

+ 107 - 0
application/admin/controller/Report.php

@@ -266,5 +266,112 @@ class Report extends Base
         );
     }
 
+<<<<<<< HEAD
+    // 工作报表
+    public function workreport()
+    {
+        if(request()->isAjax()){
+
+            $param  = input('param.');
+            $limit  = $param['pageSize'];
+            $offset = ($param['pageNumber'] - 1) * $limit;
+            $where  = [];
+            //用户名称
+            if (empty($param['searchText']) === false) {
+                $where['user_account|user_name|user_job_number'] = array('like','%'.$param['searchText'].'%');
+            }
+            if (empty($param['start']) === false && empty($param['end']) === false && $param['start'] <= $param['end']) {
+                $start = strtotime($param['start']);
+                $end = strtotime($param['end'] . ' 23:59:59');
+            }
+            $result = db('users')->limit($offset, $limit)->where($where)->select();
+
+            foreach($result as $key=>$vo){
+                //客服工单数
+                $result[$key]['service_num'] = db('service_log')->whereBetween('start_time', [$start, $end])->where('kf_id',$vo['id'])->count();
+                //客服发出消息数
+                $result[$key]['send_words'] = db('chat_log')->whereBetween('time_line', [$start, $end])->where('from_id','KF'.$vo['id'])->count();
+                //接入转接量
+                $result[$key]['transfer_in'] = db('serviceturn_log')->whereBetween('ctime', [date('Y-m-d',$start), date('Y-m-d',$end).' 23:59:59'])->where('stype','IN')->where('uid',$vo['id'])->count();
+                //客服收到消息数
+                $result[$key]['receive_words'] = db('chat_log')->whereBetween('time_line', [$start, $end])->where('to_id','KF'.$vo['id'])->count();
+                //客服回复工单数
+                $a = db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->where('a.kf_id',$vo['id'])->whereBetween('a.start_time', [$start, $end])->where('b.alarm_respond',2)->count();
+                //回复率
+                if(!empty($result[$key]['service_num'])){
+                    $n = $a/$result[$key]['service_num']*100;
+                    $result[$key]['reply'] = round($n,2).'%';
+                }
+
+                //答问比
+                if($result[$key]['receive_words'] != 0){
+                    $num = $result[$key]['send_words']/$result[$key]['receive_words']*100;
+                    $result[$key]['answer_problem'] = round($num,2).'%';
+                }
+                //平均会话时长
+                $result[$key]['conversation'] = round(db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->whereBetween('a.start_time', [$start, $end])->where('a.kf_id',$vo['id'])->avg('b.alarm_cvtOvertime'));
+                if($result[$key]['conversation'] >= 60){
+                    $result[$key]['conversation'] = floor($result[$key]['conversation']/60).'分'.($result[$key]['conversation']%60).'秒';
+                }else{
+                    $result[$key]['conversation'] = $result[$key]['conversation'].'秒';
+                }
+                //平均响应时长
+                $result[$key]['response'] = round(db('service_log a')->join('alarm b', 'a.servicelog_id=b.servicelog_id')->whereBetween('a.start_time', [$start, $end])->where('a.kf_id',$vo['id'])->avg('b.alarm_corresponding'));
+                if($result[$key]['response'] >= 60){
+                    $result[$key]['response'] = floor($result[$key]['response']/60).'分'.($result[$key]['response']%60).'秒';
+                }else{
+                    $result[$key]['response'] = $result[$key]['response'].'秒';
+                }
+                //已评价的工单数
+                $m = db('service_log')->whereBetween('start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_id','<>',0)->count();
+                //参评率
+                if($result[$key]['service_num'] != 0){
+                    $result[$key]['appraise'] = $m/$result[$key]['service_num']*100;
+                    $result[$key]['appraise'] = round($num,2).'%';
+                }
+                //满意评价
+                $result[$key]['pleased_num'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_name','满意')->count();
+                //一般评价
+                $result[$key]['commonly'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_name','一般')->count();
+                //不满意评价
+                $result[$key]['no_pleased'] = db('service_log a')->join('evaluate b', 'a.evaluate_id=b.evaluate_id')->whereBetween('a.start_time', [$start, $end])->where('kf_id',$vo['id'])->where('evaluate_name','不满意')->count();
+                //相对满意度率
+                if($m != 0){
+                    $result[$key]['pleased'] = $result[$key]['pleased_num']/$m*100;
+                    $result[$key]['pleased'] = round($result[$key]['pleased'],2).'%';
+                }
+
+                //留言处理量
+                $result[$key]['message'] = db('accountsmessage')->whereBetween('dealWith_time', [$start, $end])->where('user_id',$vo['id'])->count();
+
+
+                // 生成操作按钮
+                //$result[$key]['operate'] = $this->makeBtn($vo['id']);
+            }
+
+            $return['total'] = db('users')->where($where)->count();  //总数据
+            $return['rows'] = $result;
+
+            return json($return);
+
+        }
+        //所有客服
+        $users = db('users')->select();
+        if(!empty($users)){
+            $option = '<option value="0">处理人</option>';
+            for($i=0;$i<count($users);$i++){
+                $option = $option.'<option value="'.$users[$i]['id'].'">'.$users[$i]['user_name'].'</option>';
+            }
+            $useroption = '<select lay-verify="required" lay-filter="user_id">'.$option.'</select>';
+        }
+
+        $this->assign([
+            'useroption' => $useroption
+        ]);
+
+        return $this->fetch();
+    }
+=======
+>>>>>>> 725c05a5865a7a7fa45b0171f80d65c46633c315
 
 }//end class

+ 3 - 3
application/admin/view/accounts/edit.html

@@ -19,8 +19,8 @@
     .service div{
         float: left;
         /*width: 50%;*/
-        height: 25px;
-        line-height: 25px;
+        height: 30px;
+        line-height: 30px;
     }
 </style>
 <body class="gray-bg">
@@ -127,7 +127,7 @@
                         {if !empty($service_log)}
                         {foreach name="service_log" item="vo" key="key"}
                         <a href="/admin/system/detail/id/{$vo['servicelog_id']}.html">
-                            <li class="service" style="box-shadow:inset;height: 25px;background-color: white;margin-top: 5px;">
+                            <li class="service" style="box-shadow:inset;height: 30px;background-color: white;margin-top: 5px;">
                                 <div style="width:60%;">{$vo['start_time']}</div>
                                 <div style="width:40%;text-align: right;">{$vo['user_name']}</div>
                             </li>

+ 25 - 2
application/admin/view/admins/editpower.html

@@ -36,11 +36,11 @@
                         {foreach name="info" item="vo" key="key"}
                         <div class="form-group" style="margin:5px 20px;">
                             <input type="hidden" name="{$vo['name_cn']}" value="0">
-                            <input id="{$vo['ico']}" type="checkbox" name="{$vo['name_cn']}" value="{$vo['id']}" {if$vo['power']==1} checked {/if} ><span style="font-weight: 600;">{$vo['name_cn']}:</span><br>
+                            <input type="checkbox" level='1' name="{$vo['name_cn']}" value="{$vo['id']}" {if$vo['power']==1} checked {/if} ><span style="font-weight: 600;">{$vo['name_cn']}:</span><br>
                             <div style="margin:5px 20px;">
                                 {foreach name="$vo['menulist']" item="vo" key="key"}
                                 <input type="hidden" name="{$vo['name_cn']}" value="0">
-                                <input class="menulist" id="menulist"  type="checkbox" name="{$vo['name_cn']}" value="{$vo['id']}" {if$vo['power']==1} checked {/if} >{$vo['name_cn']}
+                                <input class="menulist" level='2' id="menulist"  type="checkbox" name="{$vo['name_cn']}" value="{$vo['id']}" {if$vo['power']==1} checked {/if} >{$vo['name_cn']}
                                 {/foreach}
                             </div>
                         </div>
@@ -67,6 +67,29 @@
 <script src="__JS__/plugins/layer/layer.min.js"></script>
 <script src="__JS__/layui/layui.js"></script>
 <script src="__JS__/jquery.form.js"></script>
+<script>
+    $(function(){
+        $('[level=1]').click(function(){
+            if(this.checked){
+                $(this).parent().find('input').prop('checked','checked');
+            }
+            else{
+                $(this).parent().find('input').removeAttr('checked');
+            }
+        });
+        $('[level=2]').click(function(){
+            if (this.checked) {
+                $(this).parent().parent().find('[level=1]').prop('checked','checked');
+            }
+            else{
+                if($(this).parent().find('input:checked').length==0){
+                    $(this).parent().parent().find('[level=1]').removeAttr('checked');
+                }
+
+            }
+        });
+    });
+</script>
 <script>
     $(".fa-comments-o").change(function(){
         if($(".fa-comments-o:checked").length!=0){

+ 202 - 0
application/admin/view/report/workreport.html

@@ -0,0 +1,202 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <title>工作报表</title>
+    <link rel="shortcut icon" href="favicon.ico">
+    <link href="__CSS__/bootstrap.min.css?v=3.3.6" rel="stylesheet">
+    <link href="__CSS__/font-awesome.min.css?v=4.4.0" rel="stylesheet">
+    <link href="__CSS__/plugins/bootstrap-table/bootstrap-table.min.css" rel="stylesheet">
+    <link href="__CSS__/animate.min.css" rel="stylesheet">
+    <link href="__CSS__/style.min.css?v=4.1.0" rel="stylesheet">
+    <link href="__JS__/layui/css/myLayui.css" rel="stylesheet">
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content animated fadeInRight">
+    <!-- Panel Other -->
+    <div class="ibox float-e-margins">
+        <div class="ibox-title">
+            <h5>工作报表</h5>
+        </div>
+        <div class="ibox-content">
+            <!--搜索框开始-->
+            <form id='commentForm' role="form" method="post" class="form-inline pull-right">
+                <div class="content clearfix m-b">
+                    <div class="form-group">
+                        <label>留言日期:</label>
+                        <input type="text" class="form-control" id="start" value="<?php echo date('Y-m-d',time()-172800);?>" style="width: 100px;"> --
+                        <input type="text" class="form-control" id="end" value="<?php echo date('Y-m-d',time()-86400);?>" style="width: 100px;">
+                    </div>
+                    <div class="form-group">
+                        <label>客服:</label>
+                        <input type="text" class="form-control" id="username" name="user_name">
+                    </div>
+                    <div class="form-group">
+                        <button class="btn btn-primary" type="button" style="margin-top:5px" id="search"><strong>搜 索</strong>
+                        </button>
+                    </div>
+                </div>
+            </form>
+            <!--搜索框结束-->
+            <div class="example-wrap">
+                <div class="example">
+                    <table id="cusTable">
+                        <thead>
+                        <th data-field="user_account">账号</th>
+                        <th data-field="user_name">名称</th>
+                        <th data-field="user_job_number">工号</th>
+                        <th data-field="service_num">接入会话量</th>
+                        <th data-field="send_words">总消息量</th>
+                        <th data-field="transfer_in">接入转接量</th>
+                        <th data-field="reply">回复率</th>
+                        <th data-field="answer_problem">答问比</th>
+                        <th data-field="conversation">平均会话时长</th>
+                        <th data-field="response">平均响应时长</th>
+                        <th data-field="appraise">参评率</th>
+                        <th data-field="pleased">相对满意度率</th>
+                        <th data-field="pleased_num">满意评价次数</th>
+                        <th data-field="commonly">一般评价次数</th>
+                        <th data-field="no_pleased">不满意评价次数</th>
+                        <th data-field="message">留言处理量</th>
+                        </thead>
+                    </table>
+                </div>
+            </div>
+            <!-- End Example Pagination -->
+        </div>
+    </div>
+</div>
+<!-- End Panel Other -->
+<script src="__JS__/jquery.min.js?v=2.1.4"></script>
+<script src="__JS__/bootstrap.min.js?v=3.3.6"></script>
+<script src="__JS__/content.min.js?v=1.0.0"></script>
+<script src="__JS__/plugins/bootstrap-table/bootstrap-table.min.js"></script>
+<script src="__JS__/plugins/bootstrap-table/bootstrap-table-mobile.min.js"></script>
+<script src="__JS__/plugins/bootstrap-table/locale/bootstrap-table-zh-CN.min.js"></script>
+<script src="__JS__/plugins/layer/layer.min.js"></script>
+<script src="__JS__/layui/layui.js"></script>
+<script type="text/javascript">
+
+    layui.use(['form', 'upload'], function(){
+        var form = layui.form;
+
+        form.on('select(message_status)', function(value){
+            $("#message_status").val(value.value);
+            onSearch()
+        });
+    });
+
+</script>
+<script type="text/javascript">
+    function initTable() {
+        //先销毁表格
+        $('#cusTable').bootstrapTable('destroy');
+        //初始化表格,动态从服务器加载数据
+        $("#cusTable").bootstrapTable({
+            method: "get",  //使用get请求到服务器获取数据
+            url: "{:url('report/workreport')}", //获取数据的地址
+            striped: true,  //表格显示条纹
+            pagination: true, //启动分页
+            pageSize: 10,  //每页显示的记录数
+            pageNumber:1, //当前第几页
+            pageList: [5, 10, 15, 20, 25],  //记录数可选列表
+            sidePagination: "server", //表示服务端请求
+            paginationFirstText: "首页",
+            paginationPreText: "上一页",
+            paginationNextText: "下一页",
+            paginationLastText: "尾页",
+            queryParamsType : "undefined",
+            queryParams: function queryParams(params) {   //设置查询参数
+                var param = {
+                    pageNumber: params.pageNumber,
+                    pageSize: params.pageSize,
+                    searchText:$('#username').val(),
+                    start:$('#start').val(),
+                    end:$('#end').val()
+                };
+                return param;
+            },
+            onLoadSuccess: function(res){  //加载成功时执行
+                if(111 == res.code){
+                    window.location.reload();
+                }
+                layer.msg("加载成功", {time : 1000});
+            },
+            onLoadError: function(){  //加载失败时执行
+                layer.msg("加载数据失败");
+            }
+        });
+    }
+
+    $(document).ready(function () {
+        //调用函数,初始化表格
+        initTable();
+
+        //当点击查询按钮的时候执行
+        $("#search").bind("click", function(){
+            var start = $('#start').val();
+            var end = $('#end').val();
+            if(start > end){
+                layer.msg('开始时间不能大于结束时间');
+                return false;
+            }
+
+            //获取当前时间 年月日
+            var date = new Date();
+            var year = date.getFullYear();
+            var month = date.getMonth() + 1;
+            var day = date.getDate();
+            if (month < 10) {
+                month = "0" + month;
+            }
+            if (day < 10) {
+                day = "0" + day;
+            }
+            var nowDate = year + "-" + month + "-" + day;
+            console.log(nowDate);
+            if(nowDate <= end){
+                layer.msg('结束时间不能大于等于当前时间');
+                return false;
+            }
+
+            initTable();
+        });
+
+    });
+
+    function messageDel(id){
+        layer.confirm('确认删除?', {icon: 3, title:'提示'}, function(index){
+            //do something
+            $.getJSON("{:url('Messages/delMessage')}", {'id' : id}, function(res){
+                if(1 == res.code){
+                    layer.alert(res.msg, {title: '友情提示', icon: 1, closeBtn: 0}, function(){
+                        initTable();
+                    });
+                }else if(111 == res.code){
+                    window.location.reload();
+                }else{
+                    layer.alert(res.msg, {title: '友情提示', icon: 2});
+                }
+            });
+
+            layer.close(index);
+        })
+
+    }
+
+    layui.use('laydate', function(){
+        var laydate = layui.laydate;
+        laydate.render({
+            elem: '#start'
+            ,type: 'date'
+        });
+
+        laydate.render({
+            elem: '#end'
+            ,type: 'date'
+        });
+    });
+</script>
+</body>
+</html>