CMS客户关系管理系统【中】
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.新增按钮模板
<%-- 头工具栏 --%>
<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"></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());
}
重置密码
重置密码:
- 点击重置密码按钮
- 进行二次确认
- 将用户ID传给后台
- 将用户密码进行重置
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);
}
删除用户
删除用户:员工离职,就是修改用户的状态
- 点击离职
- 进行状态判定 如果已经离职 无需再离职
- 将用户ID 传给后台
- 进行修改状态操作:判断用户是否存在关联客户 如果存在则不进行修改状态 返回错误的业务信息
- 将信息展示
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.新建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 回复
