利用layui构建OA系统基本操作

news2024/11/25 20:53:30

   一.编写方法(增加,删除,修改,查询)

通过继承BaseDao来实现通用,从而减少代码量,提高小路

1.增加

public int add(User user) throws Exception {
		String sql = "insert into t_oa_user(name,loginName,pwd,rid) values(?,?,?,?)";
		return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","rid"});
	}

2.删除

public int del(User user) throws Exception {
		String sql = "delete from t_oa_user where id = ?";
		return super.executeUpdate(sql, user, new String[] {"id"});
	}
	

3.修改

public int edit(User user) throws Exception {
		String sql = "update t_oa_user set name = ?,loginName = ?,pwd = ? where id = ?";
		return super.executeUpdate(sql, user, new String[] {"name","loginName","pwd","id"});
	}
	

4.查询(带有模糊查询,分页,通用查询)

/**
	 * 查询结果带有rname  json数组
	 * @param user
	 * @param pageBean
	 * @return
	 * @throws Exception
	 */
	public List<Map<String, Object>> userRole(User user, PageBean pageBean) throws Exception {
		String sql ="SELECT  u.*,\r\n" + 
				"(\r\n" + 
				"CASE\r\n" + 
				"	WHEN u.rid = '1' THEN\r\n" + 
				"	'管理员' \r\n" + 
				"	WHEN u.rid = '2' THEN\r\n" + 
				"	'发起者' \r\n" + 
				"	WHEN u.rid = '3' THEN\r\n" + 
				"	'审批者' \r\n" + 
				"	WHEN u.rid = '4' THEN\r\n" + 
				"	'参与者' \r\n" + 
				"	WHEN u.rid = '5' THEN\r\n" + 
				"	'会议室管理员' ELSE '其他' \r\n" + 
				"END \r\n" + 
				"	) rname \r\n" + 
				"FROM  t_oa_user u    where  1=1  ";
		String name = user.getName();
		if (StringUtils.isNotBlank(name))
			sql += " and name like '%" + name + "%'";
		return super.executeQuery(sql, pageBean);
	}

二.编写servelt

1.查询

/**
	 * 查询
	 */
	public void userRole(HttpServletRequest req, HttpServletResponse resp) {
		try {
			PageBean pageBean = new PageBean();
			pageBean.setRequest(req);
			List<Map<String, Object>> userRole = ud.userRole(user, pageBean);
			ResponseUtil.writeJson(resp, R.ok(0, "查询成功", pageBean.getTotal(), userRole));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

注意:在这里我我们的老版本通过map集合保存数据,然后在进行遍历

// Map<String, Object> map =new HashMap<String, Object>();
            // map.put("code",0);
            // map.put("msg", "查询成功");
            // map.put("count", pageBean.getTotal());
            // map.put("data", userRole);

新方法通过我们的R类来实现,小编以及将那些元素进行了注解,所以你懂得!

 

package com.zking.util;

import java.util.HashMap;

public class R extends HashMap{
	public R data(String key, Object value) {
		this.put(key, value);
		return this;
	}
	
	/**
	 * data 数据传入   code返回结果成功还是失败    count分页
	 * @param code
	 * @param msg
	 * @return
	 */
	public static R ok(int code, String msg) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg);
		return r;
	}
	
	public static R error(int code, String msg) {
		R r = new R();
		r.data("success", false).data("code", code).data("msg", msg);
		return r;
	}
	
	public static R ok(int code, String msg,Object data) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg).data("data", data);
		return r;
	}
	
	public static R ok(int code, String msg, long count, Object data) {
		R r = new R();
		r.data("success", true).data("code", code).data("msg", msg).data("count", count).data("data", data);
		return r;
	}
}

2.增加

/**
	 * 增加
	 * 
	 */
	public void add(HttpServletRequest req, HttpServletResponse resp) {
		try {
			int add = ud.add(user);
			ResponseUtil.writeJson(resp, R.ok(0, "增加成功"));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

3.删除

public void del(HttpServletRequest req, HttpServletResponse resp) {
		try {
			int del = ud.del(user);
			ResponseUtil.writeJson(resp, R.ok(0, "删除成功"));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

4.修改



	public void edit(HttpServletRequest req, HttpServletResponse resp) {
		try {
			int edit = ud.edit(user);
			ResponseUtil.writeJson(resp, R.ok(0, "修改成功"));

		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

三.页面构建,和实施效果

1构建userManage界面:

我们在layui将我们属于要的界面copy放到我们的项目了

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@include file="/common/header.jsp"%>
<!DOCTYPE html>
<html> 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="/static/js/system/userManage.js"></script>
<title>用户管理</title>
</head>
<body>
	<!-- 搜索栏 -->
	<div class="layui-form-item">
	  <div class="layui-inline">
	    <label class="layui-form-label">用户名:</label>
	    <div class="layui-input-inline">
	      <input type="text" id="name" placeholder="请输入用户名" autocomplete="off" class="layui-input">
	    </div>
	  </div>
	  
	  <div class="layui-inline">
	    <div class="layui-input-inline">
	      <button id="btn_search" type="button" class="layui-btn layui-btn-normal">
	      	<i class="layui-icon layui-icon-search"></i>
	      	查询
	      </button>
	      <button id="btn_add" type="button" class="layui-btn">新增</button>
	    </div>
	  </div>
	  
	</div>
	<!-- 数据表格及分页 -->
	<table class="layui-hide" id="test" lay-filter="test"></table>
 
<script type="text/html" id="toolbarDemo">
  <div class="layui-btn-container">
    <button class="layui-btn layui-btn-sm" lay-event="getCheckData">获取选中行数据</button>
    <button class="layui-btn layui-btn-sm" lay-event="getCheckLength">获取选中数目</button>
    <button class="layui-btn layui-btn-sm" lay-event="isAll">验证是否全选</button>
  </div>
</script>
 
<script type="text/html" id="barDemo">
  <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
  <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>
</script>
</body>
</html>

1.1构建Js和实现方法

将我们的Js代码放在固定的位置

let layer,$,table;
var  row;
layui.use(['jquery', 'layer', 'table'], function(){
	layer = layui.layer
	,$ = layui.jquery
	,table = layui.table;
	//初始化数据表格
	initTable();
	//绑定查询按钮的点击事件
	$('#btn_search').click(function(){
		query();
	});
	//绑定新增按钮的点击事件
	$('#btn_add').click(function(){
		row=null;
		edit('编辑');
	});
	
	
});

//打开增加界面
function edit(title){
    layer.open({
       type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
       title:title,
       area: ['660px', '340px'],   //宽高
       skin: 'layui-layer-rim',    //样式类名
       content: '/jsp/system/userEdit.jsp', //书本编辑页面
       btn:['保存','关闭'],
       yes: function(index, layero){
    	   //调用子页面中提供的getData方法,快速获取子页面的form表单数据
           let data= $(layero).find("iframe")[0].contentWindow.getData();
           console.log(data);
           //判断title标题
           let methodName="add";
           if(title=="编辑")
        	   methodName="edit";
           $.post('/user.action?methodName='+methodName,
        		   data,function(rs){
        	   if(rs.success){
        		   //关闭对话框
        		   layer.closeAll();
        		   //调用查询方法刷新数据
        		   query();
        	   }else{
        		   layer.msg(rs.msg,function(){});
        	   }
           },'json');
       },
       btn2: function(index, layero){
    	   layer.closeAll();
       }
    });
 }

//1.初始化数据表格
function initTable(){
	    	 table.render({
	    		    elem: '#test'
	    		    ,url:'user.action?methodName=userRole'
	    		    ,toolbar: '#toolbarDemo' //开启头部工具栏,并为其绑定左侧模板
	    		    ,defaultToolbar: ['filter', 'exports', 'print', { //自定义头部工具栏右侧图标。如无需自定义,去除该参数即可
	    		      title: '提示'
	    		      ,layEvent: 'LAYTABLE_TIPS'
	    		      ,icon: 'layui-icon-tips'
	    		    }]
	    		    ,title: '用户数据表'
	    		    ,cols: [[
	    		      {type: 'checkbox', fixed: 'left'}
	    		      ,{field:'id', title:'ID', width:80, fixed: 'left', unresize: true, sort: true}
	    		      ,{field:'loginName', title:'账户名', width:120, edit: 'text'}
	    		      ,{field:'name', title:'用户名', width:150, edit: 'text', templet: function(res){
	    		        return '<em>'+ res.name +'</em>'
	    		      }}
	    		      ,{field:'pwd', title:'密码', width:80, edit: 'text', sort: true}
	    		      ,{field:'rname', title:'角色名字', width:100}
	    		      ,{fixed: 'right', title:'操作', toolbar: '#barDemo', width:150}
	    		    ]]
	    		    ,page: true
	    		  });

	    		//在页面中的<table>中必须配置lay-filter="tb_goods"属性才能触发属性!!!
	    		table.on('tool(tb)', function (obj) {
	    			row = obj.data;
	    			if (obj.event == "edit") {
	    				open("编辑");
	    			}else if(obj.event == "del"){
	    				layer.confirm('确认删除吗?', {icon: 3, title:'提示'}, function(index){
	    				  $.post('/user.action',{
	    					  'methodName':'del',
	    					  'id':row.id
	    				  },function(rs){
	    					  if(rs.success){
	    		        		   //调用查询方法刷新数据
	    		        		   query();
	    		        	   }else{
	    		        		   layer.msg(rs.msg,function(){});
	    		        	   }
	    				  },'json');
	    				  layer.close(index);
	    				});
	    			}else{

	    			}
	    		}) 
	    	 
	    	 
	    	 
	    	 
}
//查询   
function  query() {
		table.reload('test',{
			where :{
			name:$("name").val()	
			}
		,request:{
			pageName:'page'
				,limitName:'rows'
		}
		});
     } 

在其中我们的增加,修改共用一个界面!从而达到减少代码的目的,二者区别在于在实际操作中传输的关键字不同,从而进行区别

1.2界面效果 

a.显示数据

 b.查询效果

 c.增加

d. 修改

 

四.总结

在userManage .js我们调用了layui的一个方法重载,通过这个方法来实现子类调用父类的方法,还有注意到的一点就是在界面中的按钮属于主界面,不是来个单出的界面

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/753870.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Windows7中使用SRS集成音视频一对一通话

SRS早就具备了SFU的能力&#xff0c;比如一对一通话、多人通话、直播连麦等等。在沟通中&#xff0c;一对一是常用而且典型的场景&#xff0c; 让我们一起来看看如何用SRS做直播和RTC一体化的一对一通话。 一、启动windows7-docker 二、拉取SRS镜像 执行命令:docker pull oss…

修改jar包中的文件内容

文章目录 导引查找是否存在需要修改的文件vim命令修改配置文件jar命令替换jar包中的文件(也可新增)解压jar包&#xff0c;修改后重新打包jar修改clas文件jar命令参数 导引 首先问问为什么要直接修改jar包中的文件&#xff0c;而不是重新打包&#xff0c;在非必要的情况下&…

【动手学深度学习】pytorch-参数管理

pytorch-参数管理 概述 我们的目标是找到使损失函数最小化的模型参数值。 经过训练后&#xff0c;我们将需要使用这些参数来做出未来的预测。 此外&#xff0c;有时我们希望提取参数&#xff0c;以便在其他环境中复用它们&#xff0c; 将模型保存下来&#xff0c;以便它可以在…

python数据挖掘基础环境安装和使用

文章目录 一&#xff0e;安装python环境二、库的安装2.1 使用pip命令安装virtualenvv扩展&#xff1a;cmd无法使用pip&#xff0c;报错&#xff1a;Fatal error in launcher: Unable to create process using ... 2.2 安装virtualenvwrapper-win2.3 新建一个用于人工智能环境的…

腾讯云 API 3.0(V3版签名) 通用接口 Delphi 版

目录 一、腾讯云API 3.0 简介&#xff1a; 二、Delphi 接口函数说明&#xff1a; 1. Delphi 接口包含的单元&#xff1a; 2. 同步调用和异步调用的区别&#xff1a; 3. 程序调用示例&#xff1a; 三、Delphi 版腾讯云API 3.0 版接口函数下载 四、演示程序录播 下载源程序…

DB2数据库SQL将不同行做合计

DB2数据库SQL将不同行做合计 案例&#xff1a; 将’GL’和’RZ’做合计&#xff0c;其他的不动。 SELECT SALE_TYPE,ROUND(CAST(SUM(aatp_weight) AS DOUBLE),2) AS aatp_weight FROM( SELECT CASE WHEN SALE_TYPE GL THEN RZ ELSE SALE_TYPE END AS SALE_TYPE, DEMAND_NUM / …

基于NXP iMX8MP处理器M7核心LVGL移植

By Toradex胡珊逢 LVGL (Light and Versatile Graphics Library)是一个轻量级的开源图形库&#xff0c;采用 C 或者 MicroPython 语言开发。可以在资源有限的 MCU 上轻松地绘制图形界面。Verdin iMX8M Plus 模块的处理器除了 Cortex-A53 核心外&#xff0c;还具有一个 Cortex-M…

如何运营校园外卖跑腿小程序

运营校园外卖跑腿小程序需要考虑多个方面&#xff0c;包括市场调研、合作伙伴选择、用户获取与留存、服务管理和推广等。下面是一些关键步骤和策略&#xff1a; 市场调研&#xff1a; 在开始运营之前&#xff0c;进行市场调研是非常重要的。了解目标用户的需求和习惯&#xf…

HarmonyOS学习路之方舟开发框架—方舟开发框架(ArkUI)概述

方舟开发框架&#xff08;简称ArkUI&#xff09;为HarmonyOS应用的UI开发提供了完整的基础设施&#xff0c;包括简洁的UI语法、丰富的UI功能&#xff08;组件、布局、动画以及交互事件&#xff09;&#xff0c;以及实时界面预览工具等&#xff0c;可以支持开发者进行可视化界面…

JVM系列(6)——类加载器详解双亲委派

一、类加载器 类加载器是一个负责加载类的对象&#xff0c;用于实现类加载过程中的加载这一步。 主要作用就是加载 Java 类的字节码&#xff08; .class 文件&#xff09;到 JVM 中&#xff08;在内存中生成一个代表该类的 Class 对象&#xff09;。 加载过程可以看 JVM系列&a…

人工智能-反向传播

前面阐述过&#xff0c;在设计好一个神经网络后&#xff0c;参数的数量可能会达到百万级别&#xff0c;利用梯度下降去更新参数计算复杂&#xff0c;算力不足&#xff0c;因此需要一种有效计算梯度的方法&#xff0c;这种方法就是辛顿提出的反向传播&#xff08;简称BP&#xf…

【算法基础】搜索与图论

DFS 全排列问题 842. 排列数字 - AcWing题库 #include<bits/stdc.h> using namespace std; const int N10; int n; int path[N]; bool st[N]; void dfs(int x) {if(x>n){for(int i1;i<n;i) cout<<path[i]<<" ";cout<<endl;return ;…

高级测试工程师求职之路:从笔试到面试,我经历了什么?

最近行业里有个苦涩的笑话&#xff1a;公司扛过了之前的三年&#xff0c;没扛过摘下最近的一年&#xff0c;真是让人想笑又笑不出来。年前听说政策的变化&#xff0c;大家都满怀希望觉得年后行情一片大好&#xff0c;工作岗位激增&#xff0c;至少能有更多的机会拥抱未来。然而…

【每日一题】979. 在二叉树中分配硬币

【每日一题】979. 在二叉树中分配硬币 979. 在二叉树中分配硬币题目描述解题思路 979. 在二叉树中分配硬币 题目描述 给你一个有 n 个结点的二叉树的根结点 root &#xff0c;其中树中每个结点 node 都对应有 node.val 枚硬币。整棵树上一共有 n 枚硬币。 在一次移动中&…

计算机体系结构基础知识介绍之线程级并行性及其利用

线程级并行&#xff08;Thread Level Parallelism&#xff0c;TLP&#xff09;是指在多个处理器或多个核心上同时执行多个线程&#xff0c;从而提高程序的性能和吞吐量。线程级并行的基本原理是利用程序中的数据或任务的并行性&#xff0c;将程序划分为若干个相对独立的子任务&…

c++游戏小技巧7:system 综合

目录 1.日常前言&#xff1a; 2.system 1.换标题&#xff1a;title 2.更改运行框大小 mode cons 3.清屏 cls 4.关机 shutdown 1.电脑多累啊&#xff0c;让他休息一下吧(直接关机) 2.电脑虽然很累&#xff0c;但是还想工作一会再睡(定时关机) 3.不让电脑休息的极其不友善…

【统计函数3】——excel常见函数

相关数据资料来源于网易 函数一览&#xff1a; rank、rand、randbetween、floor、int rank函数: 求某单元格在某区域内的排名 RANK(数值,引用区域,降序0/升序1)范围多指定&#xff1a; 分开的范围之间可用逗号隔开&#xff0c;最后再用一个小括号括起来。F4可以快速锁定行和列。…

Python深度强化学习实战 ——OpenAI Gym-CarRacing自动驾驶项目

&#x1f4ad; 写在前面&#xff1a;本篇是关于 OpenAI Gym-CarRacing 自动驾驶项目的博客&#xff0c;面向掌握 Python 并有一定的深度强化学习基础的读者。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个…

JS-20 ES5~ES13新特性;var/let/const对比;字符串模板;函数的默认/剩余参数;展开语法;进制表示;Symbol;Set;Map等

目录 1_新的ECMA代码执行描述1.1_词法环境&#xff08;Lexical Environments&#xff09;1.2_环境记录&#xff08;Environment Record&#xff09; 2_let/const2.1_基本使用2.2_let/const作用域提升 3_作用域对比3.1_var的块级作用域3.2_let/const的块级作用域3.3_var、let、c…

基于springboot+vue的疫情管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…