目录

一、需要的SQL语句

1.1 会议通知查询的SQL

1.2 反馈详情的SQL

二、会议通知的前台代码

2.1 会议通知的jsp文件

2.2 要封装的js文件

三、会议通知查询的后台代码

2.1 会议详情的实体类

2.2 Dao方法

2.3 Action层

2.4 配置xml文件

四、会议反馈功能

4.1 封装相关的js文件

4.2 Dao方法

4.3 Action层

五、反馈详情

5.1 封装js代码

5.2 Dao方法

5.3 Action层


一、需要的SQL语句

1.1 会议通知的SQL

分析:不管会议是否得到反馈 都要反馈出来 所以选用外连接 会议信息表为主

-- 会议通知 (4即为待开的会议)
selectIFNULL(f.result,-1) result,t1.*
from(
select * from t_oa_meeting_info where FIND_IN_SET(2,CONCAT(
canyuze,',',liexize,',',zhuchiren)) and state = 4
) t1
left join t_oa_meeting_feedback f on t1.id = f.meetingId
and f.personId = 2
ORDER BY result;

1.2 反馈详情的SQL

根据需求我们可以一步步分析实现这个SQL:

-- 会议反馈详情
-- 1、会议id为12的会议,所有参与人员的姓名
            -- 1.1 先拿到所有的参与人员的id
            select CONCAT(canyuze,',',liexize,',',zhuchiren) from
            t_oa_meeting_info where id = 12
            -- 1.2 再拿到所有的参与人员的姓名
            select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id = 12))

 -- 2、链接反馈表,拿到对应的反馈情况(未读、参加、不参加)

 -- 2、链接反馈表,拿到对应的反馈情况(未读、参加、不参加)
select
t1.`name`,IFNULL(f.result,-1) result
from(
select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id = 12))
) t1
left join t_oa_meeting_feedback f on t1.id = f.personId and f.meetingId = 12

-- 3、根据反馈情况进行分组 (最终反馈详情的SQL)

-- 3、根据反馈情况进行分组(最终反馈详情的SQL)
select
t.result,GROUP_CONCAT(t.name) names
from(selectt1.`name`,IFNULL(f.result,-1) resultfrom(select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id = 12))) t1left join t_oa_meeting_feedback f on t1.id = f.personId and f.meetingId = 12
) t
GROUP BY t.result

二、会议通知的前台代码

2.1 会议通知的jsp文件

会议通知的前台代码:meetingNotify.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="static/js/meeting/meetingNotify.js"></script>
</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="personId" 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><script type="text/html" id="tbar">{{# if(d.result==-1){ }}<a class="layui-btn layui-btn-xs" lay-event="edit">是否参会</a>{{# } }}
</script>
</body>
</html>

2.2 要封装的js文件

我们再封装好它对应的js文件:meetingNotify.js

let layer,table,$,form,test;
var row;
layui.use(['layer','table','jquery','form','test'],function(){layer=layui.layer,table=layui.table,form=layui.form,test=layui.test,$=layui.jquery;initTable();//查询事件$('#btn_search').click(function(){query();});});//初始化数据表格(我的审批)
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,templet:function(d){return test.toDate(new Date(d.startTime));}},{field: 'endTime', title: '结束时间', width: 120,templet:function(d){return test.toDate(new Date(d.endTime));}},//{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: 'result', title: '反馈状态', width: 120,templet: function(d){if(d.result==1)return "参会";else if(d.result==2)return "缺席";elsereturn "未读";}},{field: '', title: '操作', width: 200,toolbar:'#tbar'},]]});
}//点击查询
function query(){table.reload('tb', {url: $("#ctx").val()+'/feedBack.action',     //请求地址method: 'POST',                    //请求方式,GET或者POSTloading: true,                     //是否显示加载条(默认 true)page: true,                        //是否分页where: {                           //设定异步数据接口的额外参数,任意设'methodName':'queryMeetingFeedBackByUserId','personId':$('#personId').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 === 'edit'){ //是否参会openLayer(row.id);} else {}});
}function openLayer(id){layer.open({type: 2,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title: '会议反馈',                   //对话框标题area: ['660px', '400px'],   //宽高skin: 'layui-layer-rim',    //样式类名content: 'jsp/meeting/addFeedBack.jsp?id='+id,                //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同btn:['会议反馈','关闭'],yes:function(index,layero){//layer.msg('保存');//调用子页面中提供的getData方法,快速获取子页面的form表单数据let data= $(layero).find("iframe")[0].contentWindow.getData();addMeetingFeedBack(data);},btn2:function(){layer.closeAll();}});
}// 对会议通知进行 参会/不参会的反馈
function addMeetingFeedBack(params){params['methodName']="add";console.log(params);$.post($("#ctx").val()+'/feedBack.action',params,function(rs){if(rs.success){layer.closeAll();query();}else{layer.msg(rs.msg,{icon:5},function(){});}},'json');
}

我们在这个js文件中用到了一个LayUI拓展模块,所以我们还需要导入我们的拓展文件:

test.js

//提示:模块也可以依赖其它模块,如:layui.define('layer', callback);
layui.define(function(exports){ var obj = {hello: function(str){alert('Hello '+ (str||'test'));},toDate:function(date,pattern){return fmtDate(date,pattern);}};//输出test接口//test.hello('zs');exports('test', obj);
}); //给Date类添加了一个新的实例方法format
Date.prototype.format = function (fmt) {//debugger;var o = {"M+": this.getMonth() + 1,                 //月份"d+": this.getDate(),                    //日"h+": this.getHours(),                   //小时"m+": this.getMinutes(),                 //分"s+": this.getSeconds(),                 //秒"q+": Math.floor((this.getMonth() + 3) / 3), //季度"S": this.getMilliseconds()             //毫秒};if (/(y+)/.test(fmt))fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));for (var k in o)if (new RegExp("(" + k + ")").test(fmt))fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));return fmt;
};function fmtDate(date, pattern) {var ts = date.getTime();var d = new Date(ts).format("yyyy-MM-dd hh:mm:ss");if (pattern) {d = new Date(ts).format(pattern);}return d.toLocaleString();
};

以及它对应的配置文件:config.js

layui.config({base: 'static/js/layui/modules/' //假设这是test.js所在的目录
}).extend({ //设定模块别名test: 'test' //如果test.js是在根目录,也可以不用设定别名
});

接着,我们还需要把我们的这个LayUI拓展模块的配置文件,

引入到我们的公共页面:header.jsp ,这样就可以一直访问到我们的配置文件。

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!-- 引入 layui.css -->
<link rel="stylesheet" href="${pageContext.request.contextPath }/static/js/layui/css/layui.css"><!-- 引入 layui.js -->
<script src="${pageContext.request.contextPath }/static/js/layui/layui.js"></script><!-- 指定整个项目的根路径 -->
<base href="${pageContext.request.contextPath }/" /><!-- 隐藏域传值 -->
<input id="ctx" value="${pageContext.request.contextPath }" type="hidden"/><!-- 引入LayUI拓展模块的配置文件 -->
<script src="${pageContext.request.contextPath }/static/js/layui/config.js"></script><title>玉渊工作室</title>

当我们准备好要用到的SQL语句以及前端页面之后,我们就可以开始我们会议通知功能的后台代码编写啦~


三、会议通知查询的后台代码

2.1 会议详情的实体类

MeetingFeedBack

package com.leaf.entity;import java.io.Serializable;/*** 会议详情表* @author Leaf** 2022年7月28日 上午11:33:21*/
public class MeetingFeedBack implements Serializable {private String id;private Long meetingId;private Integer personType;private Long personId;private Integer result;private String reason;//会议标题private String title;public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getId() {return id;}public void setId(String id) {this.id = id;}public Long getMeetingId() {return meetingId;}public void setMeetingId(Long meetingId) {this.meetingId = meetingId;}public Integer getPersonType() {return personType;}public void setPersonType(Integer personType) {this.personType = personType;}public Long getPersonId() {return personId;}public void setPersonId(Long personId) {this.personId = personId;}public Integer getResult() {return result;}public void setResult(Integer result) {this.result = result;}public String getReason() {return reason;}public void setReason(String reason) {this.reason = reason;}public MeetingFeedBack() {super();}@Overridepublic String toString() {return "MeetingFeedBack [id=" + id + ", meetingId=" + meetingId + ", personType=" + personType + ", personId="+ personId + ", result=" + result + ", reason=" + reason + "]";}}

        2.2 Dao方法

        MeetingFeedBackDao:

package com.leaf.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.leaf.entity.MeetingFeedBack;
import com.leaf.entity.MeetingInfo;
import com.leaf.util.BaseDao;
import com.leaf.util.PageBean;
import com.leaf.util.StringUtils;public class MeetingFeedBackDao extends BaseDao<MeetingFeedBack> {//会议通知查询public List<Map<String, Object>> queryMeetingFeedBackByUserId(MeetingFeedBack back, PageBean pageBean)throws SQLException, InstantiationException, IllegalAccessException {//SQLString sql = "select\r\n" + "  IFNULL(f.result,-1) result,t1.*\r\n" + " from(\r\n" + " select * from t_oa_meeting_info where FIND_IN_SET("+back.getPersonId()+",CONCAT(\r\n" + " canyuze,',',liexize,',',zhuchiren)) and state = 4\r\n" + " ) t1\r\n" + " left join t_oa_meeting_feedback f on t1.id = f.meetingId\r\n" + " and f.personId = "+back.getPersonId()+"\r\n" + " ORDER BY result";return super.executeQuery(sql, pageBean);}}

        2.3 Action层:

MeetingFeedBackAction :

package com.leaf.web;import java.util.List;
import java.util.Map;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import com.leaf.dao.MeetingFeedBackDao;
import com.leaf.entity.MeetingFeedBack;
import com.leaf.mvc.ActionSupport;
import com.leaf.mvc.ModelDriven;
import com.leaf.util.PageBean;
import com.leaf.util.R;
import com.leaf.util.ResponseUtil;public class MeetingFeedBackAction extends ActionSupport implements ModelDriven<MeetingFeedBack> {private MeetingFeedBack Back = new MeetingFeedBack();private MeetingFeedBackDao backDao = new MeetingFeedBackDao();@Overridepublic MeetingFeedBack getModel() {return Back;}//会议通知查询public String queryMeetingFeedBackByUserId(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();//初始化pageBean.setRequest(req);List<Map<String, Object>> list = backDao.queryMeetingFeedBackByUserId(Back, pageBean);ResponseUtil.writeJson(resp, R.ok(0, "会议通知数据查询成功" ,pageBean.getTotal() ,list));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.ok(0, "会议通知数据查询失败"));} catch (Exception e1) {e1.printStackTrace();}}return null;}}

        2.4 配置xml文件

<?xml version="1.0" encoding="UTF-8"?><config><action path="/user" type="com.leaf.web.UserAction"></action><action path="/permission" type="com.leaf.web.PermissionAction"></action><action path="/permissionTo" type="com.leaf.web.PermissionToAction"></action><action path="/info" type="com.leaf.web.MeetingInfoAction"></action><action path="/audit" type="com.leaf.web.MeetingAuditAction"></action><action path="/feedBack" type="com.leaf.web.MeetingFeedBackAction"></action></config>

测试查询:

经过测试,我们看到已经查询成功,这样会议通知查询就做好啦!

接着我们就可以开始做会议反馈功能啦,反馈用户是否参加会议。


 四、会议反馈功能

4.1 封装相关的js文件  

我们先放上会议反馈的前端代码:addFeedBack.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="static/js/meeting/addFeedBack.js"></script>
</head>
<style>
body{margin:5px;
}
</style>
<body>
<div style="padding:10px;"><form class="layui-form layui-form-pane" lay-filter="back"><!-- <div class="layui-form-item"><button type="submit" class="layui-btn" lay-submit="" lay-filter="meeting">立即提交</button><button id="reset" type="reset" class="layui-btn layui-btn-primary">重置</button></div> --><input type="hidden" name="meetingId" value="${param.id }"/><input type="hidden" name="personId" value="${sessionScope.user.id }"/><div class="layui-form-item"><label class="layui-form-label">人员类型</label><div class="layui-input-block"><select id="personType" name="personType"><option value="">请选择人员类型</option><option value="1">参会</option><option value="2">列席</option></select></div></div><div class="layui-form-item"><label class="layui-form-label">反馈结果</label><div class="layui-input-block"><select id="result" name="result"><option value="">请选择反馈结果</option><option value="1">参加</option><option value="2">不参加</option></select></div></div><div class="layui-form-item layui-form-text"><label class="layui-form-label">不参与会议的原因</label><div class="layui-input-block"><textarea placeholder="请输入内容" name="reason" class="layui-textarea"></textarea></div></div></form>
</div>
</body>
</html>

然后再封装对应的js文件:addFeedBack.js

let form,$;
layui.use(['form','jquery'],function(){form=layui.form,$=layui.jquery;
});function getData(){return form.val('back');
}

        4.2 Dao方法

                我们继续写在前面的Dao层里面:

   //会议反馈(是否参会)public int add(MeetingFeedBack back) throws Exception {String sql = "insert into t_oa_meeting_feedback values(?,?,?,?,?,?)";back.setId(UUID.randomUUID().toString().replaceAll("-", ""));return super.executeUpdate(sql, back, new String[] {"id","meetingId","personType","personId","result","reason"});}

        4.3 Action层

//会议反馈(是否参会)public String add(HttpServletRequest req, HttpServletResponse resp) {try {//rs是SQL语句执行的影响行数int rs = backDao.add(Back);//判断if(rs > 0) {ResponseUtil.writeJson(resp, R.ok(200, "会议反馈成功"));}else {ResponseUtil.writeJson(resp, R.ok(0, "会议反馈失败"));}} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.ok(0, "会议反馈失败"));} catch (Exception e1) {e1.printStackTrace();}}return null;}

然后我们测试一下反馈:

测试得到结果,会议反馈也成功完成!


五、反馈详情

5.1 封装js代码

        myMeeting.js

 let layer,table,$,form;var 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: 'auditorname', 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'){ //会议排座open(row.id);} else if(layEvent === 'send'){ //送审
//            layer.msg('送审');//判断是否排座if(row.seatPic==null || row.seatPic==""){layer.msg('先请完成会议排座,再进行送审操作!',function(){});return false;}//在打开送审页面之前,先请完成会议ID的赋值操作$('#meetingId').val(row.id);//打开会议送审HTMLopenLayerAudit();} else if(layEvent==="back"){ //反馈详情openLayerFeedBack(row.id);} else {layer.msg('删除');}});}// 打开查看本会议的反馈详情function openLayerFeedBack(id){$.getJSON('feedBack.action',{methodName:'queryMeetingBackByMeetingId',meetingId:id},function(data){$('#meeting_ok').html("");$('#meeting_no').html("");$('#meeting_noread').html("");if(data.success){console.log(data.data);$.each(data.data,function(i,e){if(e.result==1)$('#meeting_ok').html(e.names);else if(e.result==2)$('#meeting_no').html(e.names);else$('#meeting_noread').html(e.names);});//弹出对话框layer.open({type: 1,                    //layer提供了5种层类型。可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)title:'反馈详情',area: ['426px', '420px'],   //宽高skin: 'layui-layer-rim',    //样式类名content: $('#feedback'),   //弹出内容。可以传入普通的html内容,还可以指定DOM,更可以随着type的不同而不同btn:['关闭'],yes:function(index,layero){layer.closeAll();}});}});}

        5.2 Dao方法

    //反馈详情public List<Map<String, Object>> queryMeetingBackByMeetingId(MeetingFeedBack back, PageBean pageBean) throws Exception {String sql = "select\r\n" + "t.result,GROUP_CONCAT(t.name) names\r\n" + "from(\r\n" + "  select\r\n" + " t1.`name`,IFNULL(f.result,-1) result\r\n" + "   from(\r\n" + "  select * from t_oa_user where FIND_IN_SET(id,(select CONCAT(canyuze,',',liexize,',',zhuchiren) from t_oa_meeting_info where id = "+back.getMeetingId()+"))\r\n" + " ) t1\r\n" + "   left join t_oa_meeting_feedback f on t1.id = f.personId and f.meetingId = "+back.getMeetingId()+"\r\n" + ") t\r\n" + "GROUP BY t.result";return super.executeQuery(sql, pageBean);}

        5.3 Action层

    //反馈详情public String queryMeetingBackByMeetingId(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();//初始化pageBean.setRequest(req);List<Map<String, Object>> list = backDao.queryMeetingBackByMeetingId(Back, pageBean);ResponseUtil.writeJson(resp, R.ok(0, "反馈详情数据查询成功" ,pageBean.getTotal() ,list));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.ok(0, "反馈详情数据查询失败"));} catch (Exception e1) {e1.printStackTrace();}}return null;}

这里我们测试看一下:

先反馈一个结果:

然后登录一下会议发布人的账号,查询反馈详情:

我们可以看到,反馈详情功能就也实现啦~


OK,今天Leaf带来的会议OA项目的会议通知以及反馈&&反馈详情功能就到这里啦,后期还有更多的功能代码分享,欢迎关注一起学习噢,我们下次见!!!

会议OA项目之会议通知会议反馈反馈详情功能相关推荐

  1. 会议OA项目(三)---我的会议(会议排座、送审)

    目录 前言 一.需求分析 二.准备工作 三.编码 1.后台编码 2.前端编码 四.效果展示 前言 上篇分享了会议OA项目的我的会议功能的查询.取消会议.本篇文章将完善我的会议功能. 我的会议功能有一个 ...

  2. 会议OA项目之我的会议(会议排座送审)

    目录 一.会议排座 1.为什么会有排座功能 2.查找资料 3.配置路径 3.后台 4.前端 二.会议送审 一.会议排座 1.为什么会有排座功能 集团公司的日常管理会议.人事任命会议所需 在参会人员每个 ...

  3. 会议OA项目之待开会议所有会议

    目录 一.待开和所有会议SQL语句编 二.待开和所有会议功能实现 1.待开会议 后台 前台 2.所有会议 后台 前台 一.待开和所有会议SQL语句编写 1.待开会议 待开会议: 与我的会议的区别在于, ...

  4. 会议OA项目(项目原型图介绍发布会议功能)

    目录 一.会议OA项目介绍 为什么要开发OA会议管理 会议OA管理的作用 二.项目原型图介绍 1)会议管理 2)投票管理 3)会议室管理 三.数据库表结构 四.发布会议功能&多功能下拉框 La ...

  5. 会议OA项目(待开会议历史会议所有会议)

                                                                    文章目录 一.会议OA项目名词介绍 二.SQL编写 待开会议SQL 所有 ...

  6. 微信小程序-会议OA项目03

    目录 1.Flex布局简介 1.1 什么是flex布局 1.2 flex属性 2.轮播图--组件的使用 3.会议OA项目-首页 1.Flex布局简介 布局的传统解决方案,基于盒状模型,依赖 displ ...

  7. 会议OA项目之会议发布(一)

                                                     目录 前言: 会议发布的产品原型图: 1.会议发布 1.1实现的特色功能: 1.2思路: 使用的数据库 ...

  8. 会议OA项目(我的会议中的会议排座送审功能)

    文章目录 一.会议排座插件介绍 1)会议项目为什么要有会议排座的功能 2)完成在页面上元素的拖动功能 2.1分析现有素材的不足 2.2修改现有素材的不足⬇⬇⬇ 2.3 content需要传递到后台,并 ...

  9. 微信小程序:会议OA项目-首页

    目录 一.flex布局 Flex布局简介 什么是flex布局? flex属性 flex的属性 二.轮播图组件及mockjs的使用 三.会议OA小程序首页布局 一.flex布局 Flex布局简介 布局的 ...

最新文章

  1. android listview divider color,android listview 属性
  2. Xampp配置本地域名及常见错误解决
  3. 持续集成部署Jenkins工作笔记0009---创建SVN版本库并提交Maven工程
  4. maven常用的中央仓库
  5. 5分钟弄懂Docker
  6. html日期判断程序,javascript – HTML5日期验证
  7. Golang让协程交替输出
  8. jQuery入门基础
  9. stm32固件库下载地址
  10. psftp的简单使用
  11. python破解百度网盘提取码_Python 一键获取百度网盘提取码
  12. 路由与交换技术笔记(eNSP)
  13. 国科大学习资料--模式识别与机器学习(黄庆明)--期末复习题2(含答案)
  14. 如何处理 mka 格式的音频文件
  15. 【投资理财】期权学习书籍推荐
  16. EA游戏Battlefield 2(战地风云2) 单机地图简介
  17. 数据同步工具—DataX部署使用
  18. jzoj5935小凯学数学
  19. 软著中写源代码60页快速实现方法
  20. h264中的pps和sps

热门文章

  1. C语言中文件的打开与保存
  2. Python+Selenium检测TAPD是否有未读消息,有则通过DingtalkChatbot发送钉钉机器人
  3. VIJOS-P1404-遭遇战
  4. 阿里技术三板斧:关于技术规划、管理、架构的思考
  5. c语言printout函数,excel printout使用方法
  6. UE4-(场景)后期盒子(PostProcessVolume)之Lens中的色差(Chromatic Aberration)及泛光(Bloom)
  7. unity 2017_2017年的Unity文档
  8. ESP32驱动1.28寸GC9A01播放视频(一、视频分辨率的调整和视频格式的转换)
  9. 前端时间转换工具(moment.js)
  10. 壳聚糖-聚乙二醇-巯基|巯基-PEG-壳聚糖|硅烷,丙烯酸酯,硫辛酸修饰壳聚糖