OA项目之我的会议(查询&会议排座&送审)(一)

简介: OA项目之我的会议(查询&会议排座&送审)

思路:

  • 关键性会议SQL的编写
  • 后台实现
  • 前台实现

会议查询

MeetingInfoDao.java

//  通用的会议查询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);
  }

MeetingInfoAction.java

// 我的会议
  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;
  }

myMeeting.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%@ include file="/common/head.jsp" %>
<title>Insert 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 class="layui-inline">
    <label class="layui-form-label">标题:</label>
    <div class="layui-input-block">
      <input type="text" name="title" id="title" placeholder="会议标题" class="layui-input">
    </div>
  </div>
  <div class="layui-inline">
    <button class="layui-btn" id="queryMeetingInfo"><i class="layui-icon layui-icon-search"></i>查询</button>
  </div>
  <!-- 用户信息表格 -->
  <table class="layui-hide" id="meetingInfoTable" lay-filter="meetingInfoTable"></table>
  <!-- 使用了layui自定义语法,当会议不能送审或排座时将按钮显示为禁用状态 -->
  <script type="text/html" id="toolbar">
     {{# if(d.state==1 || d.state==3){ }}
       <button class="layui-btn layui-btn-sm" lay-event="seat">排座</button>
       <button class="layui-btn layui-btn-sm" lay-event="send">送审</button>
       {{# } else{ }}
     <button class="layui-btn layui-btn-sm layui-btn-disabled" lay-event="seat">排座</button>
       <button class="layui-btn layui-btn-sm layui-btn-disabled" lay-event="send">送审</button>
       {{# } }}
       <button class="layui-btn layui-btn-sm" lay-event="feedback">反馈</button>
  </script>
  <!-- 送审对话框内容 -->
  <div id="auditDiv" style="display:none;">
    <form style="margin:20px 15px;" class="layui-form layui-form-pane" id="sendAudit" lay-filter="sendAudit">
      <div class="layui-inline">
         <label class="layui-form-label">送审人</label>
         <div class="layui-input-inline">
            <select name="auditPerson" xm-select="auditPerson" xm-select-radio>
              <option value="" disabled="disabled">--请选择--</option>
            </select>
         </div>
         <div class="layui-input-inline">
           <!-- <button id="btn_auditor" class="layui-btn" lay-filter="sendAudit">送审</button> -->
           <button type="button" id="sendAudit" lay-submit lay-filter="sendAudit" class="layui-btn layui-btn-normal">送审</button>
         </div>
      </div>
    </form>
  </div>
</body>
</html>

myMeeting.js

<script>
let table=null;
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(页面层)2(iframe层)3(加载层)4(tips层)
        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(页面层)2(iframe层)3(加载层)4(tips层)
        title: '送审',
        area: ['660px', '200px'],   //宽高
        skin: 'layui-layer-rim',    //样式类名
        content: $("#auditDiv")     //送审对应的div
    });
  //初始化送审人员选择下拉列表的数据
  formSelects.data('auditPerson', 'server', {
      url: ctx + '/meetinginfoAction.action?methodName=listMeetingMember'
  });
  //添加送审按钮的监听事件,发送ajax请求执行送审
  form.on('submit(sendAudit)', function(data) {
    console.log(data);
    data.field["id"] = id;
    console.log(data);
    $.ajax({
      url: ctx + '/meetinginfoAction.action?methodName=sendAudit',
      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(页面层)2(iframe层)3(加载层)4(tips层)
         title: '会议排座',
         area: ['660px', '350px'],   //宽高
         skin: 'layui-layer-rim',    //样式类名
         content: ctx+'/jsp/meeting/seatPic.jsp?id='+id
    });
};
//查询会议信息
function loadMeetingInfo() {
  table.render({
      elem: '#meetingInfoTable',
      url: ctx + '/meetinginfoAction.action?methodName=listMeetingInfo',
      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(null==d.seatPic)
              return "尚未排座";
            else
              return "<img height='180px' src='"+d.seatPic+"'/>";
          }
      },
        {field: '', title: '操作', width: 250, toolbar:'#toolbar'}
      ]],
      page: true,
      request: {
        pageName: 'page',
        limitName: 'rows'
      },
      method: 'post',
      where: {
        title: $("#title").val()
      },
      loading: true,
    });
}
</script>


相关文章
|
6月前
|
SQL 存储 JavaScript
Layui之OA会议增删改查
Layui之OA会议增删改查
66 0
|
11月前
|
开发框架 JavaScript 前端开发
J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署
J2EE项目部署与发布(Windows版本)->会议OA单体项目Windows部署,spa前后端分离项目Windows部署
64 0
|
11月前
会议OA项目-其它页面->自定义组件应用,其它界面的布局
会议OA项目-其它页面->自定义组件应用,其它界面的布局
43 0
|
11月前
|
容器
会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局
会议OA项目-首页->flex弹性布局,轮播图后台数据获取及组件使用(后台数据交互mockjs),首页布局
79 0
|
13天前
|
安全 搜索推荐 数据安全/隐私保护
点晴免费OA办公系统:高效协同,安全易用
信息技术发展推动企业信息化,即企业利用现代技术提升生产、经营、管理效率,增强竞争力。点晴免费OA系统作为信息化管理的基础,是实现企业信息化的关键手段。
31 2
|
1月前
|
数据安全/隐私保护
点晴OA办公系统让企业变得高效协同
随着企业信息化进程的加快,很多企业开始寻求使用企业管理免费OA办公系统来提高工作效率。然而,有些些企业可能缺乏信息化经验,对技术一无所知,甚至从未接触过OA办公系统。在这种情况下,企业需要寻求功能比较全面的OA办公系统,以满足企业的实际需求。
45 1
|
1月前
|
敏捷开发 数据可视化 数据挖掘
哪些OA任务管理系统值得推荐?4款高效办公工具介绍
在现代企业中,OA(办公自动化)任务管理系统是提升工作效率和团队协作的关键工具。本文介绍了4款备受推崇的OA任务管理系统:板栗看板、Trello、Asana和Monday.com,分别从提高工作效率、增强团队协作、优化资源分配和提升工作质量等方面进行了详细说明,为用户提供全面的参考和选择指南。
|
1月前
|
存储 安全 数据安全/隐私保护
如何明智选择免费OA系统的关键因素
在数字化办公日益普及的今天,选择一款合适的免费OA系统对于企业提升工作效率和管理水平至关重要。不管是办公的便捷方便,还是与其他平台的融合,免费OA系统的选择,需要看这几点,易用性、开放性、稳定性、服务性、实用性、安全性。
22 0
|
2月前
|
搜索推荐 BI 数据处理
点晴OA系统让考勤管理不再头疼
在当今数字化管理趋势下,点晴OA办公系统中的考勤管理作为企业内部管理的重要组成部分,其自动化和智能化水平的提高在提高企业运营效率和员工满意度方面发挥着重要作用。
54 4
|
3月前
|
Java uml
某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批
该博客文章通过一个OA系统中的请假审批模块示例,使用Java语言实现了职责链模式,展示了如何根据不同的请假天数由不同级别的领导进行审批,并讨论了职责链模式的优缺点。
某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批
下一篇
无影云桌面