会议OA之我的会议(查询)
目录
一、功能介绍
二、我的会议SQL编写
三、我的会议后台
实体类
dao方法
web层
xml配置
js代码
四、我的会议前端
jsp页面
界面展示
五、取消会议
dao方法
web层
js
一、功能介绍
我的会议:当前登录账号,是 某会议 主持人,则查询出来
所需表:t_oa_meeting_info
二、我的会议SQL编写
--状态:0取消会议 1新建 2待审核 3驳回 4待开 5进行中 6开启投票 7结束会议,默认值为1
最初版查询语句
select a.*,a.auditor,b.`name` zhuchiren,c.`name` auditorname from
t_oa_meeting_info a,
t_oa_user b,
t_oa_user c
where a.zhuchiren=b.id and a.auditor=c.id;
第二版
用户表分析,会议没有审批人也要查询出来,name会议信息表就作为主表,用户表作为从表:用会议信息表左外链接
select a.*,a.auditor,b.`name` zhuchiren,c.`name` auditorname fromt_oa_meeting_info a
inner join t_oa_user b on a.zhuchiren=b.id
left join t_oa_user c on a.auditor=c.id
最终版
1.时间字段要格式化,否则页面会显示一串数字
2.会议状态是数字,前端要显示会议状态描述
select a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren,
b.`name` zhuchirenname,
a.location,
DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') startTime,
DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') endTime,
a.state,(case a.statewhen 0 then '取消会议'when 1 then '新建'when 2 then '待审核'when 3 then '驳回'when 4 then '待开'when 5 then '进行中'when 6 then '开启投票'when 7 then '结束会议'else '其他' end
) meetingstate,
a.seatPic,a.remark,a.auditor,
c.`name` auditorname from t_oa_meeting_info a
inner join t_oa_user b on a.zhuchiren=b.id
left join t_oa_user c on a.auditor=c.id
三、我的会议后台
实体类
package com.maomao.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 Integer state;private String seatPic;private String remark;private String auditor;public String getAuditor() {return auditor;}public void setAuditor(String auditor) {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 Integer getState() {return state;}public void setState(Integer 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 MeetingInfo() {super();// TODO Auto-generated constructor stub}@Overridepublic 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 + "]";}}
dao方法
//通用的会议查询SQL语句,包含会议信息表数据,主持人姓名、审批人姓名、会议状态private String getSQL() {return "SELECT a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren,b.`name`,a.location\r\n" + ",DATE_FORMAT(a.startTime,'%Y-%m-%d %H:%i:%s') as startTime\r\n" + ",DATE_FORMAT(a.endTime,'%Y-%m-%d %H:%i:%s') as endTime\r\n" + ",a.state\r\n" + ",(case a.state\r\n" + "when 0 then '取消会议'\r\n" + "when 1 then '新建'\r\n" + "when 2 then '待审核'\r\n" + "when 3 then '驳回'\r\n" + "when 4 then '待开'\r\n" + "when 5 then '进行中'\r\n" + "when 6 then '开启投票'\r\n" + "else '结束会' end\r\n" + ") as meetingState\r\n" + ",a.seatPic,a.remark,a.auditor,c.`name` as auditorName\r\n" + "FROM t_oa_meeting_info a\r\n" + "inner join t_oa_user b on a.zhuchiren = b.id\r\n" + "left JOIN t_oa_user c on a.auditor = c.id where 1=1 ";}// 我的会议public List<Map<String, Object>> myInfos(MeetingInfo info, PageBean pageBean) throws Exception {String sql = getSQL();String title = info.getTitle();if(StringUtils.isNotBlank(title)) {sql += " and title like '%"+title+"%'";}//根据当前登陆用户ID作为主持人字段的条件sql+=" and zhuchiren="+info.getZhuchiren();//按照会议ID降序排序sql+=" order by a.id desc";System.out.println(sql);return super.executeQuery(sql, pageBean);}// 状态:0取消会议 1新建 2待审核 3驳回 4待开 5进行中 6开启投票 7结束会议,默认值为1public int updatezt(MeetingInfo m) throws Exception {String sql = "update t_oa_meeting_info set state=? where id = ?";return super.executeUpdate(sql, m, new String[] {"state","id"});}
web层
package com.maomao.web;import java.io.IOException;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.ConvertUtils;import com.maomao.dao.MeetingInfoDao;
import com.maomao.entity.MeetingInfo;
import com.zking.framework.ActionSupport;
import com.zking.framework.ModelDriver;
import com.zking.util.Base64ImageUtils;
import com.zking.util.MyDateConverter;
import com.zking.util.PageBean;
import com.zking.util.PropertiesUtil;
import com.zking.util.R;
import com.zking.util.ResponseUtil;public class MeetingInfoAction extends ActionSupport implements ModelDriver<MeetingInfo>{private MeetingInfo info = new MeetingInfo();private MeetingInfoDao meetingInfoDao = new MeetingInfoDao();@Overridepublic MeetingInfo getModel() {//方式二:ConvertUtils.register(new MyDateConverter(),Date.class);return info;}// 我的会议public String myInfos(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> infos = meetingInfoDao.myInfos(info, pageBean);ResponseUtil.writeJson(resp, R.ok(0, "我的会议查询成功!!!", pageBean.getTotal(), infos));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "我的会议查询失败!!!"));} catch (Exception e1) {e1.printStackTrace();}}return null;}}
xml配置
<?xml version="1.0" encoding="UTF-8"?>
<config><action path="/user" type="com.maomao.web.UserAction"></action><action path="/permission" type="com.maomao.web.PermissionAction"></action><action path="/info" type="com.maomao.web.MeetingInfoAction"></action>
</config>
js代码
let layer,table,$,form;
let row;
layui.use(['layer','table','jquery','form'],function(){layer=layui.layer,table=layui.table,form=layui.form,$=layui.jquery;initTable();//查询事件$('#btn_search').click(function(){query();});});//1.初始化数据表格
function initTable(){table.render({ //执行渲染elem: '#tb', //指定原始表格元素选择器(推荐id选择器)height: 400, //自定义高度loading: false, //是否显示加载条(默认 true)cols: [[ //设置表头{field: 'id', title: '会议编号', width: 90},{field: 'title', title: '会议标题', width: 120},{field: 'location', title: '会议地点', width: 140},{field: 'startTime', title: '开始时间', width: 120},{field: 'endTime', title: '结束时间', width: 120},{field: 'meetingState', title: '会议状态', width: 120},{field: 'seatPic', title: '会议排座', width: 120,templet: function(d){if(d.seatPic==null || d.seatPic=="")return "尚未排座";elsereturn "<img width='120px' src='"+d.seatPic+"'/>";}},{field: 'auditName', title: '审批人', width: 120},{field: '', title: '操作', width: 200,toolbar:'#tbar'},]]});
}//2.点击查询
function query(){table.reload('tb', {url: $("#ctx").val()+'/info.action', //请求地址method: 'POST', //请求方式,GET或者POSTloading: true, //是否显示加载条(默认 true)page: true, //是否分页where: { //设定异步数据接口的额外参数,任意设'methodName':'myInfos','zhuchiren':$('#zhuchiren').val(),'title':$('#title').val(),}, request: { //自定义分页请求参数名pageName: 'page', //页码的参数名称,默认:pagelimitName: 'rows' //每页数据量的参数名,默认:limit},done: function (res, curr, count) {console.log(res);}});//工具条事件table.on('tool(tb)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"row = obj.data; //获得当前行数据var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)console.log(row);if(layEvent === 'seat'){ //会议排座} else if(layEvent === 'send'){ //送审} else if(layEvent==="back"){ //反馈详情} else {//删除layer.confirm('确认要删除吗?', {icon: 3, title:'提示'}, function(index){$.post($("#ctx").val()+'/info.action',{'methodName':'updatezt','state':0,'id':row.id},function(rs){if(rs.success){//调用查询方法刷新数据query();}else{layer.msg(rs.msg,function(){});}},'json');layer.close(index);});}});
四、我的会议前端
jsp页面
<%@ 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="${pageContext.request.contextPath }/static/js/meeting.js"></script>
<title>用户管理</title>
</head>
<style>
body{margin:15px;
}.layui-table-cell {height: inherit;}.layui-layer-page .layui-layer-content { overflow: visible !important;}
</style>
<body>
<!-- 搜索栏 -->
<div class="layui-form-item" style="margin:15px 0px;"><div class="layui-inline"><label class="layui-form-label">会议标题</label><div class="layui-input-inline"><input type="hidden" id="zhuchiren" value="${user.id }"/><input type="text" id="title" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><button id="btn_search" type="button" class="layui-btn"><i class="layui-icon layui-icon-search"></i> 查询</button></div>
</div>
<!-- 数据表格 -->
<table id="tb" lay-filter="tb" class="layui-table" style="margin-top:-15px"></table>
<!-- 对话框(送审) -->
<div id="audit" style="display:none;"><form style="margin:20px 15px;" class="layui-form layui-form-pane" lay-filter="audit"><div class="layui-inline"><label class="layui-form-label">送审人</label><div class="layui-input-inline"><input type="hidden" id="meetingId" value=""/><select id="auditor" style="poistion:relative;z-index:1000"><option value="">---请选择---</option></select></div><div class="layui-input-inline"><button id="btn_auditor" class="layui-btn">送审</button></div></div></form>
</div>
<!-- 对话框(反馈详情) -->
<div id="feedback" style="display:none;padding:15px;"><fieldset class="layui-elem-field layui-field-title"><legend>参会人员</legend></fieldset><blockquote class="layui-elem-quote" id="meeting_ok"></blockquote><fieldset class="layui-elem-field layui-field-title"><legend>缺席人员</legend></fieldset><blockquote class="layui-elem-quote" id="meeting_no"></blockquote><fieldset class="layui-elem-field layui-field-title"><legend>未读人员</legend></fieldset><blockquote class="layui-elem-quote" id="meeting_noread"></blockquote>
</div>
<script type="text/html" id="tbar">{{# if(d.state==1 || d.state==3){ }}<a class="layui-btn layui-btn-xs" lay-event="seat">会议排座</a><a class="layui-btn layui-btn-xs" lay-event="send">送审</a><a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="del">删除</a>{{# } }}{{# if(d.state!=1 && d.state!=2 && d.state!=3){ }}<a class="layui-btn layui-btn-xs" lay-event="back">反馈详情</a>{{# } }}
</script>
</body>
</html>
界面展示
五、取消会议
这里的删除是取消会议
把状态修改为0
dao方法
// 状态:0取消会议 1新建 2待审核 3驳回 4待开 5进行中 6开启投票 7结束会议,默认值为1public int updatezt(MeetingInfo m) throws Exception {String sql = "update t_oa_meeting_info set state=? where id = ?";return super.executeUpdate(sql, m, new String[] {"state","id"});}
web层
//我的会议:取消会议public String updatezt(HttpServletRequest req, HttpServletResponse resp) {try {int rs = meetingInfoDao.updatezt(info);if (rs > 0) {ResponseUtil.writeJson(resp, R.ok(200, "会议取消成功"));} else {ResponseUtil.writeJson(resp, R.error(0, "会议取消失败"));}} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "会议取消失败"));} catch (Exception e1) {e1.printStackTrace();}}return null;}
js
//工具条事件table.on('tool(tb)', function(obj){ //注:tool 是工具条事件名,test 是 table 原始容器的属性 lay-filter="对应的值"row = obj.data; //获得当前行数据var layEvent = obj.event; //获得 lay-event 对应的值(也可以是表头的 event 参数对应的值)var tr = obj.tr; //获得当前行 tr 的 DOM 对象(如果有的话)console.log(row);if(layEvent === 'seat'){ //会议排座} else if(layEvent === 'send'){ //送审} else if(layEvent==="back"){ //反馈详情} else {//删除layer.confirm('确认要删除吗?', {icon: 3, title:'提示'}, function(index){$.post($("#ctx").val()+'/info.action',{'methodName':'updatezt','state':0,'id':row.id},function(rs){if(rs.success){//调用查询方法刷新数据query();}else{layer.msg(rs.msg,function(){});}},'json');layer.close(index);});}});
效果展示
会议OA之我的会议(查询)相关推荐
- 会议OA项目(待开会议历史会议所有会议)
文章目录 一.会议OA项目名词介绍 二.SQL编写 待开会议SQL 所有 ...
- 会议OA项目(我的会议中的会议排座送审功能)
文章目录 一.会议排座插件介绍 1)会议项目为什么要有会议排座的功能 2)完成在页面上元素的拖动功能 2.1分析现有素材的不足 2.2修改现有素材的不足⬇⬇⬇ 2.3 content需要传递到后台,并 ...
- 会议OA之我的会议(排座送审)
目录 一.排座 后台代码 dao方法 web层 js代码 配置文件 前端代码 二.送审 后台代码 dao方法 web层 js代码 一.排座 实现思路 1.查询出本场会议中的所有参与人员 2.需要完成在 ...
- 会议OA(待开会议所有会议)
目录 待开会议: 所有会议 编辑 待开和所有会议功能实现 前台 哈喽大家好~~我来啦~~今天给大家分享我们会议0A的最后一期啦!!! 是我们会议的待开会议和我们的所有会议!!! 待开会议: 与我的会 ...
- 会议OA之我的会议(会议排座送审)
目录 前言: 2.我的会议: 2.1实现的特色功能: 2.2思路: 2.3功能实现: 我的会议页面:myMeeting.jsp myMeeting.js Dao方法 在mvc中配置info信息 Mee ...
- 会议OA项目之代开会议全部会议
目录: 一,待开会议SQL编写 二,全部会议SQL编写 三,待开会议功能开发 四,所有会议功能开发 一,待开会议SQL编写 待开会议sql编写其实与我的会议sql大同小异,主要区别在于:待开会议需要匹 ...
- 会议OA项目--我的会议
目录 一.我的会议sql语句编写 二.我的会议后台代码 三.我的会议前台代码 四.异常处理 一.我的会议sql语句编写 >我的会议< select a.id,a.title,a.cont ...
- 会议OA之待开会议所有会议
目录 一.待开会议 1.SQL语句 2.dao方法 3.web层 4.js代码 5.jsp文件 6.运行效果 二.所有会议 1.SQL语句 2.dao方法 3.web层 4.js代码 5.jsp 6. ...
- 会议OA项目(项目原型图介绍发布会议功能)
目录 一.会议OA项目介绍 为什么要开发OA会议管理 会议OA管理的作用 二.项目原型图介绍 1)会议管理 2)投票管理 3)会议室管理 三.数据库表结构 四.发布会议功能&多功能下拉框 La ...
最新文章
- 在计算机视觉方向如何快速提升自己?
- Nautilus启动报错
- android HOME键的监听
- 播放图像有锯齿_反隔行操作
- oracle ssh测试不通过,ssh 连接不上 oracle linux 7.2
- onclick 调用php,AJAX调用PHP简单应用
- 《Redis官方文档》Redis调试指南
- libgo 支持mysql,loadrunner通过使用libmysql.dll完成mysql的测试-Go语言中文社区
- 【Vue 3.0 新特性(三)】Vite 工具
- Servlet之过滤器详解
- WIN和LIN环境下对拍程序
- 在Matplotlib图中插入LaTex公式
- addEventListener:为单个事件注册多个事件事件处理程序
- 汇总3种获取水系数据的途径
- 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇
- FACES纳新|2021春纳线上分享会等你来
- MATLAB基础应用精讲-【基础知识篇】MATLAB中的标点符号
- 苹果一直显示无法连接服务器,苹果6plus无法连接服务器是怎么回事?
- 微信小程序开发MAP(地图)
- API网易考拉,根据ID取商品详情