• LayUI(会议oi项目增删改查)


    目录

    一、页面要求、数据库分析

    1)页面要求

              2)数据库

    二、前后台编码

    后台

    UserDao源码

     ​​                 UserAction增删改查源码

     前台

    userManage源码

    userManage.js源码

    UserEdit源码(增加修改界面)

    UserEdit.js源码 


    一、页面要求、数据库分析

    1)页面要求

    2)数据库

    1. 进行优化,查询出用户信息及对应角色--case when
    2. rid用户角色:1 管理员 2 发起者 3 审批者 4 参与者 5 会议室管理员
    3. select *,
    4. (case rid
    5. when 1 then '管理员'
    6. when 2 then '发起者'
    7. when 3 then '审批者'
    8. when 4 then '参与者'
    9. when 5 then '会议室管理员'
    10. else '其他' end) roleName
    11. from t_oa_user;

     

    二、前后台编码

    后台

    我们新建一个用户管理的jsp界面

    在其中随便输入几个x,测试一下该界面是否能运行成功

     

    可以的话,我们就上官网找到与我们最终想要展示出来的效果的代码,并拷贝到对应区域,为我所用。拷贝下来的样式效果如下⬇⬇与我们最终想要的效果还有些差别,删删改改一下改成我们需要的样子 

     删改最后差不多是这个样子

     好滴,接下来开始编写后台代码了

    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. //根据sql查询符合条件的用户,通常只会返回一条数据
    13. List users = super.executeQuery(sql, User.class, null);
    14. return users == null || users.size() == 0 ? null : users.get(0);
    15. }
    16. //查询用户信息及对应角色信息,角色用case when得来
    17. public List> list(User user,PageBean pageBean) throws Exception{
    18. String sql="select *, \r\n" +
    19. "(case rid \r\n" +
    20. "when 1 then '管理员' \r\n" +
    21. "when 2 then '发起者' \r\n" +
    22. "when 3 then '审批者' \r\n" +
    23. "when 4 then '参与者' \r\n" +
    24. "when 5 then '会议室管理员' \r\n" +
    25. "else '其他' end) roleName \r\n" +
    26. "from t_oa_user where 1=1";
    27. //拿到用户名字
    28. String name = user.getName();
    29. //判断不为空
    30. if(StringUtils.isNotBlank(name)) {
    31. sql+="and name like '%"+name+"%'";
    32. }
    33. return super.executeQuery(sql, pageBean);
    34. }
    35. //增加
    36. public int add(User user) throws Exception {
    37. String sql="insert into t_oa_user(name,loginName,pwd) value(?,?,?)";
    38. return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd"});
    39. }
    40. //删除
    41. public int del(User user) throws Exception {
    42. String sql="delete from t_oa_user where id=?";
    43. return super.executeUpdate(sql, user, new String[] {"id"});
    44. }
    45. //修改
    46. public int edit(User user) throws Exception {
    47. String sql="update t_oa_user set name=?,loginName=?,pwd=? where id=?";
    48. return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","id"});
    49. }
    50. }

    先利用Junit测试dao方法

    测试查询方法

    1. @Test
    2. public void testList() {
    3. User user=new User();
    4. PageBean pageBean=new PageBean();
    5. try {
    6. List> list = ud.list(user, pageBean);
    7. for (Map map : list) {
    8. System.out.println(map);
    9. }
    10. } catch (Exception e) {
    11. e.printStackTrace();
    12. }
    13. }

     测试增加方法

    1. @Test
    2. public void testAdd() {
    3. User user=new User();
    4. user.setName("易家军哈哈哈");
    5. user.setLoginName("yjj");
    6. user.setPwd("123456");
    7. try {
    8. ud.add(user);
    9. } catch (Exception e) {
    10. e.printStackTrace();
    11. }
    12. }

    测试修改方法 

    1. @Test
    2. public void testEdit() {
    3. User user=new User();
    4. user.setName("易家军");
    5. user.setLoginName("yjjhhh");
    6. user.setPwd("1234");
    7. user.setId(13L);
    8. try {
    9. ud.edit(user);
    10. } catch (Exception e) {
    11. e.printStackTrace();
    12. }
    13. }

     

    测试删除方法 

    1. @Test
    2. public void testDel() {
    3. User user=new User();
    4. user.setId(13L);
    5. try {
    6. ud.del(user);
    7. } catch (Exception e) {
    8. e.printStackTrace();
    9. }
    10. }

     ​​​​​​​

     测试dao方法没问题后,我们编写action方法

    UserAction增删改查源码

    1. //用户查询
    2. public String list(HttpServletRequest req, HttpServletResponse resp) {
    3. try {
    4. PageBean pageBean=new PageBean();
    5. pageBean.setRequest(req);
    6. List> users = userDao.list(user, pageBean);
    7. //注意:LayUI中的数据表格的格式
    8. ResponseUtil.write(resp, R.ok(0, "用户数据查询成功",pageBean.getTotal(),users));
    9. } catch (Exception e) {
    10. e.printStackTrace();
    11. try {
    12. ResponseUtil.writeJson(resp, R.ok(0, "用户数据查询失败"));
    13. } catch (Exception e1) {
    14. e1.printStackTrace();
    15. }
    16. }
    17. return null;
    18. }
    19. //增加
    20. public String add(HttpServletRequest req, HttpServletResponse resp) {
    21. try {
    22. //rs是sql语句执行的影响行数
    23. int rs = userDao.add(user);
    24. if(rs>0) {
    25. ResponseUtil.write(resp, R.ok(200, "用户数据新增成功"));
    26. }
    27. else {
    28. ResponseUtil.write(resp, R.error(0, "用户数据新增失败"));
    29. }
    30. } catch (Exception e) {
    31. e.printStackTrace();
    32. try {
    33. ResponseUtil.writeJson(resp, R.ok(0, "用户数据新增失败"));
    34. } catch (Exception e1) {
    35. e1.printStackTrace();
    36. }
    37. }
    38. return null;
    39. }
    40. //删除
    41. public String del(HttpServletRequest req, HttpServletResponse resp) {
    42. try {
    43. //rs是sql语句执行的影响行数
    44. int rs = userDao.del(user);
    45. if(rs>0) {
    46. ResponseUtil.write(resp, R.ok(200, "用户数据删除成功"));
    47. }
    48. else {
    49. ResponseUtil.write(resp, R.error(0, "用户数据删除失败"));
    50. }
    51. } catch (Exception e) {
    52. e.printStackTrace();
    53. try {
    54. ResponseUtil.writeJson(resp, R.ok(0, "用户数据删除失败"));
    55. } catch (Exception e1) {
    56. e1.printStackTrace();
    57. }
    58. }
    59. return null;
    60. }
    61. //修改
    62. public String edit(HttpServletRequest req, HttpServletResponse resp) {
    63. try {
    64. //rs是sql语句执行的影响行数
    65. int rs = userDao.edit(user);
    66. if(rs>0) {
    67. ResponseUtil.write(resp, R.ok(200, "用户数据修改成功"));
    68. }
    69. else {
    70. ResponseUtil.write(resp, R.error(0, "用户数据修改失败"));
    71. }
    72. } catch (Exception e) {
    73. e.printStackTrace();
    74. try {
    75. ResponseUtil.writeJson(resp, R.ok(0, "用户数据修改失败"));
    76. } catch (Exception e1) {
    77. e1.printStackTrace();
    78. }
    79. }
    80. return null;
    81. }

     前台

    userManage源码

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

    有关UserManage页面的js代码,我把js代码封装成js文件,在页面中直接导入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. //调用子页面中提供的getData方法,快速获取子页面的form表单数据
    85. let data= $(layero).find("iframe")[0].contentWindow.getData();
    86. console.log(data);
    87. //判断title标题
    88. let methodName="add";
    89. if(title=="编辑")
    90. methodName="edit";
    91. $.post($("#ctx").val()+'/user.action?methodName='+methodName,
    92. data,function(rs){
    93. if(rs.success){
    94. //关闭对话框
    95. layer.closeAll();
    96. //调用查询方法刷新数据
    97. query();
    98. }else{
    99. layer.msg(rs.msg,function(){});
    100. }
    101. },'json');
    102. },
    103. btn2: function(index, layero){
    104. layer.closeAll();
    105. }
    106. });
    107. }
    108. 当我们点击查询⬇⬇⬇ 

       ​​​​​​​

       查询功能ok,接下来我们编写增加与修改页面

      新建一个增加修改jsp页面

      UserEdit源码(增加修改界面)

      1. <%@ page language="java" contentType="text/html; charset=UTF-8"
      2. pageEncoding="UTF-8"%>
      3. <%@include file="/common/head.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的数据在父页面userManage.jsp
      12. // 点击编辑按钮的时候,当前行赋值给子页面userEdit.jsp
      13. form.val('user',$.extend({}, parent.row||{}));//
      14. $('#name').attr('readonly','readonly');
      15. }
      16. }
      17. function getData(){
      18. // 取user form中的值
      19. return form.val('user');
      20. }

       ​​​​​​​点击新增按钮后弹出弹出层

      新增成功 

       

       ❗❗用到的实体类,还是上一期的User

      使用Junit测试,记得引入需要测试的类

      博客中,人物名称被抹掉了一部分,是因为他们都是博主身边的人,咱需要保护他们的个人信息啦

    109. 相关阅读:
      java计算机毕业设计校园环境保护监督系统源代码+系统+数据库+lw文档
      Go : golang发布三方包流程简介
      从微服务基本概念到核心组件-通过一个实例来讲解和分析
      kobs-ng 编译使用
      Kubernetes 1.25 中的删除和主要变化
      【leetcode】754.到达终点的数字
      基于 attention 机制的 LSTM 神经网络 超短期负荷预测方法学习记录
      从实战出发带你搞懂AXI4 (一、AXI4协议解析)
      京东二面:高并发设计,都有哪些技术方案?
      2_5.Linux存储的基本管理
    110. 原文地址:https://blog.csdn.net/weixin_67450855/article/details/125550766