branch_liu
LiuChang 3 months ago
parent 5e49b5cfdf
commit 563386b450

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

@ -15,39 +15,40 @@ import java.util.List;
* @Date: 2020/2/18 16:27
* @Author: PeiChen
*/
// 声明这是一个数据访问对象接口
@Repository
public interface VisitorDao { //liih
public interface VisitorDao {
/**
* 访
* @param visitor
* @throws Exception
* @param visitor 访访
* @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})")
void add(Visitor visitor) throws Exception;
/**
* 访
* @return
* @throws Exception
* @return 访
* @throws Exception
*/
@Select("select * from visitors order by begin_date desc")
List<Visitor> findAll() throws Exception;
/**
* 访访
* @param id
* @param end_date
* @throws Exception
* @param id 访
* @param end_date 访
* @throws Exception
*/
@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;
/**
* 访
* @param keyword
* @return
* @throws Exception
* @param keyword
* @return 访
* @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 ")
List<Visitor> search(@Param(value = "keyword") String keyword) throws Exception;

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

@ -6,23 +6,61 @@ import java.io.InputStream;
import java.util.List;
/**
* Description:
* Description:访访
*
* @Date: 2020/2/18 18:27
* @Author: PeiChen
*/
public interface VisitorService {
/**
* 访
* @param 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;
/**
*
* @param page
* @param size
* @param keyword
* @return 访
* @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;
/**
* 访
* @return 访
* @throws Exception
*/
InputStream getInputStream() throws Exception;
/**
* 访
* @param page
* @param size
* @return 访
* @throws Exception
*/
List<Visitor> log(int page,int size) throws Exception;
}

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

@ -9,35 +9,47 @@
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html class="x-admin-sm">
<head>
<!-- 设置页面字符编码为UTF-8 -->
<meta charset="UTF-8">
<title></title>
<!-- 设置页面渲染引擎为webkit -->
<meta name="renderer" content="webkit">
<!-- 确保在IE浏览器中使用最新版本的渲染模式并优先使用Chrome框架 -->
<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/xadmin.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 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/bootstrap.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/layer/layer.js"></script>
<!-- 对于IE9以下版本的浏览器引入兼容性脚本 -->
<!--[if lt IE 9]>
<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>
<![endif]-->
<!-- 定义JavaScript函数用于改变每页显示的数据条数 -->
<script>
function changePageSize() {
//获取下拉框的值
var pageSize = $("#changePageSize").val();
//向服务器发送请求,改变每页显示条数
//向服务器发送请求,改变每页显示条数并重置页码为1
location.href = "${pageContext.request.contextPath}/visitor/findAll?page=1&size="+ pageSize;
}
$("#serarch_btn").click(function () {
var keyword = $("#keyword").val();
// 根据关键词搜索重置页码为1每页显示5条记录
location.href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5&keyword="+keyword;
});
$("#refresh").click(function () {
$("#myform").reset();
// 重置表单并请求第一页的数据每页显示5条记录
location.href="${pageContext.request.contextPath}/visitor/findAll?page=1&size=5";
});
</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="刷新">
<i class="layui-icon layui-icon-refresh" style="line-height:30px"></i></a>
</div>--%>
<%-- 页面主体部分使用LayUI流体布局 --%>
<div class="layui-fluid">
<div class="layui-row layui-col-space15">
<div class="layui-col-md12">
<div class="layui-card">
<%-- 表单区域,用于搜索 --%>
<div class="layui-card-body ">
<form id="myform" class="layui-form layui-col-space5">
<%-- 搜索框 --%>
<div class="layui-inline layui-show-xs-block">
<input class="layui-input" type="text" autocomplete="off" placeholder="请输入关键字" name="keyword" id="keyword" value="${param.keyword}">
</div>
<%-- 搜索按钮 --%>
<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>
</div>
<%-- 重置按钮(回到第一页) --%>
<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>
</div>
</form>
</div>
<%-- 导出按钮和总数据条数显示 --%>
<xblock>
<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>
</xblock>
<%-- 数据表格区域 --%>
<div class="layui-card-body">
<table class="layui-table layui-form">
<thead>
@ -86,14 +106,17 @@
<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}">
<th style="text-align: center">操作</th>
</c:if>
</thead>
<tbody>
<%-- 使用JSP脚本循环遍历访客列表 --%>
<%
int j = 1;
int j = 1; // 初始化计数器,用于行编号
%>
<!-- 遍历分页后的访客列表 -->
<c:forEach items="${pageInfo.list}" var="visitor">
<tr id="light" style="text-align: center">
<td><%=j++%></td>
@ -102,6 +125,7 @@
<td>${visitor.phone}</td>
<td>${visitor.place}</td>
<td>${visitor.begin_date}</td>
<%-- 判断访客是否已离开 --%>
<c:if test="${visitor.end_date == null || visitor.end_date == ''}">
<td>尚未离开</td>
</c:if>
@ -109,6 +133,7 @@
<td>${visitor.end_date}</td>
</c:if>
<td>${visitor.visit_result}</td>
<!-- 如果管理员权限大于2则显示注销按钮 -->
<c:if test="${sessionScope.adminInfo.power > 2}">
<td class="td-manage">
<a title="注销访客" onclick="toUpdate('${visitor.id}');" href="javascript:;">
@ -121,9 +146,11 @@
</tbody>
</table>
</div>
<%-- 分页控制区域 --%>
<div class="pull-left">
<div class="form-group form-inline">
共&nbsp;${pageInfo.pages}&nbsp;页&emsp;当前页:${pageInfo.pageNum}&nbsp;/&nbsp;${pageInfo.pages}&emsp; 每页
<!-- 下拉菜单选择每页显示条数 -->
<select class="form-control" id="changePageSize" onchange="changePageSize()">
<option value="1">${pageInfo.size}</option>
<option value="5">5</option>
@ -133,6 +160,7 @@
</select> 条
</div>
</div>
<%-- 分页按钮逻辑控制 --%>
<c:choose>
<c:when test="${pageInfo.pages < 5}">
<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>
</c:if>
</c:forEach>
<!-- 下一页链接,当不是最后一页时显示 -->
<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>
</c:if>
<!-- 尾页链接 -->
<a class="next" href="${pageContext.request.contextPath}/visitor/findAll?page=${pageInfo.pages}&size=${pageInfo.pageSize}&keyword=${param.keyword}">尾页</a>
</div>
</div>
@ -189,23 +219,35 @@
<script>
//导出Excel操作
function exportInfo(power) {
// 检查当前用户的权限等级如果权限小于3则没有导出权限
if (power < 3) {
// 使用layer插件显示提示信息告知用户没有权限
layer.msg('对不起,您没有权限导出访客记录');
return false;
}
// 弹出确认框询问用户是否确定要导出所有访客数据
layer.confirm('确定导出所有访客数据吗?',function (index) {
// 当用户点击确定时重定向到导出访客信息的URL
location.href="${pageContext.request.contextPath}/visitor/visitorInfo";
layer.close(index);
layer.close(index); // 关闭确认框
});
}
// 注销访客记录
function toUpdate(id) {
// 使用layer组件的confirm方法弹出确认框询问用户是否确定要注销此访客记录
layer.confirm('确定要注销此访客记录吗',function (index) {
// 用户点击确定后关闭确认框
layer.close(index);
// 发送异步请求到服务器端更新访客状态
$.get("${pageContext.request.contextPath}/visitor/updateStatus",{"id":id},function (data) {
// 根据服务器返回的数据判断操作是否成功
if (data) {
// 成功时显示成功消息并在2秒后刷新页面
layer.msg('注销成功');
setTimeout(function () {window.location.href='${pageContext.request.contextPath}/visitor/findAll';},2000);
}else {
// 失败时显示错误消息并在2秒后刷新页面
layer.msg('系统繁忙,请联系系统管理员');
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" %>
<html>
<head>
<%-- 设置页面的字符编码为UTF-8 --%>
<meta charset="utf-8">
<%-- 设置页面渲染引擎为webkit --%>
<meta name="renderer" content="webkit">
<!-- 确保在IE浏览器中使用最新版本的渲染模式并优先使用Chrome框架 -->
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<!-- 设置响应式布局,使页面适应不同尺寸的设备 -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<!-- 页面标题 -->
<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/modules/layer/default/layer.css">
<!-- 引入jQuery库用于DOM操作和事件处理 -->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.1.1.js"></script>
</head>
<body>
<!-- 使用layui框架定义一个字段集作为访客时间线的标题部分 -->
<fieldset class="layui-elem-field layui-field-title" style="margin-top: 30px;">
<legend>访客时间线</legend>
</fieldset>
<!-- 定义时间线组件 -->
<ul class="layui-timeline">
<!-- 单个时间线项,代表当前的时间点 -->
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
<!-- 动态显示当前日期 -->
<h3 class="layui-timeline-title" id="mytime"></h3>
<!-- 显示访客日志统计信息 -->
<p>
访客日志共计:&nbsp;${pageInfo.total}&nbsp;条&emsp;当前显示:${pageInfo.size}&nbsp;条&emsp;&emsp;
<!-- 如果不是第一页,则显示上一页链接 -->
<c:if test="${pageInfo.pageNum > 1}">
<a href="${pageContext.request.contextPath}/visitor/log?page=${pageInfo.pageNum - 1}&size=10">上一页</a>&emsp;&emsp;
</c:if>
<!-- 如果不是最后一页,则显示下一页链接 -->
<c:if test="${pageInfo.pageNum < pageInfo.pages}">
<a href="${pageContext.request.contextPath}/visitor/log?page=${pageInfo.pageNum + 1}&size=10">下一页</a>
</c:if>
</p>
<!-- 遍历分页后的访客日志列表 -->
<ul>
<c:forEach items="${pageInfo.list}" var="log">
<!-- 判断是否有离开时间,如果无则显示“尚未离开” -->
<c:if test="${log.end_date == ''}">
<li>【${log.name}】于&nbsp;${log.begin_date}&nbsp;访问了${log.place},事因${log.visit_result},目前尚未离开</li>
</c:if>
<!-- 如果有离开时间,则正常显示来访和离开时间 -->
<c:if test="${log.end_date != ''}">
<li>【${log.name}】于&nbsp;${log.begin_date}&nbsp;访问了${log.place},事因${log.visit_result},并与${log.end_date}离开</li>
</c:if>
@ -48,6 +66,7 @@
</ul>
</div>
</li>
<!-- 另一个时间线项,表示日志开启的时间点 -->
<li class="layui-timeline-item">
<i class="layui-icon layui-timeline-axis"></i>
<div class="layui-timeline-content layui-text">
@ -55,14 +74,19 @@
</div>
</li>
</ul>
<!-- JavaScript脚本用于动态更新页面上的当前时间 -->
<script>
// 定义showTime函数用于获取并显示当前日期
function showTime(){
var nowtime =new Date();
var year=nowtime.getFullYear();
var month=nowtime.getMonth()+1;
var date=nowtime.getDate();
var nowtime =new Date(); // 获取当前时间
var year=nowtime.getFullYear(); // 获取年份
var month=nowtime.getMonth()+1; // 获取月份注意月份从0开始
var date=nowtime.getDate(); // 获取日
// 将日期格式化后设置到页面中的元素中
document.getElementById("mytime").innerText=year+"年"+month+"月"+date+"日";
}
// 每隔一分钟调用一次showTime函数更新时间
setInterval("showTime()",1000*60);
</script>

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

Loading…
Cancel
Save