CMS客户关系管理系统【中】

发布于 5 年前作者 yan164298 次浏览最后编辑 5 年前来自 share

CMS客户关系管理系统【中】

引言:此文承接上一篇cms文章:https://developers.weixin.qq.com/community/develop/article/doc/000ca6404188a0e898fa5080056c13

4.修改UserController

 /**
     * 查询分页数据
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void page(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前端参数
        String page = req.getParameter("page");
        String limit = req.getParameter("limit");
        String realname = req.getParameter("realname");
        String role = req.getParameter("role");
        String delete = req.getParameter("delete");
        //将参数封装为map
        Map<String,String> params = new HashMap<>();
        if (StrUtil.isNotBlank(realname)){
            params.put("realname",realname);
        }
        if (StrUtil.isNotBlank(role)){
            params.put("role",role);
        }
        if (StrUtil.isNotBlank(delete)){
            params.put("delete",delete);
        }
        Result rs = userService.queryPage(params,page,limit);
        RespUtil.writer(rs,resp);
    }

5.修改IUserService

    /**
     * 分页查询用户列表
     * @param params
     * @param page
     * @param limit
     * @return
     */
    Result queryPage(Map<String, String> params, String page, String limit);

6.修改UserServiceImpl

 @Override
    public Result queryPage(Map<String, String> params, String page, String limit) {
        PageInfo<User> pageInfo = userDao.selectPage(params,page,limit);
        return new Result(pageInfo);
    }

7.修改UserDao

    /**
     * 分页查询用户信息
     * @param params
     * @param page
     * @param limit
     * @return
     */
    public PageInfo<User> selectPage(Map<String, String> params, String page, String limit) {
        String sql = "select id,username,password,role,realname,`delete`,img,create_time as createTime from user where 1=1 ";
        if (params.containsKey("realname")){
            sql = sql +" and realname like concat('%','"+params.get("realname")+"','%') ";
        }
        if (params.containsKey("role")){
            sql = sql +" and role = "+params.get("role");
        }
        if (params.containsKey("delete")){
            sql = sql +" and `delete` = "+params.get("delete");
        }
        return  super.selectPage(sql,User.class,Integer.parseInt(page),Integer.parseInt(limit));
    }

新增员工

新增员工:(头工具栏监听事件)

  1. 点击新增
  2. 弹出一个层
  3. 填写员工信息
  4. 将员工信息插入数据库

1.新增按钮模板

    <%-- 头工具栏 --%>
    <script type="text/html" id="headerBtns">
        <button class="layui-btn layui-btn-sm" lay-event="add">
            <i class="layui-icon layui-icon-add-1"></i> 新增
        </button>
    </script>
    <%-- 行工具栏 --%>
    <script type="text/html" id="rowBtns">
        <div class="layui-btn-group">
            <button class="layui-btn layui-btn-xs layui-btn-warm" lay-event="reset">
                <i class="layui-icon layui-icon-edit"></i> 重置密码
            </button>
            <button class="layui-btn layui-btn-xs  layui-btn-danger" lay-event="del">
                <i class="layui-icon layui-icon-delete"></i> 离职
            </button>
        </div>
    </script>

2.修改表格渲染参数

新增:toolbar属性

let opt = {
         id:"dataTableId",
         elem:"#dataTable",
         url:"${pageContext.request.contextPath}/user.do?service=page",
         toolbar:"#headerBtns",//
         cols:[[
             {type:"checkbox"},
             {field:"username",title:"用户名"},
             {field:"password",title:"密码"},
             {field:"realname",title:"用户名"},
             {field:"role",title:"角色",templet:function (d) {
                 let role = d.role;
                 if (role == 1){
                     return "<b style='color: #5FB878'>管理员</b>"
                 }else if (role == 2){
                     return "<b style='color: red'>业务员</b>"
                 }
             }},
             {field:"delete",title:"状态",templet:function (d) {
                     let del = d.delete;
                     if (del == 1){
                         return "<b style='color: #5FB878'>在职</b>"
                     }else if (del == 2){
                         return "<b style='color: red'>离职</b>"
                     }
                 }},
             {field:"createTime",title:"创建时间"},
             {title:"操作",toolbar:"#rowBtns"},
         ]],
         page:true,
         parseData:function (rs) {
             return {
                 "code" : rs.code,
                 "msg":rs.msg,
                 "count":rs.data.total,
                 "data":rs.data.data
             }
         },
         response:{
             statusCode:200
         }
 };

3.新增头工具栏监听事件

  //头工具栏监听事件
        table.on("toolbar(dataTableFilter)",function (d) {
            let event = d.event;
            if (event == "add"){
                //新增用户信息
                add();
            }
        });

4.新增弹层模板

 <%-- 更新数据模板 --%>
    <script type="text/html" id="editTpls">
        <div style="padding: 20px">
            <form class="layui-form layui-form-pane" id="editForm" lay-filter="editFormFilter">
                <div class="layui-form-item">
                    <label class="layui-form-label">用户名</label>
                    <div class="layui-input-inline">
                        <input type="text" name="realName" class="layui-input" placeholder="用户姓名" autocomplete="off" lay-verify="required" lay-reqText="请输入用户姓名" >
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">登录名</label>
                    <div class="layui-input-inline">
                        <input type="text" name="username" class="layui-input" placeholder="登录名" autocomplete="off" lay-verify="required" lay-reqText="请输入登录名" >
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">密码</label>
                    <div class="layui-input-inline">
                        <input type="text" name="password" class="layui-input" placeholder="密码" readonly value="123456" >
                    </div>
                </div>
                <div class="layui-form-item">
                    <label class="layui-form-label">角色</label>
                    <div class="layui-input-inline" style="width: 210px">
                        <input type="radio" name="role"  title="管理员" value="1" >
                        <input type="radio" name="role"  title="业务员" value="2" checked>
                    </div>
                </div>
                <button type="button" style="display: none" id="subBtn" lay-submit lay-filter="subBtnFilter"></button>
            </form>
        </div>
    </script>

5.新增具体的处理新增的方法

   //具体的新增方法
        function add() {
            //弹出层
            layer.open({
                title:"编辑",
                type:1,//页面层
                content:$("#editTpls").html(),//页面内容
                area:"380px",
                btn:['确认','取消'],
                btnAlign:"c",//按钮居中
                success:function (layero,index) {
                    form.render();
                    //设置表单提交监听事件
                    form.on("submit(subBtnFilter)",function (formData) {
                        //使用ajax提交数据
                        $.post("${pageContext.request.contextPath}/user.do?service=add",formData.field,function (rs) {
                            if (rs.code != 200){
                                layer.msg(rs.msg);
                                return false;
                            }
                            //刷新表格
                            $("#searchBtn").click();
                            //关闭弹层
                            layer.close(index);
                        })
                        return false;//阻止表单默认提交行为
                    });
                },
                yes:function (index,layero) {//点击确认按钮
                    $("#subBtn").click();
                }
            });
        }

6.在UserController中新增代码

 /**
     * 处理客户端新增请求
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String realName = req.getParameter("realName");
        String username = req.getParameter("username");
        String role = req.getParameter("role");
        String time = DateUtil.format(new Date(),Constant.YYYY_MM_DD_HH_MM_SS);
        User user = new User(0,username,Constant.DEFAULT_PASSWORD,realName,Integer.parseInt(role),Constant.USER_STATE_VALID,"",time,time,"");
        Result rs = userService.addUser(user);
        RespUtil.writer(rs,resp);
    }

7.修改IUserService

    /**
     * 新增用户信息
     * @param user
     * @return
     */
    Result addUser(User user);

8.修改UserServiceImpl

    @Override
    public Result addUser(User user) {
        //新增用户信息
        //业务数据校验
        User u = userDao.selectOneByName(user.getUsername());
        //校验用户名是否已经被使用
        if (u != null){
            return  new Result(CodeMsg.USER_USERNAME_EXIST_ERROR);
        }
        //新增数据
        userDao.insert(user);
        return new Result();
    }

9.修改UserDao

    /**
     *  新增用户
     * @param user
     */
    public void insert(User user) {
        String sql = "insert into user ( `username`, `password`, `realname`, `role`, `delete`, `create_time`, `modify_time`) value(?,?,?,?,?,?,?)";
        super.update(sql,user.getUsername(),user.getPassword(),user.getRealname(),user.getRole(),user.getDelete(),user.getCreateTime(),user.getModifyTime());
    }

重置密码

重置密码:

  1. 点击重置密码按钮
  2. 进行二次确认
  3. 将用户ID传给后台
  4. 将用户密码进行重置

1.行监听事件

       //行监听事件
        table.on("tool(dataTableFilter)",function (d) {
            let event = d.event;
            if (event == "reset"){
                reset(d.data);
            }else if (event == "del"){
                del(d.data);
            }
        });

2.具体重置的方法

   //具体重置密码的方法
        function  reset(rowData) {
            let deleted = rowData.delete;
            if (deleted == 2){
                layer.msg("用户已离职,无需重置!");
                return false;
            }
            layer.confirm("确定要重置密码吗?",function (index) {
                $.get("${pageContext.request.contextPath}/user.do?service=reset",{id:rowData.id},function (rs) {
                    layer.msg(rs.msg);
                    $("#searchBtn").click();
                    layer.close(index);
                });
            });
        }

3.修改UserController

    /**
     * 重置用户密码
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void reset(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        Result rs = userService.resetPassword(id);
        RespUtil.writer(rs,resp);
    }

4.修改IUserService

   /**
     * 重置用户密码
     * @param id
     * @return
     */
    Result resetPassword(String id);

5.修改UserServiceImpl

    @Override
    public Result resetPassword(String id) {
        userDao.updatePassword(id,Constant.DEFAULT_PASSWORD);
        return new Result();
    }

6.修改UserDao

   /**
     * 修改用户密码
     * @param id
     * @param password
     */
    public void updatePassword(String id, String password) {
        String sql = "update user set password = ? ,modify_time = ? where id=?";
        String time = DateUtil.format(new Date(), Constant.YYYY_MM_DD_HH_MM_SS);
        super.update(sql,password,time,id);
    }

删除用户

删除用户:员工离职,就是修改用户的状态

  1. 点击离职
  2. 进行状态判定 如果已经离职 无需再离职
  3. 将用户ID 传给后台
  4. 进行修改状态操作:判断用户是否存在关联客户 如果存在则不进行修改状态 返回错误的业务信息
  5. 将信息展示

1.具体离职方法

    //具体的离职方法
        function  del(rowData) {
            let deleted = rowData.delete;
            if (deleted == 2){
                layer.msg("用户已离职!");
                return false;
            }
            layer.confirm("确定要离职吗?",function (index) {
                $.get("${pageContext.request.contextPath}/user.do?service=delete",{id:rowData.id},function (rs) {
                    layer.msg(rs.msg);
                    $("#searchBtn").click();
                    layer.close(index);
                });
            });
        }

2.修改UserController

    /**
     * 处理用户离职请求
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        Result rs = userService.delete(id);
        RespUtil.writer(rs,resp);
    }

3.修改IUservice

   /**
     * 用户离职业务
     * @param id
     * @return
     */
    Result delete(String id);

4.修改CustomerDao

    /**
     * 根据用户ID 查询客户列表
     * @param userId
     * @return
     */
    public List<Customer> selectListByUser(Integer userId){
        String sql = "select id from customer where user_id = ?";
        return  super.selectList(sql,Customer.class,userId);
    }

5.修改UserServiceImpl

  	CustomerDao customerDao = new CustomerDao();
	
	@Override
    public Result delete(String id) {
        //业务处理
        //1.判断用户是否存在客户  使用用户ID 查询客户信息
        List<Customer> customers = customerDao.selectListByUser(Integer.parseInt(id));
        if (!customers.isEmpty()){
            return  new Result(CodeMsg.USER_HAS_CUSTOMER_DELETE_ERROR);
        }
        //修改用户状态
        userDao.updateUserState(id,Constant.USER_STATE_INVALID);
        return new Result();
    }

6.修改UserDao

    /**
     * 修改用户状态
     * @param id
     * @param state
     */
    public void updateUserState(String id, Integer state) {
        String sql = "update user set `delete` = ? ,modify_time = ?,delete_time = ? where id=?";
        String time = DateUtil.format(new Date(), Constant.YYYY_MM_DD_HH_MM_SS);
        super.update(sql,state,time,time,id);
    }

客户列表

客户列表:

​ 将客户信息和相关的业务员信息展示。

搜索条件

  1. 根据业务员进行搜索
  2. 根据客户名称模糊搜
  3. 根据性别搜索
  4. 根据手机号搜索
  5. 根据生日范围搜索

1.新建customer文件夹

2.新增list.jsp

<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
    <title>Title</title>
    <%-- 引入layui --%>
    <link rel="stylesheet" href="${pageContext.request.contextPath}/resources/layui/css/layui.css">
</head>
<body>
    <div>
        <form  class="layui-form layui-form-pane">
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">业务员</label>
                    <div class="layui-input-inline">
                        <select  id="userId">
                            <option value="">业务员</option>
                        </select>
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label">客户</label>
                    <div class="layui-input-inline">
                        <input type="text" class="layui-input" id="name" placeholder="客户" autocomplete="off">
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label">性别</label>
                    <div class="layui-input-inline">
                        <select id="sex">
                            <option value="">性别</option>
                            <option value="1">男</option>
                            <option value="2">女</option>
                        </select>
                    </div>
                </div>

            </div>
            <%---------------------------------------------------------%>
            <div class="layui-form-item">
                <div class="layui-inline">
                    <label class="layui-form-label">手机号</label>
                    <div class="layui-input-inline">
                        <input type="text" class="layui-input" id="phone" placeholder="手机号" autocomplete="off">
                    </div>
                </div>
                <div class="layui-inline">
                    <label class="layui-form-label">生日</label>
                    <div class="layui-input-inline">
                        <input type="text" class="layui-input" id="birth" placeholder="生日" autocomplete="off" readonly>
                    </div>
                </div>
                <div class="layui-inline">
                    <button type="button" id="searchBtn" class="layui-btn">查询</button>
                    <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                </div>
            </div>
        </form>
        <hr>
        <table id="dataTable" lay-filter="dataTableFilter"></table>
    </div>
    <%-- 头工具栏 --%>
    <script type="text/html" id="headerBtns">

        <div class="layui-btn-group">
            <button class="layui-btn layui-btn-sm"

...

0 回复
暂无回复