目录

一、待开会议&所有会议SQL编写

1.待开会议SQL编写

2.所有会议SQL编写

二、待开会议及所有会议功能开发


一、待开会议&所有会议SQL编写

待开会议:
当前登录账号,只要是 某会议 的参与者、列席者、主持人中的一员,并且会议状态是待开,则查询出来

-- 待开会议
-- 与我的会议的区别在于,待开会议需要匹配3个数据库列段
select a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren
,b.`name` zhuchirennmae,
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 where 1=1

历史会议:当前登录账号,只要是 某会议 的参与者、列席者、主持人中的一员,并且会议状态是结束,则查询出来

所有会议:
当前登录账号,只要是 某会议 的参与者、列席者、主持人、审批人中的一员,那么必须查询出来

1.待开会议SQL编写

select CONCAT(canyuze,',',liexize,',',zhuchiren),a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren
,b.`name` zhuchirennmae,
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 where 1=1
and state=4 and FIND_IN_SET(6,CONCAT(canyuze,',',liexize,',',zhuchiren))

2.所有会议SQL编写

假设id为6的用户,是会议A的列席人员,会议A又处于新建状态,意味着没有审批人,这条数据一定要查询出来

最终的所有会议SQL语句:

select CONCAT(a.canyuze,',',a.liexize,',',a.zhuchiren,',',IFNULL(a.auditor,-1)),a.id,a.title,a.content,
a.canyuze,a.liexize,a.zhuchiren,b.`name` zhuchirennmae,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 where 1=1
and FIND_IN_SET(6,CONCAT(a.canyuze,',',a.liexize,',',a.zhuchiren,',',IFNULL(a.auditor,-1)))

错误示范如图所示:

二、待开会议及所有会议功能开发

先运行我们的待开会议和所有会议项目如图所示:

缺失这两个jsp代码块注意路径问题,还有我们的js代码块

-----------------

meetingAll.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/meetingAll.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"><div class="layui-inline"><label class="layui-form-label">会议标题:</label><div class="layui-input-inline"><input type="hidden" id="userid" value="${sessionScope.user.id }"/><input type="text" id="title" autocomplete="off"class="layui-input"></div></div><div class="layui-inline"><button id="btn_meeting_search" class="layui-btn layui-btn-normal"><i class="layui-icon"></i> 查询</button></div></div><table style="margin-top: -15px;" id="tb_meeting" lay-filter="tb_meeting"></table>
</body>
</html>

meetingAll.js代码块:

let layer,form,table,$;
var row;
layui.use(['layer','form','table'],function(){layer=layui.layer,form=layui.form,table=layui.table,$=layui.jquery;//初始化会议列表initMeeting();//绑定查询按钮的点击事件$('#btn_meeting_search').click(function(){query();});
});//1.初始化会议列表
function initMeeting(){table.render({           //执行渲染elem: '#tb_meeting',   //指定原始表格元素选择器(推荐id选择器)height: 400,         //自定义高度loading: false,      //是否显示加载条(默认 true)cols: [[             //设置表头{field: 'title', title: '会议标题', width: 180},{field: 'location', title: '会议地点', width: 120},{field: 'startTime', title: '开始时间', width: 180},{field: 'endTime', title: '结束时间', width: 180},{field: 'meetingstate', title: '会议状态', width: 90},{field: 'zhuchirennmae', title: '主持人', width: 120},//{field: '', title: '操作', width: 260, toolbar: '#tbMeeting'}]]});
}//2.查询所有会议
function query(){table.reload('tb_meeting', {url: 'info.action',     //请求地址method: 'POST',                    //请求方式,GET或者POSTloading: true,                     //是否显示加载条(默认 true)page: true,                        //是否分页where: {                           //设定异步数据接口的额外参数,任意设'methodName':'allInfos','title':$('#title').val(),'zhuchiren':$('#userid').val()},request: {                         //自定义分页请求参数名pageName: 'page', //页码的参数名称,默认:pagelimitName: 'rows' //每页数据量的参数名,默认:limit},done: function (res, curr, count) {//查询完成的回调函数}});
}

meetingWaiting.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/meetingWaiting.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"><div class="layui-inline"><label class="layui-form-label">会议标题:</label><div class="layui-input-inline"><input type="hidden" id="userid" value="${sessionScope.user.id }"/><input type="text" id="title" autocomplete="off"class="layui-input"></div></div><div class="layui-inline"><button id="btn_meeting_search" class="layui-btn layui-btn-normal"><i class="layui-icon"></i> 查询</button></div></div><table style="margin-top: -15px;" id="tb_meeting" lay-filter="tb_meeting"></table>
</body>
</html>

meetingWaiting.js代码块:

let layer,form,table,$;
var row;
layui.use(['layer','form','table'],function(){layer=layui.layer,form=layui.form,table=layui.table,$=layui.jquery;//初始化会议列表initMeeting();//绑定查询按钮的点击事件$('#btn_meeting_search').click(function(){query();});
});//1.初始化会议列表
function initMeeting(){table.render({           //执行渲染elem: '#tb_meeting',   //指定原始表格元素选择器(推荐id选择器)height: 400,         //自定义高度loading: false,      //是否显示加载条(默认 true)cols: [[             //设置表头{field: 'title', title: '会议标题', width: 180},{field: 'location', title: '会议地点', width: 120},{field: 'startTime', title: '开始时间', width: 180},{field: 'endTime', title: '结束时间', width: 180},{field: 'meetingstate', title: '会议状态', width: 90},{field: 'zhuchirennmae', title: '主持人', width: 120},//{field: '', title: '操作', width: 260, toolbar: '#tbMeeting'}]]});
}//2.待开会议
function query(){table.reload('tb_meeting', {url: 'info.action',     //请求地址method: 'POST',                    //请求方式,GET或者POSTloading: true,                     //是否显示加载条(默认 true)page: true,                        //是否分页where: {                           //设定异步数据接口的额外参数,任意设'methodName':'queryMeetingInfoByState','title':$('#title').val(),'zhuchiren':$('#userid').val(),'state':4},request: {                         //自定义分页请求参数名pageName: 'page', //页码的参数名称,默认:pagelimitName: 'rows' //每页数据量的参数名,默认:limit},done: function (res, curr, count) {//查询完成的回调函数}});
}

我们先写待开会议如图所示:

现在目前没有数据因为我们还没有写我们的后台的方法

接着写所有会议如图所示

现在目前没有数据因为我们还没有写我们的后台的方法

MeetingInfoAction.java代码块:

package com.zking.web;import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.ConvertUtils;import com.zking.dao.MeetingInfoDao;
import com.zking.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 infoDao = new MeetingInfoDao();@Overridepublic MeetingInfo getModel() {
//      注册一个转换器ConvertUtils.register(new MyDateConverter(), Date.class);return info;}public String updateSeatPicById(HttpServletRequest req, HttpServletResponse resp) {try {
//          E:/temp/images/T280/abcdefg.png
//          获取图片的存放地址       dirPath=/temp/images/T280/String dirPath = PropertiesUtil.getValue("dirPath");
//          获取浏览器请求路径,为了后续保存到数据库   serverPath=/upload/paizuo/String serverPath = PropertiesUtil.getValue("serverPath");
//          随机生成一个图片名称String fileName=UUID.randomUUID().toString().replace("-", "")+".png";info.getSeatPic();// 图片字符串Base64ImageUtils.GenerateImage(info.getSeatPic().replaceAll("data:image/png;base64", ""), dirPath+fileName);//            将seatPic中的内容修改为  请求地址info.setSeatPic(serverPath+fileName);//           修改会议排座  数据库 图片 对应的 数据库列段int rs = infoDao.updateSeatPicById(info);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.error(0, "会议排座失败"));} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}finally {
}}return null;}//   会议送审public String updateAuditorById(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=infoDao.updateAuditorById(info);
//          如果大于0说明可以新增if(n>0) {ResponseUtil.writeJson(resp, R.ok(200, "会议送审成功"));}else {ResponseUtil.writeJson(resp, R.ok(0, "会议送审失败"));}} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "会议送审失败"));} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}return null;}public String add(HttpServletRequest req, HttpServletResponse resp) {try {
//          n是sql语句执行的影响行数int n=infoDao.add(info);
//          如果大于0说明可以新增if(n>0) {ResponseUtil.writeJson(resp, R.ok(200, "会议信息数据新增成功"));}else {ResponseUtil.writeJson(resp, R.ok(0, "会议信息数据新增失败"));}} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "会议信息数据新增失败"));} catch (Exception e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}return null;}//  我的会议public String myInfos(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> infos = infoDao.myInfos(info, pageBean);
//          注意:layui中的数据格式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;}//  我的审批public String myAudit(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> list = infoDao.myAudit(info, pageBean);
//          注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "我的审批查询成功", pageBean.getTotal(), list));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "我的审批查询错误"));} catch (Exception e1) {e1.printStackTrace();}}return null;}//   待开会议public String queryMeetingInfoByState(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> list = infoDao.queryMeetingInfoByState(info, pageBean);
//          注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "待开会议数据查询成功", pageBean.getTotal(), list));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "待开会议数据查询错误"));} catch (Exception e1) {e1.printStackTrace();}}return null;}//   所有会议public String allInfos(HttpServletRequest req, HttpServletResponse resp) {try {PageBean pageBean = new PageBean();pageBean.setRequest(req);List<Map<String, Object>> list = infoDao.allInfos(info, pageBean);
//          注意:layui中的数据格式ResponseUtil.writeJson(resp, R.ok(0, "所有会议数据查询成功", pageBean.getTotal(), list));} catch (Exception e) {e.printStackTrace();try {ResponseUtil.writeJson(resp, R.error(0, "所有会议数据查询错误"));} catch (Exception e1) {e1.printStackTrace();}}return null;}}

MeetingInfoDao.java代码块:

package com.zking.dao;import java.sql.SQLException;
import java.util.List;
import java.util.Map;import com.zking.entity.MeetingInfo;
import com.zking.util.BaseDao;
import com.zking.util.PageBean;
import com.zking.util.StringUtils;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) values(?,?,?,?,?,?,?,?,?)";return super.executeUpdate(sql, t, new String[] {"title","content","canyuze","liexize","zhuchiren","location","startTime","endTime","remark"});}//   我的会议,后续其他的菜单也会使用private String getSQL() {return "select a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren\r\n" + ",b.`name` zhuchirennmae,\r\n" + "a.location,\r\n" + "DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') startTime,\r\n" + "DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') endTime,\r\n" + "a.state,\r\n" + "(\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" + "    when 7 then '结束会议'\r\n" + "    else '其他' end\r\n" + ") meetingstate,\r\n" + "a.seatPic,a.remark,a.auditor,\r\n" + "c.`name` auditorname 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 SQLException, InstantiationException, IllegalAccessException {
//      拿到那些可能传的条件
//      拿到我们封装好的SQL语句String sql = getSQL();
//      会议标题String title = info.getTitle();if(StringUtils.isNotBlank(title)) {sql+=" and a.title like '%"+title+"%'";}sql+=" and a.zhuchiren = "+info.getZhuchiren();
//      降序sql+=" order by a.id desc ";return super.executeQuery(sql, pageBean);}//  设置会议排座图片public int updateSeatPicById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set seatPic=? where id=?";return super.executeUpdate(sql, info, new String[] {"seatPic","id"});}//    会议送审public int updateAuditorById(MeetingInfo info) throws Exception {String sql = " update t_oa_meeting_info set auditor=?,state=2 where id=?";return super.executeUpdate(sql, info, new String[] {"auditor","id"});}//   我的审批public List<Map<String, Object>> myAudit(MeetingInfo info, PageBean pageBean)throws SQLException, InstantiationException, IllegalAccessException {
//      拿到那些可能传的条件
//      拿到我们封装好的SQL语句String sql = getSQL();
//      会议标题String title = info.getTitle();if(StringUtils.isNotBlank(title)) {sql+=" and a.title like '%"+title+"%'";}
//      当前登录账号等于审批人字段值sql+=" and a.auditor = "+info.getAuditor();
//      待审核状态的会议信息才需要查询出来sql+=" and a.state=2 ";
//      降序sql+=" order by a.id desc ";return super.executeQuery(sql, pageBean);}//  待开会议public List<Map<String, Object>> queryMeetingInfoByState(MeetingInfo info, PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException {String sql="select CONCAT(canyuze,',',liexize,',',zhuchiren),a.id,a.title,a.content,a.canyuze,a.liexize,a.zhuchiren\r\n" + " ,b.`name` zhuchirennmae,\r\n" + " a.location,\r\n" + " DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') startTime,\r\n" + " DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') endTime,\r\n" + " a.state,\r\n" + " (\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" + "    when 7 then '结束会议'\r\n" + "    else '其他' end\r\n" + " ) meetingstate,\r\n" + " a.seatPic,a.remark,a.auditor,\r\n" + " c.`name` auditorname 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\r\n" + " and state=4 and FIND_IN_SET("+info.getZhuchiren()+",CONCAT(canyuze,',',liexize,',',zhuchiren)) ";return super.executeQuery(sql, pageBean);}//  所有会议public List<Map<String, Object>> allInfos(MeetingInfo info, PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException {String sql="select CONCAT(a.canyuze,',',a.liexize,',',a.zhuchiren,',',IFNULL(a.auditor,-1)),a.id,a.title,a.content,\r\n" + " a.canyuze,a.liexize,a.zhuchiren,b.`name` zhuchirennmae,a.location,\r\n" + " DATE_FORMAT(a.startTime,'%Y-%m-%d %H-%m-%s') \r\n" + " startTime,DATE_FORMAT(a.endTime,'%Y-%m-%d %H-%m-%s') 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" + "   when 7 then '结束会议' \r\n" + "   else '其他' end\r\n" + " ) \r\n" + " meetingstate,a.seatPic,a.remark,a.auditor,c.`name` 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 \r\n" + " and FIND_IN_SET("+info.getZhuchiren()+",CONCAT(a.canyuze,',',a.liexize,',',a.zhuchiren,',',a.auditor))";return super.executeQuery(sql, pageBean);}}

我们在来重新运行一下我就用id为6的登录如图所示:

对应数据库里的

在对应一下数据库里的是不是也是这么多条记录

OA项目之待开会议历史会议所有会议相关推荐

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

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

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

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

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

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

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

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

  5. 会议OA项目之会议通知会议反馈反馈详情功能

    目录 一.需要的SQL语句 1.1 会议通知查询的SQL 1.2 反馈详情的SQL 二.会议通知的前台代码 2.1 会议通知的jsp文件 2.2 要封装的js文件 三.会议通知查询的后台代码 2.1  ...

  6. 会议OA项目之我的审批

    目录 一.会议查询 1.后台 2.前端 二.会议签字审批 一.会议查询 1.后台 当前登录账号 是 会议信息表 中 审批人字段值 Dao: / 我的审批public List<Map<St ...

  7. OA项目之项目简介会议发布

    目录 OA项目之项目简介 功能简介: 会议发布 1.多功能下拉框上 2. 多功能下拉框下及会议新增 ①.多功能下拉框下 ②.会议新增 OA项目之项目简介 功能简介: 系统管理(用户表的增删改查) 会议 ...

  8. 项目管理之高效会议:项目中要开好哪些会?

    很多人说,项目经理有 80% 的时间都用在了沟通上,不是在开会,就是在开会的路上,其实所言不虚.会就是聚会.见面.集会,议就是讨论.商议,会议作为一种群体沟通方式,决定了正式信息在项目组内的传递路径 ...

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

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

最新文章

  1. PyTorch常用代码段合集
  2. R安装包源设置的常见方式及国内常用源
  3. java优先队列的入队函数_Java内置的优先队列PriorityQueue
  4. java 包含汉字,【转载】Java判断字符串中是不是包含汉字
  5. 深信服副总裁张开翼:随需应变的IT新架构
  6. ibatis轻松入门
  7. Java内部抽象类的匿名类初始化
  8. CentOS 和 Linux的关系?
  9. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
  10. 使用valgrind检查cache命中率
  11. inode结构详解(深层次理解拷贝,删除,移动的本质)以及硬链接和软链接的区别(图文)
  12. win10系统的计算机C盘在哪,c盘users在哪(win10c盘找不到users)
  13. Linux压缩与解压缩文件或文件夹命令
  14. WTL入门(二) WTL简介
  15. sparc处理器开发工具_SPARC高性能处理器集成开发环境及其编译器设计与实现
  16. 华为路由器:ppp协议
  17. 如何一日千里 突飞猛进?
  18. 设为首页,收藏本站代码
  19. uni-app(Vue.js)创建运行微信小程序
  20. pandas插入新数据及pandas

热门文章

  1. 写给程序员的诗歌《鹅》
  2. 话说QQ插件的精简概要
  3. Container killed by the ApplicationMaster, Exit code is 143
  4. qtp的基本使用方法(1)
  5. 对计算机系统安全的威胁,浅谈计算机的常见安全威胁与应对策略
  6. 面向对象三大特征——extends继承性
  7. 基线_基线性能模型-Persistence Model for Forest
  8. HSSFWorkbook poi创建锁定的单元格
  9. Greenplum数据库集群安装指南
  10. kali-ARP欺骗