会议OA项目之会议发布(多功能下拉框的详解)

news2024/11/29 4:30:31

🥳🥳Welcome Huihui's Code World ! !🥳🥳

接下来看看由辉辉所写的关于OA项目的相关操作吧

目录

🥳🥳Welcome Huihui's Code World ! !🥳🥳

一.主要功能点介绍

二.效果展示 

三.前端代码

jsp

js

四.后端代码 

实体类

dao

web

五.String转Date

六.多功能下拉框详细介绍

1.网站下载地址

2.使用步骤

3.效果演示


一.主要功能点介绍

①将表单中的信息提交后新增到t_oa_meeting_info表中去

②参与人员需要通过查询回显

③列席人员需要通过查询回显

⭐⭐④参与人员和列席人员都需要使用下拉复选框,把选中的id插入到t_oa_meeting_info中去

二.效果展示 

三.前端代码

jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<html>
<head>
<%@include file="/common/head.jsp"%>
<script type="text/javascript"
	src="/LayUi/static/js/meeting/addMeeting.js"></script>



</head>
<body style="margin-left: 40px; margin-right: 80px;">



	<form class="layui-form" action="">
		<!--会议标题  -->
		<div class="layui-form-item">
			<label class="layui-form-label">会议标题</label>
			<div class="layui-input-block">
				<input type="text" name="title" lay-verify="title"
					autocomplete="off" placeholder="请输入标题" class="layui-input">
			</div>
		</div>

		<!-- 会议内容 -->
		<div class="layui-form-item layui-form-text">
			<label class="layui-form-label">会议内容 </label>
			<div class="layui-input-block">
				<textarea placeholder="请输入内容" name="content" class="layui-textarea"></textarea>
			</div>
		</div>

		<!-- 参与者 -->
		<div class="layui-form-item">
			<label class="layui-form-label">参与者</label>
			<div class="layui-input-block">
				<select name="canyuze" xm-select="canyuze" >
					<option value="" selected="selected">----请选择----</option>

				</select>
			</div>
		</div>

		<!-- 列席者 -->
		<div class="layui-form-item">
			<label class="layui-form-label">列席者</label>
			<div class="layui-input-block">
				<select name="liexize" xm-select="liexize" >
					<option value="" selected="selected">----请选择----</option>

				</select>
			</div>
		</div>

		<!--主持人:拿到当前登录的用户  -->
		<div class="layui-form-item">
	    <label class="layui-form-label">主持人</label>
	    <div class="layui-input-block">
	      <input type="text" readonly="readonly" name="zhuchirenname" value="${user.name }" autocomplete="off" placeholder="请输入标题" class="layui-input">
	      <input type="hidden" name="zhuchiren" value="${user.id }"/>
	    </div>
	</div>

		<!--会议地点  -->
		<div class="layui-form-item">
			<label class="layui-form-label">会议地点</label>
			<div class="layui-input-block">
				<input type="text" name="location" lay-verify="title"
					placeholder="请输入地点" autocomplete="off" class="layui-input">
			</div>
		</div>

		<!-- 会议时间 -->
		<div class="layui-form">
			<div class="layui-form-item">
				<div class="layui-inline">
					<label class="layui-form-label">日期范围</label>
					<div class="layui-inline" id="test6">
						<div class="layui-input-inline">
							<input type="text" autocomplete="off" id="startTime"
								class="layui-input" placeholder="开始日期" name="startTime">
						</div>
						<div class="layui-form-mid">-</div>
						<div class="layui-input-inline">
							<input type="text" autocomplete="off" id="endTime"
								class="layui-input" placeholder="开始日期" name="endTime">
						</div>
					</div>
				</div>
			</div>
		</div>



		<!-- 备注-->
		<div class="layui-form-item layui-form-text">
			<label class="layui-form-label">备注 </label>
			<div class="layui-input-block">
				<textarea placeholder="请输入内容" name="remark" class="layui-textarea"></textarea>
			</div>
		</div>

 <div class="layui-form-item">
    <button class="layui-btn" id="btn_submit" lay-submit="" lay-filter="addmeeting">提交</button>
    <button class="layui-btn layui-btn-primary" lay-filter="reset">重置</button>
  </div>

</body>
</html>

js

let $, formSelects, laydate,form;
layui.use([ 'jquery', 'formSelects', 'laydate','form' ], function() {
	$ = layui.jquery, formSelects = layui.formSelects, laydate = layui.laydate,form=layui.form;
	initForm();//初始化表单
	//监听提交
	form.on('submit(addmeeting)', function(data){
		  let rs = data.field;
	  	  console.log("rs",rs);
	  	  
	  	  rs["methodName"]="add";
		  $.post("meetingInfo.action", rs, function(data){
			  console.log("data",data)
		   layer.alert(data.msg+"🥳🥳", {icon: 1})
		  }, "json");
		  return false;
		});
	//日期范围
	laydate.render({
		elem : '#test6'
		//设置开始日期、日期日期的 input 选择器
		//数组格式为 2.6.6 开始新增,之前版本直接配置 true 或任意分割字符即可
		,
		type:"datetime",
		range : [ '#startTime', '#endTime' ],

	});
	
});


//初始化表单
function initForm(){
//	添加多功能下拉框选项
	//第一个参数:指的是下拉框的xm-select值,
	//第二个参数:select是指全选
	//第三个参数:remove是指移除
	//第四个参数:reverse是指反选
	formSelects.btns('canyuze', [ 'select', 'remove', 'reverse' ]);
	formSelects.btns('liexize', [ 'select', 'remove', 'reverse' ]);
	$.getJSON("user.action", {
		methodName : "selectusers"
	}, function(rs) {
		console.log(rs);
		//使用本地的数组数据进行绑定
		formSelects.data('canyuze', 'local', {
			arr : rs.data
		});

		formSelects.data('liexize', 'local', {
			arr : rs.data
		});
	});
}

四.后端代码 

实体类

package com.wh.entity;

import java.util.Date;

public class MeetingInfo {
private long id;
private String title;
private String content;
private String canyuze;
private String liexize;
private String zhuchiren;
private String location;
private Date startTime;
private Date endTime;
private String fujian;
private int state;
private String seatPic;
private String remark;
private String auditor;


public MeetingInfo() {
	// TODO Auto-generated constructor stub
}


public MeetingInfo(long id, String title, String content, String canyuze, String liexize, String zhuchiren,
		String location, Date startTime, Date endTime, String fujian, int state, String seatPic, String remark,
		String auditor) {
	super();
	this.id = id;
	this.title = title;
	this.content = content;
	this.canyuze = canyuze;
	this.liexize = liexize;
	this.zhuchiren = zhuchiren;
	this.location = location;
	this.startTime = startTime;
	this.endTime = endTime;
	this.fujian = fujian;
	this.state = state;
	this.seatPic = seatPic;
	this.remark = remark;
	this.auditor = auditor;
}


public MeetingInfo(String title, String content, String canyuze, String liexize, String zhuchiren, String location,
		Date startTime, Date endTime, String fujian, int state, String seatPic, String remark, String auditor) {
	super();
	this.title = title;
	this.content = content;
	this.canyuze = canyuze;
	this.liexize = liexize;
	this.zhuchiren = zhuchiren;
	this.location = location;
	this.startTime = startTime;
	this.endTime = endTime;
	this.fujian = fujian;
	this.state = state;
	this.seatPic = seatPic;
	this.remark = remark;
	this.auditor = auditor;
}


public long getId() {
	return id;
}


public void setId(long id) {
	this.id = id;
}


public String getTitle() {
	return title;
}


public void setTitle(String title) {
	this.title = title;
}


public String getContent() {
	return content;
}


public void setContent(String content) {
	this.content = content;
}


public String getCanyuze() {
	return canyuze;
}


public void setCanyuze(String canyuze) {
	this.canyuze = canyuze;
}


public String getLiexize() {
	return liexize;
}


public void setLiexize(String liexize) {
	this.liexize = liexize;
}


public String getZhuchiren() {
	return zhuchiren;
}


public void setZhuchiren(String zhuchiren) {
	this.zhuchiren = zhuchiren;
}


public String getLocation() {
	return location;
}


public void setLocation(String location) {
	this.location = location;
}


public Date getStartTime() {
	return startTime;
}


public void setStartTime(Date startTime) {
	this.startTime = startTime;
}


public Date getEndTime() {
	return endTime;
}


public void setEndTime(Date endTime) {
	this.endTime = endTime;
}


public String getFujian() {
	return fujian;
}


public void setFujian(String fujian) {
	this.fujian = fujian;
}


public int getState() {
	return state;
}


public void setState(int state) {
	this.state = state;
}


public String getSeatPic() {
	return seatPic;
}


public void setSeatPic(String seatPic) {
	this.seatPic = seatPic;
}


public String getRemark() {
	return remark;
}


public void setRemark(String remark) {
	this.remark = remark;
}


public String getAuditor() {
	return auditor;
}


public void setAuditor(String auditor) {
	this.auditor = auditor;
}


@Override
public String toString() {
	return "MeetingInfo [id=" + id + ", title=" + title + ", content=" + content + ", canyuze=" + canyuze + ", liexize="
			+ liexize + ", zhuchiren=" + zhuchiren + ", location=" + location + ", startTime=" + startTime
			+ ", endTime=" + endTime + ", fujian=" + fujian + ", state=" + state + ", seatPic=" + seatPic + ", remark="
			+ remark + ", auditor=" + auditor + "]";
}
}

dao

package com.wh.dao;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.wh.entity.MeetingInfo;
import com.wh.entity.Permission;
import com.wh.entity.User;
import com.zking.util.BaseDao;
import com.zking.util.BuildTree;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
import com.zking.util.TreeVo;

public class MeetingInfoDao extends BaseDao<MeetingInfo> {
	//发布会议(增加)
	public int add(MeetingInfo t) throws Exception {
		String sql = "insert into t_oa_meeting_info"
				+ "(title,content,canyuze,liexize,zhuchiren,location,startTime,endTime,remark) "
				+ "value(?,?,?,?,?,?,?,?,?)";
		return super.executeUpdate(sql, t, new String[] { "title", "content", "canyuze", "liexize", "zhuchiren",
				"location", "startTime", "endTime", "remark" });
	}
}

web

package com.wh.web;

import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.ConvertUtils;

import com.wh.dao.MeetingInfoDao;
import com.wh.entity.MeetingInfo;
import com.wh.entity.User;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.MyDateConverter;
import com.zking.util.PageBean;
import com.zking.util.R;
import com.zking.util.ResponseUtil;
import com.zking.util.StringUtils;

import java.util.Date;

public class MeetingInfoAction extends ActionSupport implements ModelDriver<MeetingInfo> {
	private MeetingInfo meetingInfo = new MeetingInfo();
	private MeetingInfoDao mid = new MeetingInfoDao();

	// 增加
	public void add(HttpServletRequest req, HttpServletResponse resp) throws Exception {
			// 影响行数
			int add = mid.add(meetingInfo);
			if (add > 0) {
				ResponseUtil.writeJson(resp,R.ok(0, "发布会议成功"));
			} else {
				ResponseUtil.writeJson(resp,R.error(0, "发布会议失败"));
			}
	}
	

	@Override
	public MeetingInfo getModel() {
		ConvertUtils.register(new MyDateConverter(), Date.class);
		return meetingInfo;
	}

}

五.String转Date

可以看到,我们在实体类中的时间用的是Date类型,但是我们子啊表单中所获取到的数据是String类型的,如果直接将获取的数据添加到数据库中,便会报出一个异常!!

 大致意思就是无法将String类型转换成Date类型

 那么在这里,我们可以用到一个工具类(将转换的代码全部封装起来,那么以后在其他的地方就方便调用)

package com.zking.util;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.commons.beanutils.Converter;

public class MyDateConverter implements Converter {
	@Override
	public Object convert(Class type, Object value) {
		String dateStr = (String)value;
		SimpleDateFormat spdt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			Date date = spdt.parse(dateStr);
			return date;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

 

六.多功能下拉框详细介绍

1.网站下载地址

插件下载地址icon-default.png?t=N6B9https://github.com/hnzzmsf/layui-formSelects文档下载地址icon-default.png?t=N6B9https://hnzzmsf.github.io/example/example_v4.html#download

2.使用步骤

先进入插件下载的地址

 

 

 

 

之后只需要在需要使用的jsp界面上引用就行啦!! (这里我是把它引入到了公共页面)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<meta name="viewport" content="width=device-width,initial-scale=1.33,minimum-scale=1.0,maximum-scale=1.0">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="renderer" content="webkit">
<meta http-equiv="Content-Language" content="zh-CN">

<!-- 引入layui的css -->
<link rel="stylesheet" rev="stylesheet" href="${pageContext.request.contextPath}/static/js//layui/css/layui.css" type="text/css" media="all">
<!-- 引入layui的js -->
<script type="text/javascript" src="${pageContext.request.contextPath}/static/js/layui/layui.js"></script>
<!-- 引入formSelects的css -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/plugin/formSelects-v4.css" />
<!-- 引入formSelects的js -->
<script src="${pageContext.request.contextPath }/static/js/plugin/formSelects-v4.js" type="text/javascript" charset="utf-8"></script>

<base href="${pageContext.request.contextPath}/"  />

对了,在这里还需要说一个注意事项

我们可以看到,其中的'data',也就是数据,它里面的数据的基本格式是name及value


但是我们的数据库中的字段与它不一样(我们的是name和id) 

所以我们需要写一个sql语句,将数据库中数据转换成我们需要的数据格式!!

package com.wh.dao;

import java.util.List;
import java.util.Map;

import com.wh.entity.User;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;
/**
 * dao层
 * @author W
 *
 */
public class UserDao extends BaseDao<User> {
		//查询用作发布会议下拉框中的数据
		public List<Map<String, Object>> selectusers(User user, PageBean pageBean) throws Exception {
			  String sql="select id as value,name from t_oa_user";
			  return super.executeQuery(sql, pageBean);
				}
}

具体使用的js代码都在前端代码中的js中了

3.效果演示

好啦,今天的分享就到这了,希望能够帮到你呢!😊😊  

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

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

相关文章

【网络编程】传输层协议——TCP协议

文章目录 一、TCP协议格式1.1 TCP如何将报头与有效载荷进行分离&#xff1f;1.2 有效载荷如何向上交付&#xff1f;1.3 TCP报头的理解1.4 序号与确认序号1.4.1 网络不可靠问题1.4.2 32位序号1.4.2 32位确认序号 1.5 窗口大小1.6 六个标志位 二、确认应答机制&#xff08;ACK&am…

集成学习Bagging——随机森林模型

目录 1. Bagging方法的基本思想 2. 随机森林RandomForest 2.1 RandomForestRegressor的实现 2.2 随机森林回归器的参数 2.2.1 弱分类器结构 2.2.2 弱分类器数量 2.2.3 弱分类器训练的数据 2.2.4 其它参数 1. Bagging方法的基本思想 Bagging又称“袋装法”&#xff0c;它…

keyclaok~keycloak存到cookie中的值和session_state

keycloak存到cookie中的值 AUTH_SESSION_IDKEYCLOAK_IDENTITYKEYCLOAK_SESSION AUTH_SESSION_ID 用户的当前session_state&#xff0c;它是会话级的&#xff0c;关闭浏览器就没了 KEYCLOAK_IDENTITY 它是用户跨端登录的基础&#xff0c;它也是一个jwt串&#xff0c;解析后…

Scala学习(三)

2.8 浮点类型&#xff08;Float、Double&#xff09; Scala的浮点类型可以表示一个小数&#xff0c;比如123.4f&#xff0c;7.8&#xff0c;0.12等等。 1&#xff09;浮点型分类 数据类型 描述 Float [4] 32 位, IEEE 754标准的单精度浮点数 Double [8] 64 位 IEEE 754标准的双…

electron+vue3全家桶+vite项目搭建【24】设置应用图标,打包文件的图标

文章目录 引入实现步骤测试结果 引入 在electron中&#xff0c;我们可以通过electron-builder的配置文件来设置打包后的应用图标 实现步骤 因为mac环境下的图标需要特殊格式&#xff0c;这里我们可以利用electron-icon-builder进行配置 1.引入相关依赖 # 安装electron-ico…

Halcon 深度学习初探

什么是深度学习&#xff1f; 深度学习是一系列机器学习的方法集合&#xff0c;其算法结构类似于多层级的神经网络。通过对大量的训练样本图像的学习&#xff0c;提取其各个层次的特征&#xff0c;使网络具有判别和推理能力。 关于halcon中的深度学习&#xff1a; 自halcon17…

C#中的HashTable和Dictionary之间的区别

面试基础&#xff1a;C#中的HashTable和Dictionary之间的区别 HashTable和Dictionary都是用于存储数据的数据结构的类型。这两个数据结构都将存储的数据保存为键值对。

ESP32 VS Code开发环境“hello world“

程序员的世界有个不成文的约定&#xff0c;第一个程序先跑"hello world"&#xff0c;今天我们就在esp32上跑下hello world&#xff01; vs code配置 新建一个esp32-test文件夹&#xff0c;并在该文件夹下打开vs code&#xff1a; mkdir esp32-test cd est32-test …

小白到运维工程师的自学之路 第五十四集 (ansible自动化运维工具)

一、概述 Ansible是一种开源的自动化工具&#xff0c;用于自动化任务的执行、配置管理和应用部署。它采用基于Python编写的简单、轻量级的语法&#xff0c;可以通过SSH协议远程管理和配置多台计算机。 Ansible的主要特点包括&#xff1a; 1、简单易用&#xff1a;设计简单&a…

自动驾驶多任务框架 MultiTask V3、HybridNets和YOLOP比较

目标检测和分割是自动驾驶汽车感知系统的两个核心模块。它们应该具有高效率和低延迟,同时降低计算复杂性。目前,最常用的算法是基于深度神经网络的,这保证了高效率,但需要高性能的计算平台。 在自动驾驶汽车的场景下,大多使用的都是计算能力有限的嵌入式平台,这使得难以满…

Python 算法基础篇之散列查找算法:哈希表、哈希集合、哈希映射

Python 算法基础篇之散列查找算法&#xff1a;哈希表、哈希集合、哈希映射 引言 1. 散列查找算法概述2. 哈希表的概念3. 哈希集合的概念4. 哈希映射的概念5. 实例演示实例1&#xff1a;哈希表实例2&#xff1a;哈希集合实例3&#xff1a;哈希映射 总结 引言 散列查找算法是一种…

Spring Cloud 之 Gateway 网关

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

Web安全基础

Web安全基础 一、Web应用安全概述1.1、什么是Web应用安全&#xff1f;1.2、WEB应用安全的兴起1.3、常见web应用1.3.1、常见Web应用—前后台 1.4、Web应用安全与传统安全的区别 二、Web应用的基本架构2.1、Web应用的基本架构2.2、Web服务的提供者——Web中间件2.3、简单的Web服务…

javascript实现久久乘法口诀表、document、write、console、log

文章目录 正序乘法口诀表倒序乘法口诀表logconsoledocumentwrite 正序乘法口诀表 function multiplicationTable() {for (let i 1; i < 9; i) {let val ;for (let j 1; j < i; j) {document.write(j * i (i * j) &nbsp );val ${j}*${i}${i * j} ;}consol…

肯尼亚税务局如何利用RPA、AI等创新技术来推动税务合规增加税收?

在当今的数字化时代&#xff0c;税务部门的工作变得日益复杂。依赖手动程序为税务部门带来了巨大的困难&#xff0c;这使得在有效管理税收和实现收入目标上遇到了阻碍。手动流程往往效率低下&#xff0c;易出错&#xff0c;而且难以应对大规模的数据处理需求。如果不能解决该问…

泛在电力物联网、能源互联网与虚拟电厂

导读&#xff1a;从能源互联网推进受阻&#xff0c;到泛在电力物联网名噪一时&#xff0c;到虚拟电厂再次走向火爆&#xff0c;能源领域亟需更进一步的数智化发展。如今&#xff0c;随着新型电力系统建设推进&#xff0c;虚拟电厂有望迎来快速发展。除了国网和南网公司下属的电…

【Redis-01】Redis的五种数据类型

Redis五种数据类型 1.String1.1特点1.2命令1.3实例 2.Hash2.1特点2.2命令2.3实例 3.List3.1特点3.2命令3.3实例 4.Set4.1特点4.2命令4.3实例 5. SortedSet5.1特点5.2命令5.3实例 1.String 1.1特点 String类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类…

harbor仓库故障排除

harbor仓库无法用docker login登录&#xff0c;一直报x509: cannot validate certificate for 172.17.10.29 because it doesn’t contain any IP SANs 1、检查docker和harbor的服务是否启动 [rootk8s-harbor harbor]#systemctl status harbor.service [rootk8s-harbor harbo…

应对突发流量,如何快速为自建 K8s 添加云上弹性能力

作者&#xff1a;庄宇 以 Kubernetes 为代表的容器技术带来的是一种应用交付模式的变革&#xff0c;其正迅速成为全世界数据中心的统一 API。 为了保证业务持续稳定、用户访问不中断&#xff0c;高可用、高弹性等能力是应用架构设计不变的追求&#xff0c;多集群架构天然具备…

控制对文件访问

控制对文件访问 Linux文件权限 权限文件影响目录影响r读取文件内容列出目录内容w更改文件内容创建删除目录文件x作为命令执行目录可以变成当前工作目录 命令行管理文件系统权限 更改文件和目录权限 chmod chmod WhoWhatWhich file|directoryWho (u,g,o,a代表用户&#xff…