使用的技术栈:Spring+SpringMVC+mybatis+Mysql+layui+Maven
Maven 项目结构。项目配置项为:
服务器:apache-tomcat-9.0.0.M26 (必须 9 以上)
数据库:MySQL
编辑器:IntelliJ IDEA
--Lay ui 的官网参考文档:Layui - 经典开源模块化前端 UI 组件库
核心代码实现:
package com.jiudian.controller.admin; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpSession; /** * 负责跳转后台管理页面: */ @org.springframework.stereotype.Controller /** * @author Lenovo */ @RequestMapping("/admin") public class SystemController { /** * 跳转登陆页面: */ @RequestMapping("/login.html") public String login(){ return "admin/login"; } /** * 跳转到登陆成功页面(后台管理首页): */ @RequestMapping("/home.html") public String home(){ return "admin/home"; } /** * 退出登录,放到用户控制器因为有无刷新: */ @RequestMapping("/loginOut.html") public String loginOut(HttpSession session) { //清空session: session.invalidate(); //重定向到登陆页面: return "redirect:/admin/login.html"; } /** *进入部门管理页面 */ @RequestMapping("/toDeptManager.html") public String toDeptManager(){ return "admin/dept/deptManager"; } /** * 进入角色管理: */ @RequestMapping("/toRoleManager") public String toRoleManager(){ return "admin/role/roleManager"; } /** *进入用户管理: * @return */ @RequestMapping("/toUserManager") public String toUserManager(){ return "admin/user/userManager"; } /** * 进入房型管理页面: * @return */ @RequestMapping("/toRoomManager") public String toRoomManager(){ return "admin/room/roomManager"; } /** * 进入楼层管理: * @return */ @RequestMapping("/toFloorManager") public String toFloorManager(){ return "admin/floor/floorManager"; } /** * 进入房间管理页面: * @return */ @RequestMapping("/toRoomsManager") public String toRoomsManager() { return "admin/rooms/roomsManager"; } }
使用前端layui框架搭建后台登录页面:
<div id="container">
<div></div>
<div class="admin-login-background">
<div class="admin-header">
<span>酒店管理系统 </span>
</div>
<form class="layui-form" action="">
<div>
<i class="layui-icon layui-icon-username admin-icon"></i>
<input type="text" name="username" placeholder="请输入用户名" autocomplete="off" class="layui-input admin-input admin-input-username">
</div>
<div>
</div>
<div>
<i class="layui-icon layui-icon-password admin-icon"></i>
<input type="password" name="password" placeholder="请输入密码" autocomplete="off" class="layui-input admin-input">
</div>
<!--按钮加上lay-filter过滤器才可以绑定!!! -->
<button class="layui-btn admin-button" lay-submit="" lay-filter="login">登 陆</button>
</form>
</div>
</div>
实现效果如下:
登录成功主菜单页面的核心代码:
package com.jiudian.controller.admin;
import com.alibaba.fastjson.JSON;
import com.jiudian.dao.SysMenuMapper;
import com.jiudian.entiy.SysMenu;
import com.jiudian.utils.MenuNode;
import com.jiudian.utils.TreeUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.LinkedTransferQueue;
/**
* @author Lenovo
*/
//全部(返回JSON数据)无刷新:restConller=@Controller+++@ResponseBody:
//不用每个方法都加ResponseBody:
@RestController
@RequestMapping("/admin/menu")
public class SysMenuController {
/**
* 注入SysMenuMapper
*/
@Resource
private SysMenuMapper sysMenuMapper;
/**
* 加载首页左侧菜单的导航
* @return
*/
@RequestMapping("/loadSysMenuList")
public String loadSysMenuList(){
/**
* 调用查询所有菜单列表的方法
*/
List<SysMenu> menuList = sysMenuMapper.findMenuList();
//创建集合接收menuNode保存菜单逻辑关系:
List<MenuNode> menuNodeList= new ArrayList<MenuNode>();
//创建Map集合保存MenuInfo信息:
Map<String,Object> menuInfo = new LinkedHashMap<String,Object>();
//创建Map集合,保存HomeInfo信息(需要与模板保持一致):
Map<String,Object> homeInfo = new LinkedHashMap<String,Object>();
//创建Map集合,保存LogoInfo信息(需要与模板保持一致):
Map<String,Object> logoInfo = new LinkedHashMap<String,Object>();
/**
* 循环遍历菜单列表,目的是创建菜单之间的层级关系(逻辑关系);
*/
for (SysMenu sys : menuList) {
//创建节点对象:
MenuNode menuNode = new MenuNode();
//打开链接地址
menuNode.setHref(sys.getHref());
//菜单头标样式
menuNode.setIcon(sys.getIcon());
//菜单编号
menuNode.setId(sys.getId());
//所属的父级菜单
menuNode.setPid(sys.getPid());
//是否展开(0-否 1-是)
menuNode.setSpread(sys.getSpread());
//打开方式:是否展开
menuNode.setTarget(sys.getTarget());
//菜单名称
menuNode.setTitle(sys.getTitle());
//将对象添加到集合:
menuNodeList.add(menuNode);
}
//保存HomeInfo信息:
homeInfo.put("title","首页");
//跳转到子菜单中:
homeInfo.put("href","");
//保存LoginInfo信息:
//logo标题:
logoInfo.put("title","酒店管理系统");
//包含图片:
logoInfo.put("image","/statics/layui/images/logo1.png");
//跳转到首页:
logoInfo.put("href","/admin/home.html");
//将菜单集合添加到MenuInfo集合中:
//pid就是父菜单:
menuInfo.put("menuInfo", TreeUtil.toTree(menuNodeList,0));
menuInfo.put("homeInfo",homeInfo);
menuInfo.put("logoInfo",logoInfo);
return JSON.toJSONString(menuInfo);
}
}
采用layui前端框架搭建后台页面核心代码:
<script>
layui.use(['jquery', 'layer', 'miniAdmin','miniTongji'], function () {
let $ = layui.jquery,
layer = layui.layer,
miniAdmin = layui.miniAdmin,
miniTongji = layui.miniTongji;
let options = {
iniUrl: "${pageContext.request.contextPath}/admin/menu/loadSysMenuList", // 初始化接口:已经定义过接口不再使用json文件了。
clearUrl: "${pageContext.request.contextPath}/statics/layui/api/clear.json", // 缓存清理接口
urlHashLocation: true, // 是否打开hash定位
bgColorDefault: false, // 主题默认配置
multiModule: true, // 是否开启多模块
menuChildOpen: false, // 是否默认展开菜单
loadingTime: 0, // 初始化加载时间
pageAnim: true, // iframe窗口动画
maxTabNum: 20, // 最大的tab打开数量
};
miniAdmin.render(options);
// 百度统计代码,只统计指定域名
miniTongji.render({
specific: true,
domains: [
'99php.cn',
'layuimini.99php.cn',
'layuimini-onepage.99php.cn',
],
});
$('.login-out').on("click", function () {
//在layui官网文档配置是否退出登录:
layer.confirm('确定要退出系统?', {icon: 3, title:'提示'}, function(index){
//do something
//如果退出发送请求:
location.href="/admin/loginOut.html"
layer.close(index);
});
});
});
</script>
页面实现效果:
总结:适合初学SSM的小伙伴们的一个上手项目实战,有助于对SSM框架更进一步的熟悉了解,后期可能推出基于Springboot实现JavaWeb酒店管理系统,有兴趣的可以了解一下,麻烦点赞关注一下,需要源码和数据库的私信up主。