免费基于springboot的OA自动化办公系统,挺漂亮的

news2024/11/25 0:55:03

大家好,我是锋哥,看到一个不错的springboot的OA自动化办公系统,分享下哈。

项目介绍

这是一个OA办公自动化系统,使用Maven进行项目管理,基于springboot框架开发的项目,mysql底层数据库,前端采用freemarker模板引擎,Bootstrap作为前端UI框架,集成了jpa、mybatis等框架。作为初学springboot的同学是一个很不错的项目,如果想在此基础上面进行OA的增强,也是一个不错的方案。

框架介绍

项目结构

前端

技术名称版本官网
freemarker模板引擎springboot1.5.6.RELEASE集成版本FreeMarker Java Template Engine
Bootstrap前端UI框架3.3.7Bootstrap中文网
Jquery快速的JavaScript框架1.11.3jQuery
kindeditorHTML可视化编辑器4.1.10在线HTML编辑器
My97 DatePicker时间选择器4.8 Beta4My97日期控件官方网站 My97 DatePicker

后端

技术名称版本官网
SpringBootSpringBoot框架1.5.6.RELEASESpring Boot
JPAspring-data-jpa1.5.6.RELEASESpring Data JPA
MybatisMybatis框架1.3.0mybatis – MyBatis 3 | Introduction
fastjsonjson解析包1.2.36GitHub - alibaba/fastjson: FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
pagehelperMybatis分页插件1.0.0MyBatis 分页插件 PageHelper

系统展示

 

部分代码

	/**
	 * 登录检查;
	 * 1、根据(用户名或电话号码)+密码进行查找
	 * 2、判断使用是否被冻结;
	 * @return
	 * @throws UnknownHostException 
	 */
	@RequestMapping(value="logins",method = RequestMethod.POST)
	public String loginCheck(HttpSession session,HttpServletRequest req,Model model) throws UnknownHostException{
		String userName=req.getParameter("userName").trim();
		String password=req.getParameter("password");
		String ca=req.getParameter("code").toLowerCase();
		String sesionCode = (String) req.getSession().getAttribute(CAPTCHA_KEY);
		model.addAttribute("userName", userName);
		if(!ca.equals(sesionCode.toLowerCase())){
			System.out.println("验证码输入错误!");
			model.addAttribute("errormess", "验证码输入错误!");
			req.setAttribute("errormess","验证码输入错误!");
			return "login/login";
		}
		/*
		 * 将用户名分开查找;用户名或者电话号码;
		 * */
		User user=uDao.findOneUser(userName, password);
		if(Objects.isNull(user)){
			System.out.println(user);
			System.out.println("账号或密码错误!");
			model.addAttribute("errormess", "账号或密码错误!");
			return "login/login";
		}
		System.out.println("是否被锁:"+user.getIsLock());
		if(user.getIsLock()==1){
			System.out.println("账号已被冻结!");
			model.addAttribute("errormess", "账号已被冻结!");
			return "login/login";
		}
		Object sessionId=session.getAttribute("userId");
		System.out.println(user);
		if(sessionId==user.getUserId()){
			System.out.println("当前用户已经登录了;不能重复登录");
			model.addAttribute("hasmess", "当前用户已经登录了;不能重复登录");
			session.setAttribute("thisuser", user);
			return "login/login";
		}else{
			session.setAttribute("userId", user.getUserId());
			Browser browser = UserAgent.parseUserAgentString(req.getHeader("User-Agent")).getBrowser();
			Version version = browser.getVersion(req.getHeader("User-Agent"));
			String info = browser.getName() + "/" + version.getVersion();
			String ip=InetAddress.getLocalHost().getHostAddress();
			/*新增登录记录*/
			ulService.save(new LoginRecord(ip, new Date(), info, user));
		}
		return "redirect:/index";
	}
<!-- 外部通讯录 -->
<!--盒子头-->
<div class="box-header">
	<h3 class="box-title">${(outtype)!'外部通讯录'}</h3>
	<a class="btn btn-sm btn-default thisrefresh" href="javascript:void(0);" title="刷新" style="padding: 5px;margin-top: -8px;"><span
			class="glyphicon glyphicon-refresh"></span></a>
	<div class="box-tools">
		<div class="input-group" style="width: 150px;">
			<input type="text" class="form-control input-sm baseKey" placeholder="查找..." value="${(baseKey)!''}"/>
			<div class="input-group-btn">
				<a class="btn btn-sm btn-default baseKeySumbit"> 
					<span class="glyphicon glyphicon-search"></span>
				</a>
			</div>
		</div>
	</div>
</div>
<!--盒子身体-->
<div class="box-body no-padding">
	<div class="table-responsive">
		<table class="table table-hover table-striped">
			<tr>
				<th scope="col">分类</th>
				<th scope="col">所属公司</th>
				<th scope="col">头像</th>
				<th scope="col">姓名</th>
				<th scope="col">性别</th>
				<th scope="col">Tel</th>
				<th scope="col">E-mail</th>
				<th scope="col">操作</th>
			</tr>
			<#if directors?size gt 0>
			<#list directors as d>
			<tr>
				<#if d.catelog_name?? & d.catelog_name!="">
					<td><span>${(d.catelog_name)!'外部通讯录'}</span></td>
				<#else>
					<td><span>外部通讯录</span></td>
				</#if>
				
				<td><span>${(d.companyname)!''}</span></td>
				<td><a href="#"> <img src="/image/${(d.image_path)!'/timg.jpg'}" class="img-circle"
						style="width: 25px; height: 25px;">
				</a></td>
				<td><span>${(d.user_name)!''}</span></td>
				<td><span>
				<#if d.sex=="男">
					<img src="images/male.png" alt="男" style="width: 20px;height: 20px" />
				<#else>
					<img src="images/female.png" alt="女" style="width: 20px;height: 20px" />
				</#if>
				</span></td>
				<td><span>${d.phone_number}</span></td>
				<td><span>${(d.email)!''}</span></td>
				<td style="width: 252px;">
					<a href="javascript:void(0);" class="label xinzeng thisshare" directorId="${d.director_id}"> 
						<span class="glyphicon glyphicon-new-window"></span> 分享
					</a> 
					<a href="javascript:void(0);" director="${d.director_id}" class="label xiugai outlookthis">
						<span class="glyphicon glyphicon-search"></span> 查看
					</a> 
					<a did="${d.director_users_id}"  href="javascript:void(0);" class="label shanchu thisdelete">
						<span class="glyphicon glyphicon-remove"></span> 删除
					</a>
					<#if userId==d.user_id>
					<a title="修改" did="${d.director_id}" href="javascript:void(0);" class="label xiugai thischange">
						<span class="glyphicon glyphicon-edit"></span> 修改
					</a> 
					<#else>
					<a title="移动" 
					thisdid="${(d.director_id)!''}" 
					thisuserName="${(d.user_name)!''}" 
					thisimgpath="images/touxiang/${(d.image_path)!'timg.jpg'}"
					 thisphoneNumber="${d.phone_number}"
					 thissex="${d.sex}"
					 thisemail="${(d.email)!''}"
					 thiscompany="${(d.companyname)!''}"
					   href="javascript:void(0);" class="label sheding thismove">
						<span class="glyphicon glyphicon-retweet"></span> 移动
					</a>
					</#if>
				</td>
			</tr>
			</#list>
			<#else>
				<tr>
					<td colspan="7" style="text-align: center;background: #eee;">没能找到联系人~~~</td>
				</tr>
			</#if>
		</table>
	</div>
</div>
<!--盒子尾-->
<#include "/common/pagingmybatis.ftl"/>
<#include "/address/sharemodal.ftl"/>

源码下载

0积分免费下载:SpringBoot OA源码下载地址
 

热门推荐

免费分享一套 SpringBoot + Vue + ElementUI 的人力资源管理系统,挺漂亮的_java1234_小锋的博客-CSDN博客

免费分享一个SpringBoot鲜花商城管理系统,很漂亮的_java1234_小锋的博客-CSDN博客

我写了一套SpringBoot+SpringSecurity+Vue权限系统 实战课程,免费分享给CSDN的朋友们_springboot2+springsecurity+vue项目实战_java1234_小锋的博客-CSDN博客

我写了一套SpringBoot微信小程序电商全栈就业实战课程,免费分享给CSDN的朋友们_java1234_小锋的博客-CSDN博客

springboot+vue前后端音乐网系统,挺漂亮的_简单的音乐播放前后端_java1234_小锋的博客-CSDN博客

免费分享一个springboot+vue校园宿舍管理系统,挺漂亮的_java1234_小锋的博客-CSDN博客

免费分享一个SSM商城管理系统,很漂亮的_java1234_小锋的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/365503.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GEE学习笔记 五十五:GEE编辑器绘制样本点的一个bug(官方在5.1给出反馈已经修复相关bug)

在做地物分类的时候我们会采用GEE在线采集样本方式&#xff0c;但是这个有一个问题需要注意&#xff0c;如果直接使用绘制矩形和点会将点变为 ee.Geometry.Point([xxx], null, false) 这种形式。出现的问题步骤如下&#xff1a; 1、绘制一个点和一个矩形 2、修改geometry为fea…

持续事务管理过程中的事件驱动

比较官方的定义&#xff1a;事件驱动是指在持续事务管理过程中&#xff0c;进行决策的一种策略&#xff0c;即跟随当前时间点上出现的事件&#xff0c;调动可用资源&#xff0c;执行相关任务&#xff0c;使不断出现的问题得以解决&#xff0c;防止事务堆积。在计算机编程、公共…

WPF五种布局

GridGrid为WPF中最常用的布局容器, 作为View中的主要组成部分, 负责框架中整体的页面布局。标签含义ShowGridLines可以设置行业的边距线的显示Grid. RowDefinitions可以创建任意行, 进行固定高度与百分比高度设置Grid. ColumnDefinitions可以创建任意列, 进行固定宽度与百分宽度…

二氧化碳地质封存技术应用前景及模型构建实践方法与讨论

2022年七月七日&#xff0c;工业和信息化部、发展改革委、生态环境部关于印发工业领域碳达峰实施方案的通知落地。全国各省份积极响应&#xff0c;纷纷出台地方指导文件&#xff0c;标志着我国碳减排事业的全面铺开。二氧化碳地质封存技术作为实现我国“双碳”目标的重要一环&a…

量化策略——准备4 python量化因子测算绘图

文章目录因子测算框架1. 预处理股票数据2. 指标测算3. 测算结果整理4. 结果绘图量化因子的测算通常都是模拟交易&#xff0c;计算各种指标&#xff0c;其中&#xff1a;测算需要用到的第三方库&#xff1a;numpy&#xff0c;pandas&#xff0c;talib绘图需要用到的第三方库&…

研报精选230223

目录 【行业230223开源证券】计算机&#xff1a;政策节奏超预期&#xff0c;数据要素市场加速发展【个股230223光大证券_鲁商发展】投资价值分析报告&#xff1a;剥离地产业务、战略转型大健康产业&#xff0c;化妆品“国货之光”待发力【个股230223华安证券_国际医学】综合医疗…

数据库恢复技术

一&#xff0c;事务的基本概念 1.事务 事物是用户定义的一个数据库操作序列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的工作单位。 事物和程序是两个概念。一般的讲&#xff0c;一个程序中包含多个事物。 事物的开始与结束可以由用户…

瓴羊Quick BI智能报表,轻松搞定复杂“中国式报表”

随着企业的不断成长&#xff0c;内部管理、运营所需的报表往往越做越复杂。不管是对一个职场新人&#xff0c;还是专业的数据分析人员来说&#xff0c;制作复杂的“中国式报表”都是一件让人很痛苦的事。正因如此&#xff0c;越来越多的企业开始使用瓴羊Quick BI智能报表&#…

FPGA纯verilog代码实现H.264/AVC视频解码,提供工程源码和技术支持

目录1、前言2、硬件H.264/AVC视频解码优势3、vivado工程设计架构4、代码架构分析5、vivado仿真6、福利&#xff1a;工程代码的获取1、前言 本设计是一种verilog代码实现的低功耗H.264/AVC解码器(baseline )&#xff0c;硬件ASIC设计&#xff0c;不使用任何GPP/DSP等内核&#…

最新Python异步编程详解

我们都知道对于I/O相关的程序来说&#xff0c;异步编程可以大幅度的提高系统的吞吐量&#xff0c;因为在某个I/O操作的读写过程中&#xff0c;系统可以先去处理其它的操作&#xff08;通常是其它的I/O操作&#xff09;&#xff0c;那么Python中是如何实现异步编程的呢&#xff…

Python每日一练(20230223)

目录 1. 合并区间 2. 单词接龙 3. N皇后 附录&#xff1a;回溯算法 基本思想 一般步骤 1. 合并区间 难度&#xff1a;★★ 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回…

【虚拟仿真】Unity3D中实现鼠标的单击、双击、拖动的不同状态判断

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 这篇文章分享一下虚拟仿真项目中经常碰到鼠标事件控制代码。 …

某直聘tp_token解析

尊重版权&#xff0c;请勿盗版&#xff0c;不放代码。截至2023-02-23更新---------------------------------------检测windows属性总数大于150 改成大于15 > 150检测了document属性大于50检测了navigate属性检测了navigate.plugins 属性值检测moudle nodejs是否存在&#x…

Java 异常处理,超详细整理,适合新手入门

目录 前言 抛出异常 捕获异常 处理异常 finally块 总结 前言 当Java程序中出现错误或异常时&#xff0c;通常会抛出一个异常。Java的异常处理机制使得我们可以在程序运行过程中捕获这些异常并采取相应的措施&#xff0c;以便程序能够正常运行或者优雅地停止。 抛出异常 在…

德馨食品再战IPO,“卖水人“还有新故事吗?

新茶饮供应链企业迎来上市潮。2月13日&#xff0c;浙江德馨食品科技股份有限公司&#xff08;下称“德馨食品”&#xff09;更新招股书&#xff0c;再次冲刺深交所。此前&#xff0c;原料果汁速冻果块制造商田野创新股份有限公司&#xff08;下称“田野股份”&#xff0c;83202…

华为OD机试真题 用 C++ 实现 - 字符串加密 | 多看题,提高通过率

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…

16行代码采集原神官网角色全图+全语音

嗨害大家好鸭&#xff01;我是小熊猫~ 本来是不玩原神的&#xff0c; 但是实在是经不住诱惑鸭~ 毕竟谁能拒绝可以爬树、炸鱼、壶里造房子、抓小动物、躲猫猫的对战游戏捏~ 准备工具 源码资料电子书:点击此处跳转文末名片获取 准备模块 import requests import re import ex…

安卓开发 AlertDialog mesaage太长显示不全 下面按钮不显示 bug解决

简单解决 去掉下面这行即可 <item name"android:windowTranslucentStatus">true</item>但是状态栏不够沉浸&#xff0c;只定义dialog的style &#xff08;推荐&#xff01;&#xff09; <style name"MyDialog" parent"ThemeOverlay.…

Blender 导出fbx模型到 untiy

文章目录导出模型的基本设置将导出的模型放到Untiy里材质问题导出模型的基本设置 导出模型前先 ctrla 应用全部变换&#xff0c;模型原点应该根据需要放在物体中心或底部 1 路径模式&#xff1a;复制 &#xff0c;这会把模型引用的纹理复制一份到选定的文件夹下&#xff0c;用…

华为OD机试真题 用 C++ 实现 - 括号检查

最近更新的博客 华为OD机试 - 入栈出栈(C++) | 附带编码思路 【2023】 华为OD机试 - 箱子之形摆放(C++) | 附带编码思路 【2023】 华为OD机试 - 简易内存池 2(C++) | 附带编码思路 【2023】 华为OD机试 - 第 N 个排列(C++) | 附带编码思路 【2023】 华为OD机试 - 考古…