在线网站排名工具,wordpress安全分析,ppt模板清新淡雅免费下载,设计之家房屋装修游戏破解版目录
会议查询
是否参会
反馈详情 讲解思路 会议通知SQL语句分析 反馈详情SQL语句分析 后台代码编写 前端代码编写 效果预览
会议查询
MeetingFeedBack.java
package com.zking.oa.model;import org.lisen.mvc.util.AutoIncrement;
import org.lisen.mvc.util.…目录
会议查询
是否参会
反馈详情 讲解思路 会议通知SQL语句分析 反馈详情SQL语句分析 后台代码编写 前端代码编写 效果预览
会议查询
MeetingFeedBack.java
package com.zking.oa.model;import org.lisen.mvc.util.AutoIncrement;
import org.lisen.mvc.util.Key;
import org.lisen.mvc.util.Table;import com.zking.oa.util.CacheUtil;
Table(t_oa_meeting_feedback)
public class MeetiingFeedback {AutoIncrementKeyprivate Integer id;private Integer meetingId;private int personType;private int personId;private int result;private String reason;public Integer getId() {return id;}public void setId(Integer id) {this.id id;}public Integer getMeetingId() {return meetingId;}public void setMeetingId(Integer meetingId) {this.meetingId meetingId;}public int getPersonType() {return personType;}public void setPersonType(int personType) {this.personType personType;}public int getPersonId() {return personId;}public void setPersonId(int personId) {this.personId personId;}public int getResult() {return result;}public void setResult(int result) {this.result result;}public String getReason() {return reason;}public void setReason(String reason) {this.reason reason;}public MeetiingFeedback(Integer id, Integer meetingId, int personType, int personId, int result, String reason) {super();this.id id;this.meetingId meetingId;this.personType personType;this.personId personId;this.result result;this.reason reason;}public MeetiingFeedback() {super();// TODO Auto-generated constructor stub}Overridepublic String toString() {return MeetiingFeedback [id id , meetingId meetingId , personType personType , personId personId , result result , reason reason ];}/*** 获取参与人员类型描述是参与者还是列席者* return*/public String getMeetingJoinTypeName() {return CacheUtil.getMeetingJoinType(this.personId);}/*** 获取参与者名称* return*/public String getPersonName() {return CacheUtil.getUser(this.getPersonId()).getName();}}MeetingFeedBackDao.java
/*** 会议通知查询出我当前登陆用户需要参与的会议及会议的反馈信息参会、缺席以及未读* param back* param pageBean* return* throws SQLException * throws IllegalAccessException * throws InstantiationException */
Overridepublic ListMeetiingFeedback listMeetingFeedback(MeetiingFeedback meetingFeedback, PageBean pageBean) {String sql SELECT t1.id,t1.meetingId, t1.personType, t1.personId, t1.result, t1.reason\r\n FROM t_oa_meeting_feedback t1\r\n WHERE 11 ;ListObject param new ArrayListObject();if(meetingFeedback ! null meetingFeedback.getResult() ! null) {sql and t1.result ? ;param.add(meetingFeedback.getResult());}if(meetingFeedback ! null meetingFeedback.getMeetingId() ! null) {sql and t1.meetingId ? ;param.add(meetingFeedback.getMeetingId());}return DbTemplate.query(sql, param.toArray(), pageBean, MeetiingFeedback.class);}
MeetingFeedBackAction.java
/*** 查询会议相关人员的反馈信息* param req* param resp*/public void listMeetingFeedback(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean new PageBean();pageBean.setRequest(req);ListMeetiingFeedback list service.listMeetingFeedback(meetingFeedback, pageBean);CommonUtil.sendResponse(0, 会议反馈查询成功, pageBean.getTotal(), list, resp);} catch (Exception e) {e.printStackTrace();CommonUtil.sendResponse(0, 会议反馈查失败, resp);}}config.xml
?xml version1.0 encodingUTF-8?
!DOCTYPE config[!ELEMENT config (action*)!ELEMENT action (forward*)!ELEMENT forward EMPTY!ATTLIST actionpath CDATA #REQUIREDtype CDATA #REQUIRED!ATTLIST forwardname CDATA #REQUIREDpath CDATA #REQUIREDredirect (true|false) false
]
configaction typecom.zking.oa.action.UserAction path/userAction /actionaction typecom.zking.oa.action.PermissionAction path/permissionAction /actionaction typecom.zking.oa.action.MeetinginfoAction path/meetinginfoAction /actionaction typecom.zking.oa.action.MeetingAuditAction path/meetingAuditAction /actionaction typecom.zking.oa.action.meetingFeedbackAction path/meetingFeedbackAction /action/config
DateUtil.java
package com.zking.oa.util;import java.text.SimpleDateFormat;
import java.util.Date;/*** 日期帮助类* author lisensir*/
public final class DateUtil {private DateUtil() {}private static final String FORMCAT_STR yyyy-MM-dd HH:mm:ss;/*** 将日期格式化为yyyy-MM-dd HH:mm:ss格式的字符串* param date 需要格式化的日期* return*/public static String format(Date date) {if(date null) return ;SimpleDateFormat sdf new SimpleDateFormat(FORMCAT_STR);return sdf.format(date);}/*** 将日期格式化为yyyy-MM-dd HH:mm:ss格式的字符串* param date 需要格式化的日期* param format 指定的格式字符串* return*/public static String format(Date date, String format) {if(date null) return ;SimpleDateFormat sdf new SimpleDateFormat(format);return sdf.format(date);}public static void main(String[] args) {Date date new Date(System.currentTimeMillis());String s format(date);System.out.println(s);}}meetingNotify.jsp
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html
html
head
meta http-equivContent-Type contenttext/html; charsetUTF-8
titleInsert title here/title
% include file/common/head.jsp %
title会议通知/title
style
.layui-inline {margin-top: 20px;
}
.seatPicDiv {height: 180px;
}
.seatPic:active {height: 360px;
}.layui-layer-page .layui-layer-content {/* 解决送审对话框中人员选择下拉框不能完全显示问题 */overflow: visible;!important
}
/style/head
body!-- 查询条件 --div classlayui-inlinelabel classlayui-form-label标题/labeldiv classlayui-input-blockinput typetext nametitle idtitle placeholder会议标题 classlayui-input/div/divdiv classlayui-inlinebutton classlayui-btn idqueryMeetingInfoi classlayui-icon layui-icon-search/i查询/button/div!-- 用户信息表格 --table classlayui-hide idmeetingInfoTable lay-filtermeetingInfoTable/table!-- 使用了layui自定义语法当会议不能送审或排座时将按钮显示为禁用状态 --script typetext/html idtoolbarbutton classlayui-btn layui-btn-sm lay-eventfeeback反馈/button/script/body
/html
meetingNotify.js
script
let tablenull;
let $ null;
var row null;
let formSelects null;
let form null;
let layer null;layui.use([table,jquery,formSelects,form,layer], function(){table layui.table;$ layui.jquery;formSelects layui.formSelects;form layui.form;layer layui.layer;loadMeetingInfo();//查询我的会议信息$(#queryMeetingInfo).click(function() {loadMeetingInfo();});//对表格的功能按钮增加事件监听如排座送审反馈按钮table.on(tool(meetingInfoTable), function(obj) {if(obj.event feeback) {openFeebackDialog(obj.data);}});});var row null;
function openFeebackDialog(data) {row data;layer.open({type: 2, //layer提供了5种层类型。可传入的值有0信息框默认1页面层2iframe层3加载层4tips层title:会议反馈,area: [654px, 420px], //宽高skin: layui-layer-rim, //样式类名content: ctx /jsp/meeting/addFeedBack.jsp, //弹出内容。可以传入普通的html内容还可以指定DOM更可以随着type的不同而不同btn: [确定, 关闭],yes: function(index,layero) {let formData $(layero).find(iframe)[0].contentWindow.getFormData();console.log(formData);addMeetingFeedback(formData);},btn2: function(index,layero){}});
}//查询会议信息
function loadMeetingInfo() {table.render({elem: #meetingInfoTable,url: ctx /meetinginfoAction.action?methodNamelistRelatedMeetingInfoByUserId,cols: [[{field:id, width:80, title: ID},{field:title, width:180, title: 会议标题, sort: true},{field:location, width:180, title: 会议地点, sort: true},{field:startTime, width:180, title: 开始时间},{field:endTime, width:180, title: 结束时间},{field:meetingState, width:180, title: 会议状态},{fixed:right, title: 操作, width:200, align:left, unresize: true, toolbar:#toolbar}]],page: true,request: {pageName: page,limitName: rows},method: post,where: {title: $(#title).val()},loading: true,});
}
/script
是否参会
MeetingFeedBackDao.java
/*** 新增会议反馈* param back*/public void addMeetingFeedback(MeetiingFeedback back) {String sqlinsert into t_oa_meeting_feedback(meetingId,personType,personId,result,reason) values(?,?,?,?,?);super.executeUpdate(sql, new Object[] {back.getMeetingId(),back.getPersonType(),back.getPersonId(),back.getResult(),back.getReason()});}
MeetingFeedBackAction.java
/*** 增加会议反馈* param req* param resp*/public void addMeetingFeedback(HttpServletRequest req, HttpServletResponse resp) {try {service.addMeetingFeedback(meetingFeedback);CommonUtil.sendResponse(0, 会议反馈成功, resp);} catch (Exception e) {e.printStackTrace();CommonUtil.sendResponse(0, 会议反馈失败, resp);}}
meetingNotify.js
script
let tablenull;
let $ null;
var row null;
let formSelects null;
let form null;
let layer null;layui.use([table,jquery,formSelects,form,layer], function(){table layui.table;$ layui.jquery;formSelects layui.formSelects;form layui.form;layer layui.layer;loadMeetingInfo();//查询我的会议信息$(#queryMeetingInfo).click(function() {loadMeetingInfo();});//对表格的功能按钮增加事件监听如排座送审反馈按钮table.on(tool(meetingInfoTable), function(obj) {if(obj.event feeback) {openFeebackDialog(obj.data);}});});var row null;
function openFeebackDialog(data) {row data;layer.open({type: 2, //layer提供了5种层类型。可传入的值有0信息框默认1页面层2iframe层3加载层4tips层title:会议反馈,area: [654px, 420px], //宽高skin: layui-layer-rim, //样式类名content: ctx /jsp/meeting/addFeedBack.jsp, //弹出内容。可以传入普通的html内容还可以指定DOM更可以随着type的不同而不同btn: [确定, 关闭],yes: function(index,layero) {let formData $(layero).find(iframe)[0].contentWindow.getFormData();console.log(formData);addMeetingFeedback(formData);},btn2: function(index,layero){}});
}//增加会议反馈
function addMeetingFeedback(param) {$.ajax({url: ctx /meetingFeedbackAction.action?methodNameaddMeetingFeedback,data: param,type: post,dataType: json,success: function(resp) {layer.msg(resp.msg,{icon: 1,time: 2000 //2秒关闭如果不配置默认是3秒},function() {layer.closeAll();});}});
}//查询会议信息
function loadMeetingInfo() {table.render({elem: #meetingInfoTable,url: ctx /meetinginfoAction.action?methodNamelistRelatedMeetingInfoByUserId,cols: [[{field:id, width:80, title: ID},{field:title, width:180, title: 会议标题, sort: true},{field:location, width:180, title: 会议地点, sort: true},{field:startTime, width:180, title: 开始时间},{field:endTime, width:180, title: 结束时间},{field:meetingState, width:180, title: 会议状态},{fixed:right, title: 操作, width:200, align:left, unresize: true, toolbar:#toolbar}]],page: true,request: {pageName: page,limitName: rows},method: post,where: {title: $(#title).val()},loading: true,});
}
/script
addFeedBack.jsp
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html
html
head
%include file/common/head.jsp %
/head
style
body{margin:5px;
}
/stylebody
div stylepadding:10px;!-- 反馈表单 --form classlayui-form layui-form-pane lay-filterbackinput typehidden namemeetingId idmeetingId/input typehidden namepersonId value${sessionScope.user.id }/div classlayui-form-itemlabel classlayui-form-label人员类型/labeldiv classlayui-input-block!-- select idpersonType namepersonTypeoption value请选择人员类型/optionoption value1参会/optionoption value2列席/option/select --input typehidden namepersonType idpersonType/input typetext idpersonTypeName autocompleteoff readonlyreadonly classlayui-input/div/divdiv classlayui-form-item panelabel classlayui-form-label反馈结果/labeldiv classlayui-input-block !--select idresult nameresultoption value请选择反馈结果/optionoption value1参加/optionoption value2不参加/option/select --input typeradio nameresult value1 title参加 checkedinput typeradio nameresult value2 title不参加/div/divdiv classlayui-form-item layui-form-textlabel classlayui-form-label不参与会议的原因/labeldiv classlayui-input-blocktextarea placeholder请输入内容 namereason classlayui-textarea/textarea/div/div/form/div
/body
/html
addFeedBack.js
script
let form null;
layui.use([jquery, form], function() {let $ layui.$;form layui.form;//获取会议记录信息let data parent.row || {};//获取当前登录用户IDlet currentUserId ${sessionScope.user.id};//设置会议ID$(#meetingId).val(data.id);//判断当前用户是存在与参与者中如果是则设置人员类型为参与者let canyuze data.canyuze.split(,);if(canyuze.indexOf(currentUserId) -1) {$(#personTypeName).val(参与者);$(#personType).val(1);}//判断当前用户是存在与列席者中如果是则设置人员类型为列席者let liexize data.liexize.split(,);if(liexize.indexOf(currentUserId) -1) {$(#personTypeName).val(列席者);$(#personType).val(2);}
});//获取表单数据在父窗口会议通知会调用该方法获取表单数据用于提交
function getFormData() {return form.val(back);
}
/script
反馈详情
MeetingFeedBackDao.java /*** 根据会议ID获取会议反馈详情信息* param back* return*/SuppressWarnings(unchecked)public ListMapString,Object queryBackPersons(MeetiingFeedback back){String sqlselect f.result,GROUP_CONCAT(u.name) as name from t_oa_meeting_feedback f,t_oa_user u where f.personIdu.id and meetingIdback.getMeetingId() group by f.result;System.out.println(sql);return super.executeQuery(sql, null, new convertMapString,Object() {Overridepublic ListMapString, Object forEach(ResultSet rs) throws Exception {return CommonUtils.toList(rs);}});}
MeetingFeedBackAction.java
/*** 查询会议相关人员的反馈信息* param req* param resp*/public void listMeetingFeedback(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean new PageBean();pageBean.setRequest(req);ListMeetiingFeedback list service.listMeetingFeedback(meetingFeedback, pageBean);CommonUtil.sendResponse(0, 会议反馈查询成功, pageBean.getTotal(), list, resp);} catch (Exception e) {e.printStackTrace();CommonUtil.sendResponse(0, 会议反馈查失败, resp);}}
myMeeting.jsp
% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html
html
head
meta http-equivContent-Type contenttext/html; charsetUTF-8
% include file/common/head.jsp %
titleInsert title here/title
style
.layui-inline {margin-top: 20px;
}
.seatPicDiv {height: 180px;
}
.seatPic:active {height: 360px;
}.layui-layer-page .layui-layer-content {/* 解决送审对话框中人员选择下拉框不能完全显示问题 */overflow: visible;!important
}
/style/head
body!-- 查询条件 --div classlayui-inlinelabel classlayui-form-label标题/labeldiv classlayui-input-blockinput typetext nametitle idtitle placeholder会议标题 classlayui-input/div/divdiv classlayui-inlinebutton classlayui-btn idqueryMeetingInfoi classlayui-icon layui-icon-search/i查询/button/div!-- 用户信息表格 --table classlayui-hide idmeetingInfoTable lay-filtermeetingInfoTable/table!-- 使用了layui自定义语法当会议不能送审或排座时将按钮显示为禁用状态 --script typetext/html idtoolbar{{# if(d.state1 || d.state3){ }}button classlayui-btn layui-btn-sm lay-eventseat排座/buttonbutton classlayui-btn layui-btn-sm lay-eventsend送审/button{{# } else{ }}button classlayui-btn layui-btn-sm layui-btn-disabled lay-eventseat排座/buttonbutton classlayui-btn layui-btn-sm layui-btn-disabled lay-eventsend送审/button{{# } }}button classlayui-btn layui-btn-sm lay-eventfeedback反馈/button/script!-- 送审对话框内容 --div idauditDiv styledisplay:none;form stylemargin:20px 15px; classlayui-form layui-form-pane idsendAudit lay-filtersendAuditdiv classlayui-inlinelabel classlayui-form-label送审人/labeldiv classlayui-input-inlineselect nameauditPerson xm-selectauditPerson xm-select-radiooption value disableddisabled--请选择--/option/select/divdiv classlayui-input-inline!-- button idbtn_auditor classlayui-btn lay-filtersendAudit送审/button --button typebutton idsendAudit lay-submit lay-filtersendAudit classlayui-btn layui-btn-normal送审/button/div/div/form/div/body
/html
myMeeting.js
script
let tablenull;
let $ null;
var row null;
let formSelects null;
let form null;
let layer null;layui.use([table,jquery,formSelects,form,layer], function(){table layui.table;$ layui.jquery;formSelects layui.formSelects;form layui.form;layer layui.layer;loadMeetingInfo();//查询我的会议信息$(#queryMeetingInfo).click(function() {loadMeetingInfo();});//对表格的功能按钮增加事件监听如排座送审反馈按钮table.on(tool(meetingInfoTable), function(obj) {//排座if(obj.event seat) {//对于新建或驳回状态的会议可以执行排座if(obj.data.state 1 || obj.data.state 3) {openSeatPic(obj.data.id);} else {layer.msg(对于审核通过结束取消进行中等状态的会议不能再执行排座)}}//送审if(obj.event send) {if(obj.data.seatPic) {//对于新建或驳回状态的会议可以送审if(obj.data.state 1 || obj.data.state 3) {openSendAudit(obj.data.id);} else {layer.msg(对于审核通过结束取消进行中等状态的会议不能执行送审);}} else {layer.msg(未进行排座不能送审);}}//查看反馈if(obj.event feedback) {openFeedbackInfo(obj.data);}});});function openFeedbackInfo(data) {let ignore [0,1,2,3];if(ignore.indexOf(data.state) 0) {layer.msg(对于新建、驳回、取消、待审状态下的会议不用查看反馈);return;}debugger;layer.open({type: 2, //layer提供了5种层类型。可传入的值有0信息框默认1页面层2iframe层3加载层4tips层title:反馈详情,area: [600px, 650px], //宽高skin: layui-layer-rim, //样式类名content: ctx/jsp/meeting/meetingFeedback.jsp?meetingId data.id,btn:[关闭],yes:function(index,layero){layer.closeAll();}});
}// 打开送审的对话框执行送审
function openSendAudit(id) {let index layer.open({type: 1, //layer提供了5种层类型。可传入的值有0信息框默认1页面层2iframe层3加载层4tips层title: 送审,area: [660px, 200px], //宽高skin: layui-layer-rim, //样式类名content: $(#auditDiv) //送审对应的div});//初始化送审人员选择下拉列表的数据formSelects.data(auditPerson, server, {url: ctx /meetinginfoAction.action?methodNamelistMeetingMember});//添加送审按钮的监听事件发送ajax请求执行送审form.on(submit(sendAudit), function(data) {console.log(data);data.field[id] id;console.log(data);$.ajax({url: ctx /meetinginfoAction.action?methodNamesendAudit,data: data.field,type: post,dataType: json,success: function(resp) {layer.msg(resp.msg);layer.close(index);//送审成功更新我的会议列表loadMeetingInfo();}})});
}//会议排座
function openSeatPic(id) {row null;layer.open({type: 2, //layer提供了5种层类型。可传入的值有0信息框默认1页面层2iframe层3加载层4tips层title: 会议排座,area: [660px, 350px], //宽高skin: layui-layer-rim, //样式类名content: ctx/jsp/meeting/seatPic.jsp?idid});
};//查询会议信息
function loadMeetingInfo() {table.render({elem: #meetingInfoTable,url: ctx /meetinginfoAction.action?methodNamelistMeetingInfo,cols: [[{field:id, width:60, title: ID},{field:title, width:180, title: 会议标题, sort: true},{field:location, width:180, title: 会议地点, sort: true},{field:startTime, width:160, title: 开始时间},{field:endTime, width:160, title: 结束时间},{field:meetingState, width:180, title: 会议状态},//显示排座图片{field: seatPic, title: 会议排座, width: 180,templet:function(d){if(nulld.seatPic)return 尚未排座;elsereturn img height180px srcd.seatPic/;}},{field: , title: 操作, width: 250, toolbar:#toolbar}]],page: true,request: {pageName: page,limitName: rows},method: post,where: {title: $(#title).val()},loading: true,});
}
/script