• Layui之用户管理实例


    录目

    一、前期准备

    二、后端代码

    三、前端代码


    一、前期准备

            前言:

    上一次我们分享了layui的动态添加选项卡,这次要分享的内容是基于上一次的动态选项卡,在选项卡中使用layui完成用户管理功能。

            目的效果展示:

            数据库准备:

     

            LayUi官网找到对应的代码源 

     以及我们目的效果图还需要搜索框的组件:

    我们将官网的前端代码以及js代码copy至我们的jsp页面中即可开始进一步编写后端代码,再我们要根据目的效果图进行修改


    二、后端代码

    UserDao:

    1. package com.zking.dao;
    2. import java.sql.SQLException;
    3. import java.util.List;
    4. import java.util.Map;
    5. import com.zking.entity.User;
    6. import com.zking.util.BaseDao;
    7. import com.zking.util.PageBean;
    8. import com.zking.util.StringUtils;
    9. public class UserDao extends BaseDao{
    10. public User login(User user) throws Exception {
    11. String sql = "select * from t_oa_user where loginName = '"+user.getLoginName()+"' and pwd = '"+user.getPwd()+"'";
    12. List users = super.executeQuery(sql, User.class,null);
    13. return users == null || users.size() == 0 ? null : users.get(0);
    14. }
    15. // 查询用户信息以及对应角色,角色通过case when得出
    16. public List> list(User user,PageBean pageBean) throws Exception{
    17. String sql = "SELECT * \r\n" +
    18. ",( CASE rid \r\n" +
    19. "WHEN 1 THEN '管理员' \r\n" +
    20. "WHEN 2 THEN '发起者' \r\n" +
    21. "WHEN 3 THEN '审批者' \r\n" +
    22. "WHEN 4 THEN '参与者' \r\n" +
    23. "WHEN 5 THEN '会议室管理员' \r\n" +
    24. "ELSE '其他' END ) roleName \r\n" +
    25. "FROM \r\n" +
    26. "t_oa_user where 1=1";
    27. String name = user.getName();
    28. if(StringUtils.isNotBlank(name)) {
    29. sql += " and name like '%"+name+"%'";
    30. }
    31. return super.executeQuery(sql, pageBean);
    32. }
    33. public int add(User user) throws Exception {
    34. String sql = "insert into t_oa_user(name,loginName,pwd) values(?,?,?)";
    35. return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd"});
    36. }
    37. public int del(User user) throws Exception {
    38. String sql = "delete from t_oa_user where id = ?";
    39. return super.executeUpdate(sql, user, new String[] {"id"});
    40. }
    41. public int edit(User user) throws Exception {
    42. String sql = "update t_oa_user set where name=?,loginName=?,pwd=? where id=?";
    43. return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","id"});
    44. }
    45. }

    在这里建议大家可以使用Junit进行测试在这丽小编就不展示了!

     UserACtion:
     

    1. package com.zking.web;
    2. import java.util.List;
    3. import java.util.Map;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. import com.zking.dao.UserDao;
    7. import com.zking.entity.User;
    8. import com.zking.framework.ActionSupport;
    9. import com.zking.framework.ModelDriver;
    10. import com.zking.util.PageBean;
    11. import com.zking.util.R;
    12. import com.zking.util.ResponseUtil;
    13. public class UserAction extends ActionSupport implements ModelDriver{
    14. private User user = new User();
    15. private UserDao userDao = new UserDao();
    16. public String login(HttpServletRequest req, HttpServletResponse resp) {
    17. try {
    18. User u = userDao.login(user);
    19. if(u != null) {
    20. ResponseUtil.writeJson(resp, R.ok(200, "成功"));
    21. }else {
    22. ResponseUtil.writeJson(resp, R.error(0, "账户或密码错误"));
    23. }
    24. } catch (Exception e) {
    25. e.printStackTrace();
    26. try {
    27. ResponseUtil.writeJson(resp, R.error(0, "账户或密码错误"));
    28. } catch (Exception e1) {
    29. // TODO Auto-generated catch block
    30. e1.printStackTrace();
    31. }
    32. }
    33. return null;
    34. }
    35. // 用户查询
    36. public String list(HttpServletRequest req, HttpServletResponse resp) {
    37. try {
    38. PageBean pageBean = new PageBean();
    39. pageBean.setRequest(req);
    40. List> list = userDao.list(user, pageBean);
    41. // 遵循layui中的格式
    42. ResponseUtil.writeJson(resp, R.ok(0, "用户数据查询成功",pageBean.getTotal(),user));
    43. } catch (Exception e) {
    44. e.printStackTrace();
    45. try {
    46. ResponseUtil.writeJson(resp, R.error(0, "用户数据查询失败"));
    47. } catch (Exception e1) {
    48. // TODO Auto-generated catch block
    49. e1.printStackTrace();
    50. }
    51. }
    52. return null;
    53. }
    54. public String add(HttpServletRequest req, HttpServletResponse resp) {
    55. try {
    56. int rs = userDao.add(user);
    57. if(rs>0) {
    58. ResponseUtil.writeJson(resp, R.ok(0, "用户数据新增成功"));
    59. }else {
    60. ResponseUtil.writeJson(resp, R.error(0, "用户数据新增失败"));
    61. }
    62. } catch (Exception e) {
    63. e.printStackTrace();
    64. try {
    65. ResponseUtil.writeJson(resp, R.error(0, "用户数据新增失败"));
    66. } catch (Exception e1) {
    67. // TODO Auto-generated catch block
    68. e1.printStackTrace();
    69. }
    70. }
    71. return null;
    72. }
    73. public String del(HttpServletRequest req, HttpServletResponse resp) {
    74. try {
    75. int rs = userDao.del(user);
    76. if(rs>0) {
    77. ResponseUtil.writeJson(resp, R.ok(0, "用户数据删除成功"));
    78. }else {
    79. ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
    80. }
    81. } catch (Exception e) {
    82. e.printStackTrace();
    83. try {
    84. ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
    85. } catch (Exception e1) {
    86. // TODO Auto-generated catch block
    87. e1.printStackTrace();
    88. }
    89. }
    90. return null;
    91. }
    92. public String edit(HttpServletRequest req, HttpServletResponse resp) {
    93. try {
    94. int rs = userDao.add(user);
    95. if(rs>0) {
    96. ResponseUtil.writeJson(resp, R.ok(0, "用户数据修改成功"));
    97. }else {
    98. ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
    99. }
    100. } catch (Exception e) {
    101. e.printStackTrace();
    102. try {
    103. ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
    104. } catch (Exception e1) {
    105. // TODO Auto-generated catch block
    106. e1.printStackTrace();
    107. }
    108. }
    109. return null;
    110. }
    111. @Override
    112. public User getModel() {
    113. return user;
    114. }
    115. }

    配置文件在之前已经配置完成了,有第一次点进小编博客的可以参考前面的第三篇文章完成XML文件配置 


    三、前端代码

    前端代码我们首先分析不仅仅是只有一个用户管理的目的界面,我们点击新增和修改的时候还需要弹出类似于模态框的新界面所以一共是两个界面

    UserManage.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@include file="/common/header.jsp"%>
    4. html>
    5. <html>
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    8. <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/system/userManage.js">script>
    9. <title>用户管理title>
    10. head>
    11. <body>
    12. <div class="layui-form-item">
    13. <div class="layui-inline">
    14. <label class="layui-form-label">用户名:label>
    15. <div class="layui-input-inline">
    16. <input type="text" id="name" placeholder="请输入用户名" autocomplete="off" class="layui-input">
    17. div>
    18. div>
    19. <div class="layui-inline">
    20. <div class="layui-input-inline">
    21. <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
    22. <i class="layui-icon layui-icon-search">i>
    23. 查询
    24. button>
    25. <button id="btn_add" type="button" class="layui-btn">新增button>
    26. div>
    27. div>
    28. div>
    29. <table id="tb" lay-filter="tb" class="layui-table" style="margin-top:-15px;">table>
    30. <script type="text/html" id="toolbar">
    31. <button class="layui-btn layui-btn-sm" lay-event="edit">编辑button>
    32. <button class="layui-btn layui-btn-sm" lay-event="del">删除button>
    33. <button class="layui-btn layui-btn-sm" lay-event="reset">重置密码button>
    34. script>
    35. body>
    36. html>

    userEdit.jsp

    1. <%@ page language="java" contentType="text/html; charset=UTF-8"
    2. pageEncoding="UTF-8"%>
    3. <%@include file="/common/header.jsp"%>
    4. html>
    5. <html>
    6. <head>
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    8. <script type="text/javascript" src="${pageContext.request.contextPath }/static/js/system/userEdit.js">script>
    9. <title>用户新增title>
    10. head>
    11. <style>
    12. .layui-form-select dl{
    13. max-height:150px;
    14. }
    15. style>
    16. <body>
    17. <div style="padding:10px;">
    18. <form class="layui-form layui-form-pane" lay-filter="user">
    19. <input type="hidden" name="id"/>
    20. <div class="layui-form-item">
    21. <label class="layui-form-label">用户名称label>
    22. <div class="layui-input-block">
    23. <input type="text" id="name" name="name" autocomplete="off" placeholder="请输入用户名" class="layui-input">
    24. div>
    25. div>
    26. <div class="layui-form-item">
    27. <label class="layui-form-label">用户角色label>
    28. <div class="layui-input-block">
    29. <select name="rid">
    30. <option value="">---请选择---option>
    31. <option value="1">管理员option>
    32. <option value="2">发起者option>
    33. <option value="3">审批者option>
    34. <option value="4">参与者option>
    35. <option value="5">会议管理员option>
    36. select>
    37. div>
    38. div>
    39. <div class="layui-form-item">
    40. <label class="layui-form-label">登录账号label>
    41. <div class="layui-input-block">
    42. <input type="text" name="loginName" lay-verify="required" placeholder="请输入账号" autocomplete="off" class="layui-input">
    43. div>
    44. div>
    45. <div class="layui-form-item">
    46. <label class="layui-form-label">登录密码label>
    47. <div class="layui-input-block">
    48. <input type="password" name="pwd" placeholder="请输入密码" autocomplete="off" class="layui-input">
    49. div>
    50. div>
    51. form>
    52. div>
    53. body>
    54. html>

    对应的JS逻辑代码进行封装:

     userManage.js:

    1. let layer,$,table;
    2. var row;
    3. layui.use(['jquery','layer','table'],function(){
    4. layer=layui.layer,
    5. $=layui.jquery,
    6. table=layui.table;
    7. //初始化表格
    8. initTable();
    9. //绑定查询按钮的点击事件
    10. $('#btn_search').click(function(){
    11. query();
    12. });
    13. //绑定新增按钮的点击事件
    14. $('#btn_add').click(function(){
    15. row=null;
    16. open('新增');
    17. });
    18. });
    19. //1.初始化数据表格
    20. function initTable(){
    21. table.render({ //执行渲染
    22. elem: '#tb', //指定原始表格元素选择器(推荐id选择器)
    23. // url: 'user.action?methodName=list', //请求地址
    24. height: 340, //自定义高度
    25. loading: false, //是否显示加载条(默认 true)
    26. cols: [[ //设置表头
    27. {field: 'id', title: '用户编号', width: 120},
    28. {field: 'name', title: '用户名', width: 120},
    29. {field: 'loginName', title: '登录账号', width: 140},
    30. {field: '', title: '操作', width: 220,toolbar:'#toolbar'},
    31. ]]
    32. });
    33. //在页面中的中必须配置lay-filter="tb_goods"属性才能触发属性!!!
    34. table.on('tool(tb)', function (obj) {
    35. row = obj.data;
    36. if (obj.event == "edit") {
    37. open("编辑");
    38. }else if(obj.event == "del"){
    39. layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
    40. $.post($("#ctx").val()+'/user.action',{
    41. 'methodName':'del',
    42. 'id':row.id
    43. },function(rs){
    44. if(rs.success){
    45. //调用查询方法刷新数据
    46. query();
    47. }else{
    48. layer.msg(rs.msg,function(){});
    49. }
    50. },'json');
    51. layer.close(index);
    52. });
    53. }else{
    54. }
    55. });
    56. }
    57. //2.点击查询
    58. function query(){
    59. table.reload('tb', {
    60. url: $("#ctx").val()+'/user.action', //请求地址
    61. method: 'POST', //请求方式,GET或者POST
    62. loading: true, //是否显示加载条(默认 true)
    63. page: true, //是否分页
    64. where: { //设定异步数据接口的额外参数,任意设
    65. 'methodName':'list',
    66. 'name':$('#name').val()
    67. },
    68. request: { //自定义分页请求参数名
    69. pageName: 'page', //页码的参数名称,默认:page
    70. limitName: 'rows' //每页数据量的参数名,默认:limit
    71. }
    72. });
    73. }
    74. //3.对话框
    75. function open(title){
    76. layer.open({
    77. type: 2, //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
    78. title:title,
    79. area: ['660px', '340px'], //宽高
    80. skin: 'layui-layer-rim', //样式类名
    81. content: $("#ctx").val()+'/jsp/system/userEdit.jsp', //书本编辑页面
    82. btn:['保存','关闭'],
    83. yes: function(index, layero){
    84. //jquery.find
    85. //调用子页面中提供的getData方法,快速获取子页面的form表单数据
    86. let data= $(layero).find("iframe")[0].contentWindow.getData();
    87. console.log(data);
    88. //判断title标题
    89. let methodName="add";
    90. if(title=="编辑")
    91. methodName="edit";
    92. $.post($("#ctx").val()+'/user.action?methodName='+methodName,
    93. data,function(rs){
    94. if(rs.success){
    95. //关闭对话框
    96. layer.closeAll();
    97. //调用查询方法刷新数据
    98. query();
    99. }else{
    100. layer.msg(rs.msg,function(){});
    101. }
    102. },'json');
    103. },
    104. btn2: function(index, layero){
    105. layer.closeAll();
    106. },
    107. });
    108. }
    109. userEdit.jsp
    110. userEdit.js

      1. let layer,form,$;
      2. layui.use(['layer','form','jquery'],function(){
      3. layer=layui.layer,form=layui.form,$=layui.jquery;
      4. initData();
      5. });
      6. function initData(){
      7. console.log(parent.row);
      8. if(null!=parent.row){
      9. //因为layui.each内部的逻辑问题导致的所以要先深拷贝一份然后再去val
      10. //parent.row:表格行对象
      11. //table的数据在父页面userManager.js
      12. //点击编辑按钮的时候,当前
      13. form.val('user',$.extend({}, parent.row||{}));
      14. $('#name').attr('readonly','readonly');
      15. }
      16. }
      17. function getData(){
      18. //
      19. //取 user from中的值
      20. return form.val('user');
      21. }

    111. 相关阅读:
      Softek Barcode Reader 9.1.5
      python+django+vue个人简历管理系统
      Infoblox DDI NIOS 8.5.2 -- DDI 核心网络服务管理
      日语
      自然语言处理从零到入门 NLP
      js正则表达式之中文验证(转)
      Spring内存马分析
      win10 eclipse安装教程--
      代码随想录二刷|滑动窗口
      c++实现的一个定时器实例
    112. 原文地址:https://blog.csdn.net/weixin_66110079/article/details/125904150