bootstrap布局(三)—后台布局实例(根据权限显示不同菜单)

42 篇文章 7 订阅
17 篇文章 0 订阅

一 效果如下,不同用户登陆看到的菜单不同。本文是在bootstrap布局(二)的基础上增加的功能。

管理员用户id是4, 地址栏输入:localhost:8090/sysmenu/4

普通用户id是6,地址栏输入:localhost:8090/sysmenu/6

平台搭建如下:

二 数据库设计

1. t_menu设计如下:

2.t_role_menu设计如下:

3.t_role_user设计如下:

4.t_user设计如下:

三 html 代码

1.mainPage.html 主框架页面,「核心功能」:单击左侧菜单,右侧显示相应的页面,并激活左侧菜单。

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title>Dashboard Template for Bootstrap</title>
    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
    <script src="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
    <nav class="navbar navbar-inverse" role="navigation">
        <div class="container-fluid">
            <div class="collapse navbar-collapse" id="example-navbar-collapse">
                <ul class="nav navbar-nav">
                    <li class="active"><a class="icon-bar" href="#">mylastday系统</a>
                    </li>
                    <li><a href="#">菜单1</a>
                    </li>
                    <li><a href="#">菜单2</a>
                    </li>
                    <li><a href="#">菜单3</a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li><a>欢迎您,admin</a>
                    </li>
                    <li><a href="#">安全退出</a>
                    </li>
                </ul>
            </div>
        </div>
    </nav>
    <div class="container-fluid">
        <div class="row">
            <div class="col-sm-2" id="menulist">
                <a href="#"  class="list-group-item active" th:onclick="loadPage('firstPage')"><span>首页</span></a>
                <a href="#"  class="list-group-item"  th:each="firstMenu:${session.menuList}" th:onclick="loadPage([[${firstMenu.href}]])">
                    <span th:text="${firstMenu.name}">菜单</span>
                </a>
            </div>
            <div class="col-sm-10" id="mainbody" >
                <h1>欢迎使用Web系统</h1>
            </div>
        </div>
    </div>

    <footer class="footer navbar-fixed-bottom ">
        <div class="container">
            <p class="text-center">
                2019 &copy; mylastday.
            </p>
        </div>
    </footer>


</body>
<script>
     //激活菜单函数
     $(document).ready(function () {
            $('#menulist> a').click(function (e) {

                $('#menulist> a').removeClass('active');
                $(this).addClass('active');
            });
        });
      //单击左侧菜单,右边显示相应的页面
       function loadPage(url){
		$.get(url,function(data,status){
			$("#mainbody").html(data);
		});

		}
</script>
</html>

2.firstPage.html  登陆进去后的第一个页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>欢迎来到首页</h1>
</body>
</html>

四 java代码

1.mainController.java

@Controller
public class MainController {


    @Autowired
    MenuService menuService;

    @Autowired
    UserMapper userMapper;

    @GetMapping("/sysmenu/{userId}")
    public String  sysmenu(Model model, HttpSession session, @PathVariable("userId") Integer userId){
        User user=userMapper.getUserById(userId);
        List<Menu> menuList=menuService.getMenusByHrId(userId);
        model.addAttribute("userlogin",user);
        session.setAttribute("menuList",menuList);
        return "redirect:/index";
    }

    @RequestMapping("firstPage")
    public String getfirstPage(){
        return "admin/firstPage";
    }


    @GetMapping("index")
    public String index()
    {
        return "admin/mainPage";
    }
}

2.UserController.java 和RoleController.java,MenuController.java类似,本处只举例User说明。

@Controller
public class UserController {

    @Autowired
    UserMapper userMapper;
    /**
     * 跳转到用户列表页面
     *
     * @param model 用户设值返回页面
     * @return
     */

    @GetMapping("users")
    public String getAllUsers(Model model)
    {
        List<User> userList=userMapper.getALLUsers();
        model.addAttribute("userList", userList);

        /** 往前端 Thymeleaf 模板引擎时,开头不要加 "/" ,因为它默认配置的前缀就是:
         * spring.thymeleaf.prefix=classpath:/templates/
         */
        System.out.println("findAllUsers");
        return "user/userList";
    }
    \\.....其他代码未粘贴,可参考之前的增删改查
}

3.UserMapper.java和RoleMapper.java类似,本处只举例说明。

@Mapper
public interface UserMapper {
    @Select("select * from t_user where id = #{id}")
    public User getUserById(Integer id);


    @Options(useGeneratedKeys = true,keyProperty = "id") //加入自增主键
    @Insert("insert into t_user(username,password,employeeNum,departmentId) values(#{username},#{password},#{employeeNum},#{departmentId})")
    public int insertUser(User user);

    @Delete("delete from t_user where id=#{id}")
    public int deleteById(Integer id);

    @Update("update t_user set username=#{username},password=#{password} where id=#{id}")
    public int updateUser(User user);

    @Select("select * from t_user")
    public List<User> getALLUsers();

    @Select("select u.*,r.rolename from t_user u left join t_role_user ru on u.id=ru.user_id left join t_role r on ru.role_id=r.id where username=#{username}")
    public List<Role> findByUserName(String username);
}

4.MenuMapper.java,本例重点使用

@Mapper
public interface MenuMapper {

    @Select("select t_menu.* from t_role_menu, t_menu,t_role_user where t_role_menu.menu_Id = t_menu.id and t_role_user.role_Id=t_role_menu.role_Id and t_role_user.user_Id=#{userId}")
    public List<Menu> listMenuByUserId(Integer userId);

    @Select("select * from t_menu")
    public List<Menu>  getAllMenus();
}

5.MenuService.java 为了简化,本例只有menu创建了serivce

@Service
public class MenuService {

    @Autowired
    MenuMapper menuMapper;
    public List<Menu> getMenusByHrId(Integer userId){
        return menuMapper.listMenuByUserId(userId);
    }

    public List<Menu>  getAllMenus(){return menuMapper.getAllMenus();}
}

5.User.java

public class User {
    private Integer id;
    private String  username;
    private String password;
    private String employeeNum;
    private Integer departmentId;
    //get,set函数省略
}

 五.数据库配置,本例数据库名称是 mybatis 

spring:
  datasource:
    username: root
    password: 12345678
    url: jdbc:mysql://localhost:3306/mybatis?serverTimezone=GMT%2B8
    driver-class-name: com.mysql.cj.jdbc.Driver
server:
  port: 8090

mybatis:
  configuration:
    #开启驼峰命名转换
    map-underscore-to-camel-case: true

六 重点

1. 菜单加载,loadPage的参数写法[[${firstMenu.href}]],另外<a>不能给href设置真实地址。

<div class="col-sm-2" id="menulist">
                <a href="#"  class="list-group-item active" th:οnclick="loadPage('firstPage')"><span>首页</span></a>
                <a href="#"  class="list-group-item"  th:each="firstMenu:${session.menuList}" th:οnclick="loadPage([[${firstMenu.href}]])">
                    <span th:text="${firstMenu.name}">菜单</span>
                </a>
            </div>

2. 菜单激活

     $(document).ready(function () {
            $('#menulist> a').click(function (e) {

                $('#menulist> a').removeClass('active');
                $(this).addClass('active');
            });
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值