Jonlin 6 年之前
父节点
当前提交
0f5d31b388

+ 3 - 0
application/admin/controller/Login.php

@@ -49,6 +49,9 @@ class Login extends Controller
                 return json(['code' => -5, 'data' => '', 'msg' => '您已被禁用']);
             }
 
+//            cookie('user_name',$userName);
+//            cookie('user_id',$userInfo['id']);
+
             // 登陆成功 生成token
             $module = mt_rand(100000,999999);
             $token = base64_encode($module.'#$@%!^*/'.time().'/'.$userInfo['id']);

+ 129 - 0
application/admin/controller/Messages.php

@@ -0,0 +1,129 @@
+<?php
+/**
+ * Created by PhpStorm.
+ * User: Jonlin
+ * Date: 2019/6/27
+ * Time: 10:15
+ */
+namespace app\admin\controller;
+
+class Messages extends Base
+{
+    // 留言列表
+    public function index()
+    {
+        if(request()->isAjax()){
+
+            $param  = input('param.');
+            $limit  = $param['pageSize'];
+            $offset = (($param['pageNumber'] - 1) * $limit);
+            $where  = [];
+            if (empty($param['searchText']) === false) {
+                $where['user_name'] = $param['searchText'];
+            }
+
+            $join   = [
+                'accounts b'      => 'a.user_id = b.id',
+            ];
+            $result = model('Accountsmessage')->selectJoin($join,$where, $offset, $limit);
+            foreach($result as $key=>$vo){
+                // 优化显示附件
+                $result[$key]['image'] = '<img src="' . $vo['image'] . '" width="40px" height="40px">';
+
+                // 优化时间
+                if(null != $vo['add_time']){
+                    $result[$key]['add_time'] = date('Y-m-d H:m:s',$result[$key]['add_time']);
+                }
+                if(null != $vo['dealWith_time']){
+                    $result[$key]['dealWith_time'] = date('Y-m-d H:m:s',$result[$key]['dealWith_time']);
+                }
+
+                // 优化显示状态
+                if(1 == $vo['message_status']){
+                    $result[$key]['status'] = '<span class="label label-primary">已处理</span>';
+                }else{
+                    $result[$key]['status'] = '<span class="label label-danger">未处理</span>';
+                }
+
+                // 生成操作按钮
+                $result[$key]['operate'] = $this->makeBtn($vo['message_id']);
+            }
+
+            $return['total'] = db('Accountsmessage')->count();  //总数据
+            $return['rows'] = $result;
+
+            return json($return);
+
+        }
+
+        return $this->fetch();
+    }
+
+    // 留言详情
+    public function detail()
+    {
+
+        $id = input('param.id/d');
+        $info = db('Accountsmessage')->where('message_id', $id)->find();
+        $user = db('Accounts')->where('id', $info['user_id'])->find();
+        $info['user_name'] = $user['user_name'];
+        $info['user_email'] = $user['user_email'];
+
+        // 优化时间
+        if(null != $info['add_time']){
+            $info['add_time'] = date('Y-m-d H:m:s',$info['add_time']);
+        }
+        if(null != $info['dealWith_time']){
+            $info['dealWith_time'] = date('Y-m-d H:m:s',$info['dealWith_time']);
+        }
+
+        // 优化显示状态
+        if(1 == $info['message_status']){
+            $info['message_status'] = '已处理';
+        }else{
+            $info['message_status'] = '未处理';
+        }
+
+        $this->assign([
+            'info' => $info,
+            'status' => config('kf_status'),
+//            'groups' => db('groups')->select()
+        ]);
+        return $this->fetch();
+    }
+
+    // 上传客服头像
+    public function upAvatar()
+    {
+        if(request()->isAjax()) {
+
+            $file = request()->file('file');
+            if (!empty($file)) {
+                // 移动到框架应用根目录/public/uploads/ 目录下
+                $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
+                if ($info) {
+                    $src = '/uploads' . '/' . date('Ymd') . '/' . $info->getFilename();
+                    return json(['code' => 0, 'data' => ['src' => $src], 'msg' => 'ok']);
+                } else {
+                    // 上传失败获取错误信息
+                    return json(['code' => -1, 'data' => '', 'msg' => $file->getError()]);
+                }
+            }
+        }
+    }
+
+    // 生成按钮
+    private function makeBtn($id)
+    {
+        $operate = '<a href="' . url('Messages/detail', ['id' => $id]) . '">';
+//        $operate .= '<button type="button" class="btn btn-primary btn-sm"><i class="fa fa-paste"></i> 编辑</button></a> ';
+//
+//        $operate .= '<a href="javascript:userDel(' . $id . ')"><button type="button" class="btn btn-danger btn-sm">';
+//        $operate .= '<i class="fa fa-trash-o"></i> 删除</button></a> ';
+
+        //$operate .= '<a href="javascript:;">';
+        $operate .= '<button type="button" class="btn btn-info btn-sm"><i class="fa fa-institution"></i> 详情</button></a>';
+
+        return $operate;
+    }
+}

+ 51 - 0
application/admin/model/Accountsmessage.php

@@ -0,0 +1,51 @@
+<?php
+namespace app\admin\model;
+
+use think\Model;
+
+
+class Accountsmessage extends Model
+{
+
+    /**
+     * select数据筛选
+     *
+     * @access public
+     * @param mixed $join 关联
+     * @param mixed $where 条件
+     * @param mixed $offset 分页开始
+     * @param mixed $limit 分页大小
+     * @param mixed $order 排序
+     * @return array 返回类型
+     */
+    public function selectJoin($join, $where=[], $offset='', $limit='', $order=['a.message_id'=>'desc'])
+    {
+        $result = $this;
+        if (empty($join) === false) {
+            $result = $result->alias('a');
+            foreach ($join as $k => $v) {
+                $result = $result->join($k, $v);
+            }
+        }
+
+        if (empty($where) === false) {
+            $result = $result->where($where);
+        }
+
+        if (empty($offset) === false && empty($limit) === false) {
+            $result = $result->limit($offset, $limit);
+        }
+
+        if (empty($order) === false) {
+            foreach ($order as $k => $v) {
+                $result = $result->order($k, $v);
+            }
+        }
+
+        //$result = $result->field('a.id','b.user_name','b.user_name')->select();
+        $result = $result->select();
+        return $result;
+
+    }
+
+}

+ 13 - 0
application/admin/view/menu.html

@@ -113,3 +113,16 @@
         </li>
     </ul>
 </li>
+
+<li class="menu">
+    <a href="#">
+        <i class="fa fa-comments-o"></i>
+        <span class="nav-label">留言管理</span>
+        <span class="fa arrow"></span>
+    </a>
+    <ul class="nav nav-second-level">
+        <li>
+            <a class="J_menuItem" href="{:url('messages/index')}">留言</a>
+        </li>
+    </ul>
+</li>

+ 188 - 0
application/admin/view/messages/detail.html

@@ -0,0 +1,188 @@
+<!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__/animate.min.css" rel="stylesheet">
+    <link href="__JS__/layui/css/layui.css" rel="stylesheet">
+    <link href="__CSS__/style.min.css?v=4.1.0" rel="stylesheet">
+</head>
+<body class="gray-bg">
+<div class="wrapper wrapper-content animated fadeInRight">
+    <div class="row">
+        <div class="col-sm-8">
+            <div class="ibox float-e-margins">
+                <div class="ibox-title">
+                    <h5>留言详情</h5>
+                </div>
+                <div class="ibox-content">
+                    <form class="form-horizontal m-t layui-form" id="commentForm" method="post" action="{:url('users/edituser')}">
+                        <input type="hidden" value="{$info['message_id']}" name="id"/>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">用户名称:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="user_name" type="text" class="form-control" name="user_name" required="" aria-required="true" value="{$info['user_name']}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">留言时间:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="add_time" type="text" class="form-control" name="user_name" required="" aria-required="true" value="{$info['add_time']}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">内容:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="content" type="text" class="form-control" name="user_pwd" value="{$info['content']}">
+                            </div>
+                        </div>
+                        <div class="form-group layui-form-item form-inline" style="height: 60px;">
+                            <input type="hidden" name="user_avatar" id="user_avatar"/>
+                            <label class="col-sm-3 control-label">附件:</label>
+
+                            <div class="input-group col-sm-3" id="avatar">
+                                <img src="{$info['image']}" width="40px" height="40px"/>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">手机:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="phone" type="text" class="form-control" name="user_pwd" value="{$info['phone']}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">邮箱:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="user_email" type="text" class="form-control" name="user_pwd" value="{$info['user_email']}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">当前状态:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="message_status" type="text" class="form-control" name="user_pwd" value="{$info['message_status']}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">处理人:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="kefu_name" type="text" class="form-control" name="user_pwd" value="{$info['kefu_name']}">
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-3 control-label">处理时间:</label>
+                            <div class="input-group col-sm-4">
+                                <input id="dealWith_time" type="text" class="form-control" name="user_pwd" value="{$info['dealWith_time']}">
+                            </div>
+                        </div>
+
+                        <div class="form-group">
+                            <div class="col-sm-4 col-sm-offset-6" style="margin-left: 30%;">
+                                <!--<button class="btn btn-primary" type="button" id="button">返回</button>-->
+                                <a class="layui-btn layui-btn-sm lay-btn-diy" href="javascript:history.go(-1)" style="background-color:#1E9FFF;">返回</a>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</div>
+<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/validate/jquery.validate.min.js"></script>
+<script src="__JS__/plugins/validate/messages_zh.min.js"></script>
+<script src="__JS__/plugins/layer/layer.min.js"></script>
+<script src="__JS__/layui/layui.js"></script>
+<script src="__JS__/jquery.form.js"></script>
+<script type="text/javascript">
+//    $('#button').click(function(){
+//        console.log(1);
+//    });
+
+    layui.use(['form', 'upload'], function(){
+        var form = layui.form;
+        var upload = layui.upload;
+        //执行实例
+        var uploadInst = upload.render({
+            elem: '#up-avatar' //绑定元素
+            ,url: "{:url('users/upAvatar')}" //上传接口
+            ,exts: 'png|jpg|jpeg|gif'
+            ,done: function(res){
+                //上传完毕回调
+                if(0 == res.code){
+                    $("#avatar").html('<img src="' + res.data.src + '" width="50px" height="50px">');
+                    $("#user_avatar").val(res.data.src);
+                }else{
+                    layer.msg(res.msg);
+                }
+            }
+            ,error: function(){
+                //请求异常回调
+            }
+        });
+
+        form.on('select(group)', function(value){
+            $("#group_id").val(value.value);
+        });
+    });
+
+    var index = '';
+    function showStart(){
+        index = layer.load(0, {shade: false});
+        return true;
+    }
+
+    function showSuccess(res){
+
+        layer.ready(function(){
+            layer.close(index);
+            if(1 == res.code){
+                layer.alert(res.msg, {title: '友情提示', icon: 1, closeBtn: 0}, function(){
+                    window.location.href = res.data;
+                });
+            }else if(111 == res.code){
+                window.location.reload();
+            }else{
+                layer.msg(res.msg, {anim: 6});
+            }
+        });
+    }
+
+    $(document).ready(function(){
+        // 添加管理员
+        var options = {
+            beforeSubmit:showStart,
+            success:showSuccess
+        };
+
+        $('#commentForm').submit(function(){
+            $(this).ajaxSubmit(options);
+            return false;
+        });
+    });
+
+    // 表单验证
+    $.validator.setDefaults({
+        highlight: function(e) {
+            $(e).closest(".form-group").removeClass("has-success").addClass("has-error")
+        },
+        success: function(e) {
+            e.closest(".form-group").removeClass("has-error").addClass("has-success")
+        },
+        errorElement: "span",
+        errorPlacement: function(e, r) {
+            e.appendTo(r.is(":radio") || r.is(":checkbox") ? r.parent().parent().parent() : r.parent())
+        },
+        errorClass: "help-block m-b-none",
+        validClass: "help-block m-b-none"
+    });
+
+</script>
+</body>
+</html>

+ 134 - 0
application/admin/view/messages/index.html

@@ -0,0 +1,134 @@
+<!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">
+</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="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 class="user_name" id="user_name" data-field="user_name">用户名称</th>
+                        <th class="add_time" id="add_time" data-field="add_time">留言时间</th>
+                        <th data-field="content">内容</th>
+                        <th data-field="image">附件</th>
+                        <th data-field="phone">手机</th>
+                        <th data-field="user_email">邮箱</th>
+                        <th data-field="status">当前状态</th>
+                        <th data-field="kefu_name">处理人</th>
+                        <th data-field="dealWith_time">处理时间</th>
+                        <th data-field="operate">操作</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 type="text/javascript">
+    function initTable() {
+        //先销毁表格
+        $('#cusTable').bootstrapTable('destroy');
+        //初始化表格,动态从服务器加载数据
+        $("#cusTable").bootstrapTable({
+            method: "get",  //使用get请求到服务器获取数据
+            url: "{:url('messages/index')}", //获取数据的地址
+            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()
+                };
+                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", initTable);
+    });
+
+    function userDel(id){
+        layer.confirm('确认删除此客服?', {icon: 3, title:'提示'}, function(index){
+            //do something
+            $.getJSON("{:url('users/delUser')}", {'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);
+        })
+
+    }
+</script>
+</body>
+</html>

+ 10 - 8
application/index/controller/User.php

@@ -79,28 +79,30 @@ class User extends Controller
         if($res == -1){
             return $res;
         }
+        $user_id = explode('/',base64_decode($token))['2'];
 
         if(request()->isPost()){
-            $title = input("param.title/s");
             $content = input("param.content/s");
+            $phone = input("param.phone/s");
         }
 
-        if(empty($title)){
-            return json(['code' => -1, 'data' => '', 'msg' => '标题不能为空']);
+        if(empty($content)){
+            return json(['code' => -1, 'data' => '', 'msg' => '内容不能为空']);
         }
 
-        if(empty($content)){
-            return json(['code' => -2, 'data' => '', 'msg' => '内容不能为空']);
+        if(empty($phone)){
+            return json(['code' => -2, 'data' => '', 'msg' => '电话不能为空']);
         }
 
         $param = [
-            'user_id' => session('user_id'),
-            'title' => $title,
+            'user_id' => $user_id,
             'content' => $content,
+            'phone' => $phone,
+            'message_status' => 0,
             'add_time' => time()
         ];
 
-        db('accounts_message')->insertGetId($param);
+        db('accountsmessage')->insertGetId($param);
 
         return json(['code' => 1, 'data' => url('user/index'), 'msg' => '留言成功']);