branch_liu
LiuChang 3 months ago
parent 5e49b5cfdf
commit 563386b450

@ -29,67 +29,81 @@ import java.util.UUID;
* @Date: 2020/2/18 16:26 * @Date: 2020/2/18 16:26
* @Author: PeiChen * @Author: PeiChen
*/ */
// 声明这是一个控制器
@Controller @Controller
// 映射访问路径为/visitor
@RequestMapping("/visitor") @RequestMapping("/visitor")
public class VisitorController { public class VisitorController {
// 自动注入VisitorService服务类
private VisitorService visitorService; private VisitorService visitorService;
// 通过Autowired注解自动注入VisitorService
@Autowired @Autowired
public void setVisitorService(VisitorService visitorService) { public void setVisitorService(VisitorService visitorService) {
this.visitorService = visitorService; this.visitorService = visitorService;
} }
// 访问路径为/visitor/login的请求处理方法返回注册页面
@RequestMapping("/login") @RequestMapping("/login")
public String register() { public String register() {
return "regist_visitor"; return "regist_visitor";
} } // 返回regist_visitor视图
/** /**
* 访C * 访C
* @param visitor * @param visitor 访
* @return * @return ModelAndView
* @throws Exception * @throws Exception
*/ */
@RequestMapping("/addLogin") @RequestMapping("/addLogin")
public ModelAndView addVisitor(Visitor visitor) throws Exception { public ModelAndView addVisitor(Visitor visitor) throws Exception {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
// 参数校验,如果访客信息不完整,则返回错误信息
if (visitor == null || visitor.getName() == null || visitor.getSno() == null || visitor.getPhone() == null || visitor.getPlace() == null) { if (visitor == null || visitor.getName() == null || visitor.getSno() == null || visitor.getPhone() == null || visitor.getPlace() == null) {
mv.addObject("error_msg","来访登记失败,请重新登记!"); mv.addObject("error_msg","来访登记失败,请重新登记!");
mv.setViewName("regist_visitor"); mv.setViewName("regist_visitor");
return mv; return mv;
} }
// 生成访客ID
if (visitor.getId() == null || "".trim().equals(visitor.getId())) { if (visitor.getId() == null || "".trim().equals(visitor.getId())) {
String uuid = UUID.randomUUID().toString().replace("-", ""); String uuid = UUID.randomUUID().toString().replace("-", "");
visitor.setId(uuid); visitor.setId(uuid);
} }
// 设置来访时间为当前系统时间
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
visitor.setBegin_date(date);//设置来访时间为提交来访登记时间 visitor.setBegin_date(date);//设置来访时间为提交来访登记时间
//先设置离开时间为空串,后续注销时再修改为注销时系统时间 //先设置离开时间为空串,后续注销时再修改为注销时系统时间
if (visitor.getEnd_date() == null || "".trim().equals(visitor.getEnd_date())) { if (visitor.getEnd_date() == null || "".trim().equals(visitor.getEnd_date())) {
visitor.setEnd_date(""); visitor.setEnd_date("");
} }
// 添加访客信息到数据库
visitorService.add(visitor); visitorService.add(visitor);
// 添加访客ID到模型用于页面显示
mv.addObject("id",visitor.getId()); mv.addObject("id",visitor.getId());
mv.setViewName("visitor-success"); mv.setViewName("visitor-success"); // 设置成功页面视图
return mv; return mv;
} }
/** /**
* 访 * 访
* @param request * @param request HttpServletRequest
* @return * @return ModelAndView
* @throws Exception * @throws Exception
*/ */
@RequestMapping("/login_out") @RequestMapping("/login_out")
public ModelAndView logout(HttpServletRequest request) throws Exception { public ModelAndView logout(HttpServletRequest request) throws Exception {
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
// 获取访客ID
String id = request.getParameter("id"); String id = request.getParameter("id");
// 如果ID为空则返回错误信息
if (id == null || "".trim().equals(id)) { if (id == null || "".trim().equals(id)) {
mv.addObject("logout_msg","系统繁忙,请稍后再试!"); mv.addObject("logout_msg","系统繁忙,请稍后再试!");
mv.setViewName("regist_visitor"); mv.setViewName("regist_visitor");
} }
// 获取当前系统时间
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
// 注销访客记录
visitorService.logout(id,date); visitorService.logout(id,date);
mv.addObject("logout_msg","注销成功"); mv.addObject("logout_msg","注销成功");
mv.setViewName("regist_visitor"); mv.setViewName("regist_visitor");
@ -98,79 +112,106 @@ public class VisitorController {
/** /**
* 访 * 访
* @param request * @param request HttpServletRequest
* @param response * @param response HttpServletResponse
* @throws Exception * @throws Exception
*/ */
@RequestMapping("/updateStatus") @RequestMapping("/updateStatus")
public void updateStatus(HttpServletRequest request,HttpServletResponse response) throws Exception { public void updateStatus(HttpServletRequest request,HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
PrintWriter writer = response.getWriter(); PrintWriter writer = response.getWriter();
// 获取访客ID
String id = request.getParameter("id"); String id = request.getParameter("id");
// 如果ID为空则返回错误信息
if (id == null || "".trim().equals(id)) { if (id == null || "".trim().equals(id)) {
writer.write("false"); writer.write("false");
return; return;
} }
// 获取当前系统时间
String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); String date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
// 注销访客记录
visitorService.logout(id,date); visitorService.logout(id,date);
writer.write("true"); writer.write("true");
} }
/** /**
* 访 * 访
* @param page * @param page
* @param size * @param size
* @param request * @param request HttpServletRequest
* @param response * @param response HttpServletResponse
* @return * @return ModelAndView
* @throws Exception * @throws Exception
*/ */
@RequestMapping("/findAll") @RequestMapping("/findAll")
public ModelAndView findAll(@RequestParam(name = "page", required = true, defaultValue = "1") int page, @RequestParam(name = "size", required = true, defaultValue = "5") int size,HttpServletRequest request,HttpServletResponse response) throws Exception { public ModelAndView findAll(@RequestParam(name = "page", required = true, defaultValue = "1") int page, @RequestParam(name = "size", required = true, defaultValue = "5") int size,HttpServletRequest request,HttpServletResponse response) throws Exception {
// 设置请求和响应的字符编码为UTF-8
request.setCharacterEncoding("utf-8"); request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8");
// 创建ModelAndView对象用于返回视图和数据
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
List<Visitor> visitors = null; List<Visitor> visitors = null;
// 获取请求中的keyword参数
String keyword = request.getParameter("keyword"); String keyword = request.getParameter("keyword");
// 如果keyword为空或为空字符串则查询所有访客记录
if (keyword == null || "".trim().equals(keyword) || keyword.length() == 0) { if (keyword == null || "".trim().equals(keyword) || keyword.length() == 0) {
visitors = visitorService.findAll(page,size); visitors = visitorService.findAll(page,size);
}else { }else {
// 否则根据keyword进行搜索
visitors = visitorService.search(page,size,keyword); visitors = visitorService.search(page,size,keyword);
} }
// 创建分页信息对象
PageInfo pageInfo = new PageInfo(visitors); PageInfo pageInfo = new PageInfo(visitors);
// 将分页信息添加到ModelAndView对象中
mv.addObject("pageInfo",pageInfo); mv.addObject("pageInfo",pageInfo);
// 设置视图名称为"visitor-list"
mv.setViewName("visitor-list"); mv.setViewName("visitor-list");
// 返回ModelAndView对象
return mv; return mv;
} }
/** /**
* 访` * 访`
* @return * @return ModelAndView 访
* @throws Exception * @throws Exception
*/ */
@RequestMapping("/log") @RequestMapping("/log")
public ModelAndView log(@RequestParam(name = "page", required = true, defaultValue = "1") int page, @RequestParam(name = "size", required = true, defaultValue = "10") int size) throws Exception { public ModelAndView log(@RequestParam(name = "page", required = true, defaultValue = "1") int page, @RequestParam(name = "size", required = true, defaultValue = "10") int size) throws Exception {
// 创建ModelAndView对象用于返回视图和数据
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
// 获取访客日志列表
List<Visitor> logs = visitorService.log(page,size); List<Visitor> logs = visitorService.log(page,size);
// 创建分页信息对象
PageInfo pageInfo = new PageInfo(logs); PageInfo pageInfo = new PageInfo(logs);
// 将分页信息添加到ModelAndView对象中
mv.addObject("pageInfo",pageInfo); mv.addObject("pageInfo",pageInfo);
// 设置视图名称为"visitor-log"
mv.setViewName("visitor-log"); mv.setViewName("visitor-log");
// 返回ModelAndView对象
return mv; return mv;
} }
/** /**
* 访 * 访
* @param response * @param response HttpServletResponseExcel
* @throws Exception * @throws Exception
*/ */
@RequestMapping("/visitorInfo") @RequestMapping("/visitorInfo")
public void export(HttpServletResponse response) throws Exception { public void export(HttpServletResponse response) throws Exception {
// 获取Excel文件的输入流
InputStream is = visitorService.getInputStream(); InputStream is = visitorService.getInputStream();
// 设置响应的内容类型为Excel文件
response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.ms-excel");
// 设置响应头指示浏览器以附件形式下载文件并设置文件名为visitorInfo.xls
response.setHeader("contentDisposition","attachment;filename=visitorInfo.xls"); response.setHeader("contentDisposition","attachment;filename=visitorInfo.xls");
// 获取响应的输出流
ServletOutputStream outputStream = response.getOutputStream(); ServletOutputStream outputStream = response.getOutputStream();
// 使用IOUtils工具类将输入流的内容复制到输出流
IOUtils.copy(is,outputStream); IOUtils.copy(is,outputStream);
} }

@ -15,39 +15,40 @@ import java.util.List;
* @Date: 2020/2/18 16:27 * @Date: 2020/2/18 16:27
* @Author: PeiChen * @Author: PeiChen
*/ */
// 声明这是一个数据访问对象接口
@Repository @Repository
public interface VisitorDao { //liih public interface VisitorDao {
/** /**
* 访 * 访
* @param visitor * @param visitor 访访
* @throws Exception * @throws Exception
*/ */
@Insert("insert into visitors(id,name,sno,phone,place,begin_date,end_date,visit_result) values(#{id},#{name},#{sno},#{phone},#{place},#{begin_date},#{end_date},#{visit_result})") @Insert("insert into visitors(id,name,sno,phone,place,begin_date,end_date,visit_result) values(#{id},#{name},#{sno},#{phone},#{place},#{begin_date},#{end_date},#{visit_result})")
void add(Visitor visitor) throws Exception; void add(Visitor visitor) throws Exception;
/** /**
* 访 * 访
* @return * @return 访
* @throws Exception * @throws Exception
*/ */
@Select("select * from visitors order by begin_date desc") @Select("select * from visitors order by begin_date desc")
List<Visitor> findAll() throws Exception; List<Visitor> findAll() throws Exception;
/** /**
* 访访 * 访访
* @param id * @param id 访
* @param end_date * @param end_date 访
* @throws Exception * @throws Exception
*/ */
@Update("update visitors set end_date = #{end_date} where id = #{id}") @Update("update visitors set end_date = #{end_date} where id = #{id}")
void logout(@Param(value = "id") String id,@Param(value = "end_date") String end_date) throws Exception; void logout(@Param(value = "id") String id,@Param(value = "end_date") String end_date) throws Exception;
/** /**
* 访 * 访
* @param keyword * @param keyword
* @return * @return 访
* @throws Exception * @throws Exception
*/ */
@Select("select * from visitors where name like '%${keyword}%' or sno like '%${keyword}%' or phone like '%${keyword}%' or place like '%${keyword}%' or begin_date like '%${keyword}%' or end_date like '%${keyword}%' or visit_result like '%${keyword}%' order by begin_date desc ") @Select("select * from visitors where name like '%${keyword}%' or sno like '%${keyword}%' or phone like '%${keyword}%' or place like '%${keyword}%' or begin_date like '%${keyword}%' or end_date like '%${keyword}%' or visit_result like '%${keyword}%' order by begin_date desc ")
List<Visitor> search(@Param(value = "keyword") String keyword) throws Exception; List<Visitor> search(@Param(value = "keyword") String keyword) throws Exception;

@ -4,7 +4,7 @@ import java.io.Serializable;
/** /**
* Description:访 * Description:访
* * 访Serializable便
* @Date: 2020/2/18 16:29 * @Date: 2020/2/18 16:29
* @Author: PeiChen * @Author: PeiChen
*/ */
@ -18,9 +18,24 @@ public class Visitor implements Serializable {
private String end_date;//离开时间 private String end_date;//离开时间
private String visit_result;//到访原因 private String visit_result;//到访原因
/**
*
*/
public Visitor() { public Visitor() {
} }
/**
* 访
* @param id 访ID
* @param name 访
* @param sno 访
* @param phone 访
* @param place 访访
* @param begin_date 访访
* @param end_date 访
* @param visit_result 访访
*/
public Visitor(String id, String name, String sno, String phone, String place, String begin_date, String end_date, String visit_result) { public Visitor(String id, String name, String sno, String phone, String place, String begin_date, String end_date, String visit_result) {
this.id = id; this.id = id;
this.name = name; this.name = name;
@ -32,6 +47,8 @@ public class Visitor implements Serializable {
this.visit_result = visit_result; this.visit_result = visit_result;
} }
// 以下是属性的getter和setter方法、
public String getId() { public String getId() {
return id; return id;
} }
@ -96,6 +113,10 @@ public class Visitor implements Serializable {
this.visit_result = visit_result; this.visit_result = visit_result;
} }
/**
* toString访
* @return 访
*/
@Override @Override
public String toString() { public String toString() {
return "Visitor{" + return "Visitor{" +

@ -6,23 +6,61 @@ import java.io.InputStream;
import java.util.List; import java.util.List;
/** /**
* Description: * Description:访访
* *
* @Date: 2020/2/18 18:27 * @Date: 2020/2/18 18:27
* @Author: PeiChen * @Author: PeiChen
*/ */
public interface VisitorService { public interface VisitorService {
/**
* 访
* @param visitor 访访
* @throws Exception
*/
void add(Visitor visitor) throws Exception; void add(Visitor visitor) throws Exception;
/**
* 访
* @param page
* @param size
* @return 访
* @throws Exception
*/
List<Visitor> findAll(int page,int size) throws Exception; List<Visitor> findAll(int page,int size) throws Exception;
/**
*
* @param page
* @param size
* @param keyword
* @return 访
* @throws Exception
*/
List<Visitor> search(int page,int size,String keyword) throws Exception; List<Visitor> search(int page,int size,String keyword) throws Exception;
/**
* 访
* @param id 访
* @param end_date 访
* @throws Exception
*/
void logout(String id,String end_date) throws Exception; void logout(String id,String end_date) throws Exception;
/**
* 访
* @return 访
* @throws Exception
*/
InputStream getInputStream() throws Exception; InputStream getInputStream() throws Exception;
/**
* 访
* @param page
* @param size
* @return 访
* @throws Exception
*/
List<Visitor> log(int page,int size) throws Exception; List<Visitor> log(int page,int size) throws Exception;
} }

@ -13,7 +13,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Description: * Description:访VisitorService
* *
* @Date: 2020/2/18 18:50 * @Date: 2020/2/18 18:50
* @Author: PeiChen * @Author: PeiChen
@ -23,6 +23,10 @@ public class VisitorServiceImpl implements VisitorService {
private VisitorDao visitorDao; private VisitorDao visitorDao;
/**
* AutowiredVisitorDao
* @param visitorDao 访访
*/
@Autowired @Autowired
public void setVisitorDao(VisitorDao visitorDao) { public void setVisitorDao(VisitorDao visitorDao) {
this.visitorDao = visitorDao; this.visitorDao = visitorDao;
@ -30,8 +34,8 @@ public class VisitorServiceImpl implements VisitorService {
/** /**
* 访 * 访
* @param visitor * @param visitor 访访
* @throws Exception * @throws Exception
*/ */
@Override @Override
public void add(Visitor visitor) throws Exception { public void add(Visitor visitor) throws Exception {
@ -39,33 +43,37 @@ public class VisitorServiceImpl implements VisitorService {
} }
/** /**
* 访 * 访
* @return * @return 访
* @throws Exception * @throws Exception
*/ */
@Override @Override
public List<Visitor> findAll(int page, int size) throws Exception { public List<Visitor> findAll(int page, int size) throws Exception {
// 使用PageHelper插件进行分页
PageHelper.startPage(page,size); PageHelper.startPage(page,size);
return visitorDao.findAll(); return visitorDao.findAll();
} }
/** /**
* 访 * 访
* @param keyword * @param page
* @return * @param size
* @throws Exception * @param keyword
* @return 访
* @throws Exception
*/ */
@Override @Override
public List<Visitor> search(int page, int size, String keyword) throws Exception { public List<Visitor> search(int page, int size, String keyword) throws Exception {
// 使用PageHelper插件进行分页
PageHelper.startPage(page,size); PageHelper.startPage(page,size);
return visitorDao.search(keyword); return visitorDao.search(keyword);
} }
/** /**
* 访访 * 访访
* @param id * @param id 访
* @param end_date * @param end_date 访
* @throws Exception * @throws Exception
*/ */
@Override @Override
public void logout(String id, String end_date) throws Exception { public void logout(String id, String end_date) throws Exception {
@ -73,9 +81,9 @@ public class VisitorServiceImpl implements VisitorService {
} }
/** /**
* 访 * 访Excel
* @return * @return 访
* @throws Exception * @throws Exception
*/ */
@Override @Override
public InputStream getInputStream() throws Exception { public InputStream getInputStream() throws Exception {
@ -95,19 +103,21 @@ public class VisitorServiceImpl implements VisitorService {
obj[7] = visitors.get(i).getVisit_result(); obj[7] = visitors.get(i).getVisit_result();
datalist.add(obj); datalist.add(obj);
} }
// 使用WriteExcel类将数据写入Excel文件
WriteExcel excel = new WriteExcel(title,datalist); WriteExcel excel = new WriteExcel(title,datalist);
return excel.export(); return excel.export();
} }
/** /**
* 访 * 访
* @param page * @param page
* @param size * @param size
* @return * @return 访
* @throws Exception * @throws Exception
*/ */
@Override @Override
public List<Visitor> log(int page,int size) throws Exception { public List<Visitor> log(int page,int size) throws Exception {
// 使用PageHelper插件进行分页
PageHelper.startPage(page,size); PageHelper.startPage(page,size);
return visitorDao.findAll(); return visitorDao.findAll();
} }

@ -9,35 +9,47 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html class="x-admin-sm"> <html class="x-admin-sm">
<head> <head>
<!-- 设置页面字符编码为UTF-8 -->
<meta charset="UTF-8"> <meta charset="UTF-8">
<title></title> <title></title>
<!-- 设置页面渲染引擎为webkit -->
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<!-- 确保在IE浏览器中使用最新版本的渲染模式并优先使用Chrome框架 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 引入CSS文件设置页面样式 -->
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/font.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/font.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/xadmin.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/xadmin.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/bootstrap.css">
<!-- 引入JavaScript文件为页面添加交互功能 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.js"></script>
<script src="${pageContext.request.contextPath}/lib/layui/layui.js" charset="utf-8"></script> <script src="${pageContext.request.contextPath}/lib/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/xadmin.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/xadmin.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/bootstrap.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/layer/layer.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/layer/layer.js"></script>
<!-- 对于IE9以下版本的浏览器引入兼容性脚本 -->
<!--[if lt IE 9]> <!--[if lt IE 9]>
<script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script> <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
<script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script> <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script>
<![endif]--> <![endif]-->
<!-- 定义JavaScript函数用于改变每页显示的数据条数 -->
<script> <script>
function changePageSize() { function changePageSize() {
//获取下拉框的值 //获取下拉框的值
var pageSize = $("#changePageSize").val(); var pageSize = $("#changePageSize").val();
//向服务器发送请求,改变每页显示条数 //向服务器发送请求,改变每页显示条数并重置页码为1
location.href = "${pageContext.request.contextPath}/visitor/findAll?page=1&size="+ pageSize; location.href = "${pageContext.request.contextPath}/visitor/findAll?page=1&size="+ pageSize;
} }
$("#serarch_btn").click(function () { $("#serarch_btn").click(function () {
var keyword = $("#keyword").val(); var keyword = $("#keyword").val();
// 根据关键词搜索重置页码为1每页显示5条记录
location.href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5&keyword="+keyword; location.href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5&keyword="+keyword;
}); });
$("#refresh").click(function () { $("#refresh").click(function () {
$("#myform").reset(); $("#myform").reset();
// 重置表单并请求第一页的数据每页显示5条记录
location.href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5"; location.href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5";
}); });
</script> </script>
@ -53,27 +65,35 @@
<a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新"> <a class="layui-btn layui-btn-small" style="line-height:1.6em;margin-top:3px;float:right" onclick="location.reload()" title="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a> <i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
</div>--%> </div>--%>
<%-- 页面主体部分使用LayUI流体布局 --%>
<div class="layui-fluid"> <div class="layui-fluid">
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">
<div class="layui-col-md12"> <div class="layui-col-md12">
<div class="layui-card"> <div class="layui-card">
<%-- 表单区域,用于搜索 --%>
<div class="layui-card-body "> <div class="layui-card-body ">
<form id="myform" class="layui-form layui-col-space5"> <form id="myform" class="layui-form layui-col-space5">
<%-- 搜索框 --%>
<div class="layui-inline layui-show-xs-block"> <div class="layui-inline layui-show-xs-block">
<input class="layui-input" type="text" autocomplete="off" placeholder="请输入关键字" name="keyword" id="keyword" value="${param.keyword}"> <input class="layui-input" type="text" autocomplete="off" placeholder="请输入关键字" name="keyword" id="keyword" value="${param.keyword}">
</div> </div>
<%-- 搜索按钮 --%>
<div class="layui-inline layui-show-xs-block"> <div class="layui-inline layui-show-xs-block">
<button class="layui-btn" id="serarch_btn" lay-submit="" lay-filter="sreach"><i class="layui-icon">&#xe615;</i></button> <button class="layui-btn" id="serarch_btn" lay-submit="" lay-filter="sreach"><i class="layui-icon">&#xe615;</i></button>
</div> </div>
<%-- 重置按钮(回到第一页) --%>
<div class="layui-inline layui-show-xs-block x-right"> <div class="layui-inline layui-show-xs-block x-right">
<a class="layui-btn layui-btn-normal" href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5"><i class="layui-icon">&#xe669;</i></a> <a class="layui-btn layui-btn-normal" href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5"><i class="layui-icon">&#xe669;</i></a>
</div> </div>
</form> </form>
</div> </div>
<%-- 导出按钮和总数据条数显示 --%>
<xblock> <xblock>
<a onclick="exportInfo(${sessionScope.adminInfo.power})" class="layui-btn layui-btn-warm" href="javascript:;"><i class="layui-icon">&#xe67c;</i>导出</a> <a onclick="exportInfo(${sessionScope.adminInfo.power})" class="layui-btn layui-btn-warm" href="javascript:;"><i class="layui-icon">&#xe67c;</i>导出</a>
<span class="x-right" style="line-height:40px">共有数据:${pageInfo.total} 条</span> <span class="x-right" style="line-height:40px">共有数据:${pageInfo.total} 条</span>
</xblock> </xblock>
<%-- 数据表格区域 --%>
<div class="layui-card-body"> <div class="layui-card-body">
<table class="layui-table layui-form"> <table class="layui-table layui-form">
<thead> <thead>
@ -86,14 +106,17 @@
<th style="text-align: center">来访时间</th> <th style="text-align: center">来访时间</th>
<th style="text-align: center">离开时间</th> <th style="text-align: center">离开时间</th>
<th style="text-align: center">到访原因</th> <th style="text-align: center">到访原因</th>
<!-- 如果管理员权限大于2则显示操作列 -->
<c:if test="${sessionScope.adminInfo.power > 2}"> <c:if test="${sessionScope.adminInfo.power > 2}">
<th style="text-align: center">操作</th> <th style="text-align: center">操作</th>
</c:if> </c:if>
</thead> </thead>
<tbody> <tbody>
<%-- 使用JSP脚本循环遍历访客列表 --%>
<% <%
int j = 1; int j = 1; // 初始化计数器,用于行编号
%> %>
<!-- 遍历分页后的访客列表 -->
<c:forEach items="${pageInfo.list}" var="visitor"> <c:forEach items="${pageInfo.list}" var="visitor">
<tr id="light" style="text-align: center"> <tr id="light" style="text-align: center">
<td><%=j++%></td> <td><%=j++%></td>
@ -102,6 +125,7 @@
<td>${visitor.phone}</td> <td>${visitor.phone}</td>
<td>${visitor.place}</td> <td>${visitor.place}</td>
<td>${visitor.begin_date}</td> <td>${visitor.begin_date}</td>
<%-- 判断访客是否已离开 --%>
<c:if test="${visitor.end_date == null || visitor.end_date == ''}"> <c:if test="${visitor.end_date == null || visitor.end_date == ''}">
<td>尚未离开</td> <td>尚未离开</td>
</c:if> </c:if>
@ -109,6 +133,7 @@
<td>${visitor.end_date}</td> <td>${visitor.end_date}</td>
</c:if> </c:if>
<td>${visitor.visit_result}</td> <td>${visitor.visit_result}</td>
<!-- 如果管理员权限大于2则显示注销按钮 -->
<c:if test="${sessionScope.adminInfo.power > 2}"> <c:if test="${sessionScope.adminInfo.power > 2}">
<td class="td-manage"> <td class="td-manage">
<a title="注销访客" onclick="toUpdate('${visitor.id}');" href="javascript:;"> <a title="注销访客" onclick="toUpdate('${visitor.id}');" href="javascript:;">
@ -121,9 +146,11 @@
</tbody> </tbody>
</table> </table>
</div> </div>
<%-- 分页控制区域 --%>
<div class="pull-left"> <div class="pull-left">
<div class="form-group form-inline"> <div class="form-group form-inline">
共&nbsp;${pageInfo.pages}&nbsp;页&emsp;当前页:${pageInfo.pageNum}&nbsp;/&nbsp;${pageInfo.pages}&emsp; 每页 共&nbsp;${pageInfo.pages}&nbsp;页&emsp;当前页:${pageInfo.pageNum}&nbsp;/&nbsp;${pageInfo.pages}&emsp; 每页
<!-- 下拉菜单选择每页显示条数 -->
<select class="form-control" id="changePageSize" onchange="changePageSize()"> <select class="form-control" id="changePageSize" onchange="changePageSize()">
<option value="1">${pageInfo.size}</option> <option value="1">${pageInfo.size}</option>
<option value="5">5</option> <option value="5">5</option>
@ -133,6 +160,7 @@
</select> 条 </select> 条
</div> </div>
</div> </div>
<%-- 分页按钮逻辑控制 --%>
<c:choose> <c:choose>
<c:when test="${pageInfo.pages < 5}"> <c:when test="${pageInfo.pages < 5}">
<c:set var="begin" value="1"> <c:set var="begin" value="1">
@ -174,9 +202,11 @@
<a class="num" href="${pageContext.request.contextPath}/visitor/findAll?page=${i}&size=${pageInfo.pageSize}&keyword=${param.keyword}">${i}</a> <a class="num" href="${pageContext.request.contextPath}/visitor/findAll?page=${i}&size=${pageInfo.pageSize}&keyword=${param.keyword}">${i}</a>
</c:if> </c:if>
</c:forEach> </c:forEach>
<!-- 下一页链接,当不是最后一页时显示 -->
<c:if test="${pageInfo.pageNum < pageInfo.pages}"> <c:if test="${pageInfo.pageNum < pageInfo.pages}">
<a class="next" href="${pageContext.request.contextPath}/visitor/findAll?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}&keyword=${param.keyword}">下一页</a> <a class="next" href="${pageContext.request.contextPath}/visitor/findAll?page=${pageInfo.pageNum+1}&size=${pageInfo.pageSize}&keyword=${param.keyword}">下一页</a>
</c:if> </c:if>
<!-- 尾页链接 -->
<a class="next" href="${pageContext.request.contextPath}/visitor/findAll?page=${pageInfo.pages}&size=${pageInfo.pageSize}&keyword=${param.keyword}">尾页</a> <a class="next" href="${pageContext.request.contextPath}/visitor/findAll?page=${pageInfo.pages}&size=${pageInfo.pageSize}&keyword=${param.keyword}">尾页</a>
</div> </div>
</div> </div>
@ -189,23 +219,35 @@
<script> <script>
//导出Excel操作 //导出Excel操作
function exportInfo(power) { function exportInfo(power) {
// 检查当前用户的权限等级如果权限小于3则没有导出权限
if (power < 3) { if (power < 3) {
// 使用layer插件显示提示信息告知用户没有权限
layer.msg('对不起,您没有权限导出访客记录'); layer.msg('对不起,您没有权限导出访客记录');
return false; return false;
} }
// 弹出确认框询问用户是否确定要导出所有访客数据
layer.confirm('确定导出所有访客数据吗?',function (index) { layer.confirm('确定导出所有访客数据吗?',function (index) {
// 当用户点击确定时重定向到导出访客信息的URL
location.href="${pageContext.request.contextPath}/visitor/visitorInfo"; location.href="${pageContext.request.contextPath}/visitor/visitorInfo";
layer.close(index); layer.close(index); // 关闭确认框
}); });
} }
// 注销访客记录
function toUpdate(id) { function toUpdate(id) {
// 使用layer组件的confirm方法弹出确认框询问用户是否确定要注销此访客记录
layer.confirm('确定要注销此访客记录吗',function (index) { layer.confirm('确定要注销此访客记录吗',function (index) {
// 用户点击确定后关闭确认框
layer.close(index); layer.close(index);
// 发送异步请求到服务器端更新访客状态
$.get("${pageContext.request.contextPath}/visitor/updateStatus",{"id":id},function (data) { $.get("${pageContext.request.contextPath}/visitor/updateStatus",{"id":id},function (data) {
// 根据服务器返回的数据判断操作是否成功
if (data) { if (data) {
// 成功时显示成功消息并在2秒后刷新页面
layer.msg('注销成功'); layer.msg('注销成功');
setTimeout(function () {window.location.href='${pageContext.request.contextPath}/visitor/findAll';},2000); setTimeout(function () {window.location.href='${pageContext.request.contextPath}/visitor/findAll';},2000);
}else { }else {
// 失败时显示错误消息并在2秒后刷新页面
layer.msg('系统繁忙,请联系系统管理员'); layer.msg('系统繁忙,请联系系统管理员');
setTimeout(function () {window.location.href='${pageContext.request.contextPath}/visitor/findAll';},2000); setTimeout(function () {window.location.href='${pageContext.request.contextPath}/visitor/findAll';},2000);
} }

@ -9,38 +9,56 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html> <html>
<head> <head>
<%-- 设置页面的字符编码为UTF-8 --%>
<meta charset="utf-8"> <meta charset="utf-8">
<%-- 设置页面渲染引擎为webkit --%>
<meta name="renderer" content="webkit"> <meta name="renderer" content="webkit">
<!-- 确保在IE浏览器中使用最新版本的渲染模式并优先使用Chrome框架 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 设置响应式布局,使页面适应不同尺寸的设备 -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<!-- 页面标题 -->
<title>Title</title> <title>Title</title>
<!-- 引入layui框架的CSS样式文件 -->
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui/css/layui.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui/css/layui.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui/css/modules/layer/default/layer.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/lib/layui/css/modules/layer/default/layer.css">
<!-- 引入jQuery库用于DOM操作和事件处理 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.js"></script>
</head> </head>
<body> <body>
<!-- 使用layui框架定义一个字段集作为访客时间线的标题部分 -->
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;"> <fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>访客时间线</legend> <legend>访客时间线</legend>
</fieldset> </fieldset>
<!-- 定义时间线组件 -->
<ul class="layui-timeline"> <ul class="layui-timeline">
<!-- 单个时间线项,代表当前的时间点 -->
<li class="layui-timeline-item"> <li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i> <i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text"> <div class="layui-timeline-content layui-text">
<!-- 动态显示当前日期 -->
<h3 class="layui-timeline-title" id="mytime"></h3> <h3 class="layui-timeline-title" id="mytime"></h3>
<!-- 显示访客日志统计信息 -->
<p> <p>
访客日志共计:&nbsp;${pageInfo.total}&nbsp;条&emsp;当前显示:${pageInfo.size}&nbsp;条&emsp;&emsp; 访客日志共计:&nbsp;${pageInfo.total}&nbsp;条&emsp;当前显示:${pageInfo.size}&nbsp;条&emsp;&emsp;
<!-- 如果不是第一页,则显示上一页链接 -->
<c:if test="${pageInfo.pageNum > 1}"> <c:if test="${pageInfo.pageNum > 1}">
<a href="${pageContext.request.contextPath}/visitor/log?page=${pageInfo.pageNum - 1}&size=10">上一页</a>&emsp;&emsp; <a href="${pageContext.request.contextPath}/visitor/log?page=${pageInfo.pageNum - 1}&size=10">上一页</a>&emsp;&emsp;
</c:if> </c:if>
<!-- 如果不是最后一页,则显示下一页链接 -->
<c:if test="${pageInfo.pageNum < pageInfo.pages}"> <c:if test="${pageInfo.pageNum < pageInfo.pages}">
<a href="${pageContext.request.contextPath}/visitor/log?page=${pageInfo.pageNum + 1}&size=10">下一页</a> <a href="${pageContext.request.contextPath}/visitor/log?page=${pageInfo.pageNum + 1}&size=10">下一页</a>
</c:if> </c:if>
</p> </p>
<!-- 遍历分页后的访客日志列表 -->
<ul> <ul>
<c:forEach items="${pageInfo.list}" var="log"> <c:forEach items="${pageInfo.list}" var="log">
<!-- 判断是否有离开时间,如果无则显示“尚未离开” -->
<c:if test="${log.end_date == ''}"> <c:if test="${log.end_date == ''}">
<li>【${log.name}】于&nbsp;${log.begin_date}&nbsp;访问了${log.place},事因${log.visit_result},目前尚未离开</li> <li>【${log.name}】于&nbsp;${log.begin_date}&nbsp;访问了${log.place},事因${log.visit_result},目前尚未离开</li>
</c:if> </c:if>
<!-- 如果有离开时间,则正常显示来访和离开时间 -->
<c:if test="${log.end_date != ''}"> <c:if test="${log.end_date != ''}">
<li>【${log.name}】于&nbsp;${log.begin_date}&nbsp;访问了${log.place},事因${log.visit_result},并与${log.end_date}离开</li> <li>【${log.name}】于&nbsp;${log.begin_date}&nbsp;访问了${log.place},事因${log.visit_result},并与${log.end_date}离开</li>
</c:if> </c:if>
@ -48,6 +66,7 @@
</ul> </ul>
</div> </div>
</li> </li>
<!-- 另一个时间线项,表示日志开启的时间点 -->
<li class="layui-timeline-item"> <li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i> <i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text"> <div class="layui-timeline-content layui-text">
@ -55,14 +74,19 @@
</div> </div>
</li> </li>
</ul> </ul>
<!-- JavaScript脚本用于动态更新页面上的当前时间 -->
<script> <script>
// 定义showTime函数用于获取并显示当前日期
function showTime(){ function showTime(){
var nowtime =new Date(); var nowtime =new Date(); // 获取当前时间
var year=nowtime.getFullYear(); var year=nowtime.getFullYear(); // 获取年份
var month=nowtime.getMonth()+1; var month=nowtime.getMonth()+1; // 获取月份注意月份从0开始
var date=nowtime.getDate(); var date=nowtime.getDate(); // 获取日
// 将日期格式化后设置到页面中的元素中
document.getElementById("mytime").innerText=year+"年"+month+"月"+date+"日"; document.getElementById("mytime").innerText=year+"年"+month+"月"+date+"日";
} }
// 每隔一分钟调用一次showTime函数更新时间
setInterval("showTime()",1000*60); setInterval("showTime()",1000*60);
</script> </script>

@ -6,14 +6,34 @@
To change this template use File | Settings | File Templates. To change this template use File | Settings | File Templates.
--%> --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!--
指令标签,用于设置页面的内容类型、字符编码和编程语言。
contentType: 设置响应的MIME类型和字符编码为UTF-8。
language: 声明页面使用的编程语言是Java。
-->
<html> <html>
<head> <head>
<!--
定义页面标题,当用户访问此页面时,浏览器标签页会显示“登记成功”。
-->
<title>登记成功</title> <title>登记成功</title>
</head> </head>
<body> <body>
<!--
使用HTML的<h4>标签显示一条消息给用户,告知他们来访登记已经成功。
样式属性text-align: center; 使文本居中显示。
-->
<h4 style="text-align: center;">恭喜您,来访登记成功!</h4> <h4 style="text-align: center;">恭喜您,来访登记成功!</h4>
<!--
HTML换行标签用于在“恭喜您来访登记成功”消息后添加一个空行以增加视觉上的间隔。
-->
<br> <br>
<!--
创建一个超链接,允许用户点击以执行注销登记操作。
href属性指定了链接的目标URL其中包含了注销登记的操作路径和当前用户的ID作为参数。
样式属性text-align: center; 使链接文本居中显示。
-->
<a href="${pageContext.request.contextPath}/visitor/login_out?id=${id}" style="text-align: center;">注销登记</a> <a href="${pageContext.request.contextPath}/visitor/login_out?id=${id}" style="text-align: center;">注销登记</a>
</body> </body>
</html> </html>

Loading…
Cancel
Save