• LayUi-----------用户管理


    前言

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


    一、准备工作

    预期效果

     

    来看一下我们这次要用到的数据库 

     

     

     在layui的参考网站找到我们要用到内表格以及弹出层代码。

     

     编辑或者删除是根据lay-event来的

     这就是这次用户管理要准备组件。搭建好基本界面框架,接下来进入编码阶段。

    二、编码

            1、后端代码

            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. }

     测试一下是否可用。

            UserDaoTest

    1. package com.zking.dao;
    2. import static org.junit.Assert.*;
    3. import java.util.List;
    4. import java.util.Map;
    5. import org.junit.After;
    6. import org.junit.Before;
    7. import org.junit.Test;
    8. import com.zking.entity.User;
    9. import com.zking.util.PageBean;
    10. public class UserDaoTest {
    11. private UserDao userDao = new UserDao();
    12. @Before
    13. public void setUp() throws Exception {
    14. }
    15. @After
    16. public void tearDown() throws Exception {
    17. }
    18. @Test
    19. public void testList() {
    20. User user = new User();
    21. PageBean pageBean = new PageBean();
    22. try {
    23. List> list = userDao.list(user, pageBean);
    24. for (Map map : list) {
    25. System.out.println(map);
    26. }
    27. } catch (Exception e) {
    28. e.printStackTrace();
    29. }
    30. }
    31. @Test
    32. public void testAdd() {
    33. User user = new User();
    34. user.setName("老六");
    35. user.setLoginName("ll");
    36. user.setPwd("1234");
    37. try {
    38. userDao.add(user);
    39. } catch (Exception e) {
    40. // TODO Auto-generated catch block
    41. e.printStackTrace();
    42. }
    43. }
    44. @Test
    45. public void testDel() {
    46. User user = new User();
    47. user.setId(13L);
    48. try {
    49. userDao.del(user);
    50. } catch (Exception e) {
    51. // TODO Auto-generated catch block
    52. e.printStackTrace();
    53. }
    54. }
    55. @Test
    56. public void testEdit() {
    57. User user = new User();
    58. user.setName("老六2");
    59. user.setLoginName("ll2");
    60. user.setPwd("1234");
    61. user.setId(13L);
    62. try {
    63. userDao.edit(user);
    64. } catch (Exception e) {
    65. // TODO Auto-generated catch block
    66. e.printStackTrace();
    67. }
    68. }
    69. }

    查询:

     

    新增:​​​​​​​ 

     

    修改:​​​​​​​

     

    删除: 

     

     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, new R()
    21. // .data("code", 200)
    22. // .data("msg","成功")
    23. // );
    24. ResponseUtil.writeJson(resp, R.ok(200, "成功"));
    25. }else {
    26. // /*ResponseUtil.writeJson(resp, new R()
    27. // .data("code", 0)
    28. // .data("msg","账户或密码错误")
    29. // );*/
    30. ResponseUtil.writeJson(resp, R.error(0, "账户或密码错误"));
    31. }
    32. } catch (Exception e) {
    33. e.printStackTrace();
    34. try {
    35. ResponseUtil.writeJson(resp, R.error(0, "账户或密码错误"));
    36. } catch (Exception e1) {
    37. // TODO Auto-generated catch block
    38. e1.printStackTrace();
    39. }
    40. }
    41. return null;
    42. }
    43. // 用户查询
    44. public String list(HttpServletRequest req, HttpServletResponse resp) {
    45. try {
    46. PageBean pageBean = new PageBean();
    47. pageBean.setRequest(req);
    48. List> list = userDao.list(user, pageBean);
    49. // 遵循layui中的格式
    50. ResponseUtil.writeJson(resp, R.ok(0, "用户数据查询成功",pageBean.getTotal(),user));
    51. } catch (Exception e) {
    52. e.printStackTrace();
    53. try {
    54. ResponseUtil.writeJson(resp, R.error(0, "用户数据查询失败"));
    55. } catch (Exception e1) {
    56. // TODO Auto-generated catch block
    57. e1.printStackTrace();
    58. }
    59. }
    60. return null;
    61. }
    62. public String add(HttpServletRequest req, HttpServletResponse resp) {
    63. try {
    64. int rs = userDao.add(user);
    65. if(rs>0) {
    66. ResponseUtil.writeJson(resp, R.ok(0, "用户数据新增成功"));
    67. }else {
    68. ResponseUtil.writeJson(resp, R.error(0, "用户数据新增失败"));
    69. }
    70. } catch (Exception e) {
    71. e.printStackTrace();
    72. try {
    73. ResponseUtil.writeJson(resp, R.error(0, "用户数据新增失败"));
    74. } catch (Exception e1) {
    75. // TODO Auto-generated catch block
    76. e1.printStackTrace();
    77. }
    78. }
    79. return null;
    80. }
    81. public String del(HttpServletRequest req, HttpServletResponse resp) {
    82. try {
    83. int rs = userDao.del(user);
    84. if(rs>0) {
    85. ResponseUtil.writeJson(resp, R.ok(0, "用户数据删除成功"));
    86. }else {
    87. ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
    88. }
    89. } catch (Exception e) {
    90. e.printStackTrace();
    91. try {
    92. ResponseUtil.writeJson(resp, R.error(0, "用户数据删除失败"));
    93. } catch (Exception e1) {
    94. // TODO Auto-generated catch block
    95. e1.printStackTrace();
    96. }
    97. }
    98. return null;
    99. }
    100. public String edit(HttpServletRequest req, HttpServletResponse resp) {
    101. try {
    102. int rs = userDao.add(user);
    103. if(rs>0) {
    104. ResponseUtil.writeJson(resp, R.ok(0, "用户数据修改成功"));
    105. }else {
    106. ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
    107. }
    108. } catch (Exception e) {
    109. e.printStackTrace();
    110. try {
    111. ResponseUtil.writeJson(resp, R.error(0, "用户数据修改失败"));
    112. } catch (Exception e1) {
    113. // TODO Auto-generated catch block
    114. e1.printStackTrace();
    115. }
    116. }
    117. return null;
    118. }
    119. @Override
    120. public User getModel() {
    121. return user;
    122. }
    123. }

             2、前端代码

            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>

              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

      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>

              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. }

       

       

       

       

    110. 相关阅读:
      深度学习概述:从基础概念、计算步骤到调优方法
      android 性能优化
      C#里的var和dynamic区别到底是什么,你真的搞懂了嘛
      ubuntu20.04下源码安装hyperscan库安装记录
      备战金九银十,这份分布式架构文档:ZK+高可用+缓存+事务+中间件绝了
      Google Earth 成长历程的15个小故事
      GPU算力租用平台推荐
      3D数学之三角公式
      智能小车之测速小车原理和开发
      leetcode 61. 旋转链表
    111. 原文地址:https://blog.csdn.net/qq_62331938/article/details/125901294