Commit fc72457a by huangpu

Merge remote-tracking branch 'origin/master'

parents 17f052e9 d44f0999
# Guns V2.2
# Guns V2.3
新版Guns基于SpringBoot全面升级,完美整合springmvc + shiro + mybatis-plus + beetl!
在不用写xml配置(V1.0)的基础上进一步简化项目配置,让您更专注于业务开发!抛弃传统spring xml的配置方式,利用springboot + javabean方式配置spring,极大简化了pom.xml配置和spring配置.
......@@ -13,17 +13,15 @@ Guns项目代码简洁,注释丰富,上手容易,同时Guns包含许多基础模
## 技术讨论
如果对项目有任何疑问或者建议,欢迎加入Guns技术交流群:254550081(加之前请先看一遍readme文档)
## V2.2更新日志
1. 菜单树由最多二级菜单拓展为三级菜单
2. 用户管理页面新增部门树,方便查询部门人员信息
3. 完善系统的session机制,增加session失效时间的跳转
4. 完善Guns代码生成功能,新增Dao和Service,并且所有的生成都是可选的
5. 删除信息增加提示框
6. 删除父菜单可以删除所有子菜单
7. 新增对页面的js验证,所用框架为bootstrap validator
8. 完善druid监控,新增Web应用监控,URI监控,session监控
9. 修复新增含有0值的字典,查询会出现多条的bug
10. 修复没有角色的用户登录报错的bug
## V2.3更新日志
1. 增加多数据源支持
2. 增加富文本编辑器支持
3. 数据库字段增加注释
4. 数据字典不单单是查询功能,可以动态绑定到业务中当做枚举值使用
5. 上传图片增加进度条显示
6. 增加上线发布流程文档(上线发布流程.md)
7. 解决页面点击查询,左侧菜单高亮会消失bug
8. 解决个人信息无法提交的bug
### 如果不喜欢SpringBoot?
如果您不喜欢用SpringBoot,或者您是一个spring初学者,您可以切换到[Guns V1.0(点击这里)](http://git.oschina.net/naan1993/guns/tree/v1.0/)分支,
......
......@@ -23,7 +23,8 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<shiro.version>1.4.0</shiro.version>
<mybatisplus-spring-boot-starter.version>1.0.3</mybatisplus-spring-boot-starter.version>
<mybatisplus-spring-boot-starter.version>1.0.4</mybatisplus-spring-boot-starter.version>
<mybatis-plus.version>2.1-gamma</mybatis-plus.version>
<fastjson.version>1.2.31</fastjson.version>
<commons.io.version>2.5</commons.io.version>
<velocity.version>1.7</velocity.version>
......@@ -109,6 +110,11 @@
<!--其他依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
......
......@@ -46,6 +46,7 @@ public enum BizExceptionEnum {
/**
* 错误的请求
*/
DICT_MUST_BE_NUMBER(400,"字典的值必须为数字"),
REQUEST_NULL(400, "请求有错误"),
SESSION_TIMEOUT(400, "会话超时"),
SERVER_ERROR(500, "服务器异常");
......
......@@ -22,7 +22,6 @@ public class FastjsonConfig {
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat,
SerializerFeature.WriteClassName,
SerializerFeature.WriteMapNullValue
);
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
......
......@@ -27,6 +27,8 @@ public class BeetlProperties {
private String resourceTagsuffix;
private String resourceAutoCheck;
@Value("${spring.mvc.view.prefix}")
private String prefix;
......@@ -49,6 +51,9 @@ public class BeetlProperties {
if(ToolUtil.isNotEmpty(resourceTagsuffix)){
properties.setProperty("RESOURCE.tagSuffix",resourceTagsuffix);
}
if(ToolUtil.isNotEmpty(resourceAutoCheck)){
properties.setProperty("RESOURCE.autoCheck",resourceAutoCheck);
}
return properties;
}
......@@ -87,4 +92,12 @@ public class BeetlProperties {
public void setResourceTagsuffix(String resourceTagsuffix) {
this.resourceTagsuffix = resourceTagsuffix;
}
public String getResourceAutoCheck() {
return resourceAutoCheck;
}
public void setResourceAutoCheck(String resourceAutoCheck) {
this.resourceAutoCheck = resourceAutoCheck;
}
}
......@@ -52,7 +52,11 @@ public class DictServiceImpl implements IDictService {
Dict itemDict = new Dict();
itemDict.setPid(dict.getId());
itemDict.setName(name);
try {
itemDict.setNum(Integer.valueOf(num));
}catch (NumberFormatException e){
throw new BussinessException(BizExceptionEnum.DICT_MUST_BE_NUMBER);
}
this.dictMapper.insert(itemDict);
}
}
......
......@@ -22,6 +22,7 @@ beetl:
delimiter-statement-end: null
resource-tagroot: common/tags #自定义标签文件Root目录和后缀
resource-tagsuffix: tag
resource-auto-check: true #是否检测文件变化,开发用true合适,但线上要改为false
################### spring配置 ###################
......
......@@ -33,7 +33,7 @@
@for(title in titles){
@if(tool.isEmpty(title.children)){
<li>
<a class="J_menuItem" href="${ctxPath}${title.url}">
<a class="J_menuItem" href="${ctxPath}${title.url}" name="tabMenuItem">
<i class="fa ${title.icon}"></i>
<span class="nav-label">${title.name}</span>
</a>
......@@ -49,7 +49,7 @@
@for(subTitle in title.children){
@if(tool.isEmpty(subTitle.children)){
<li>
<a class="J_menuItem" href="${ctxPath}${subTitle.url}">${subTitle.name}</a>
<a class="J_menuItem" href="${ctxPath}${subTitle.url}" name="tabMenuItem">${subTitle.name}</a>
</li>
@}else{
<li>
......@@ -57,7 +57,7 @@
<ul class="nav nav-third-level">
@for(thirdTitle in subTitle.children){
<li>
<a class="J_menuItem" href="${ctxPath}${thirdTitle.url}">${thirdTitle.name}</a>
<a class="J_menuItem" href="${ctxPath}${thirdTitle.url}" name="tabMenuItem">${thirdTitle.name}</a>
</li>
@}
</ul>
......
......@@ -7,7 +7,7 @@
<div class="form-group">
<label class="col-sm-3 control-label">${name}</label>
<div class="col-sm-9">
<select class="form-control" id="${id}">
<select class="form-control" id="${id}" name="${id}">
${tagBody!}
</select>
@if(isNotEmpty(hidden)){
......
......@@ -7890,3 +7890,8 @@ body.skin-3 {
font-size: 12px
}
}
.tab-menu-selected {
background-color: #293846 !important;
color: white !important;
}
\ No newline at end of file
......@@ -169,6 +169,7 @@ $(function () {
if ($(this).parents('.J_menuTab').next('.J_menuTab').size()) {
var activeId = $(this).parents('.J_menuTab').next('.J_menuTab:eq(0)').data('id');
highLightMenuItem(activeId); //高亮对应的tab菜单
$(this).parents('.J_menuTab').next('.J_menuTab:eq(0)').addClass('active');
$('.J_mainContent .J_iframe').each(function () {
......@@ -218,6 +219,7 @@ $(function () {
return false;
}
});
highLightMenuItem(activeId);//高亮对应的tab菜单
}
}
// 当前元素不处于活动状态
......@@ -260,6 +262,7 @@ $(function () {
function activeTab() {
if (!$(this).hasClass('active')) {
var currentId = $(this).data('id');
highLightMenuItem(currentId); //高亮对应的tab菜单
// 显示tab对应的内容区
$('.J_mainContent .J_iframe').each(function () {
if ($(this).data('id') == currentId) {
......
......@@ -7,7 +7,6 @@ $(document).ready(function () {
// MetsiMenu
$('#side-menu').metisMenu();
// 打开右侧边栏
$('.right-sidebar-toggle').click(function () {
$('#right-sidebar').toggleClass('sidebar-open');
......@@ -95,6 +94,12 @@ $(document).ready(function () {
}
});
//点击菜单的时候高亮显示菜单
$("a[name='tabMenuItem']").click(function(){
clearTabMenuItem();
$(this).addClass("tab-menu-selected");
});
$('.nav-close').click(NavToggle);
//ios浏览器兼容性处理
......@@ -111,6 +116,17 @@ $(window).bind("load resize", function () {
}
});
function clearTabMenuItem(){
$("a[name='tabMenuItem']").each(function(){
$(this).removeClass("tab-menu-selected");
});
}
function highLightMenuItem(hrefVal){
clearTabMenuItem();
$("a[href='" + hrefVal + "']").addClass("tab-menu-selected");
}
function NavToggle() {
$('.navbar-minimalize').trigger('click');
}
......
# 上线发布流程
# 上线发布流程
项目如果要发布到生产环境,步骤如下:
## 修改application.yml相关配置
1.开启验证码验证:
```
guns.kaptcha-open=true
```
2.开启session超时验证:
```
guns.session-open=true
```
并根据需求配置这两个参数的大小:session-invalidate-time 和 session-validation-interval.
3.服务器端口根据上线需要进行修改:
```
server.port=xxxx
```
4.beetl文件检测要改为false:
```
beetl.resource-auto-check=false
```
5.激活的相关的profile
```
spring.profiles.active=produce
```
6.关闭开发者工具
```
spring.devtools.restart.enabled=false
```
## 打包
guns支持多种启动方式(详情见readme),根据启动方式下面介绍两种打包方式:
1.打成jar包启动,执行maven命令:
```
clean package -Dmaven.test.skip=true
```
然后放到linxu中执行后台运行命令
```
nohup java -jar xxx.jar >out.txt 2>&1 &
```
2.打成war包启动,首先修改pom中packaging改为war,然后执行1的打包命令,直接放入服务器tomcat的webapp文件夹即可
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment