Skip to content

Commit c89c404

Browse files
author
wenbin
committed
Merge remote-tracking branch 'origin/master'
# Conflicts: # README.md
2 parents e17e069 + 5e1d78d commit c89c404

File tree

11 files changed

+96
-16
lines changed

11 files changed

+96
-16
lines changed

README.md

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ GitHub地址:[https://github.com/aitangbao/springboot-manager](https://github.
4747
2. 项目根目录下执行mvn -X clean package -Dmaven.test.skip=true编译打包,然后执行java -jar manager.jar
4848
- 接口文档访问 http://localhost:8080/doc.html
4949
- 登录地址 http://localhost:8080/index/login 用户名密码:admin/123456
50-
- 代码生成使用
51-
1、 application.yml中配置: 使用代码生成模块时 指定要生成的表存在于哪种数据库。project.database=mysql
52-
2. 点击[代码生成]菜单,生成一个或多个表的代码,下载到本地
53-
3. 解压下载的代码,直接复制main文件夹到本地项目的src目录下
54-
4. 数据库执行sql,生成菜单
50+
- 代码生成使用
51+
1. application.yml中配置: 使用代码生成模块时 指定要生成的表存在于哪种数据库。project.database=mysql
52+
2. 点击[代码生成]菜单,生成一个或多个表的代码,下载到本地
53+
3. 解压下载的代码,直接复制main文件夹到本地项目的src目录下
54+
4. 数据库执行sql,生成菜单
5555
5. 点击[角色管理]菜单,修改角色所绑定的菜单的权限,刷新页面查看
5656

5757
## 技术文档
@@ -126,5 +126,4 @@ GitHub地址:[https://github.com/aitangbao/springboot-manager](https://github.
126126

127127
### 交流群
128128
> 群二维码每周会定期更新,如果二维码过期请先清除浏览器缓存后,重新扫码二维码;如再不行可以私信作者,或邮箱lwb_1128@163.com
129-
<img width="300px" height="400px" src="http://tuchuang.aitangbao.com.cn/20200706092217.jpg" alt="" style="zoom:25%;" />
130-
129+
<img width="300px" height="400px" src="http://tuchuang.aitangbao.com.cn/20200716082600.jpg" alt="" style="zoom:25%;" />

doc/mysql.sql

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,12 +317,11 @@ DROP TABLE IF EXISTS `sys_content`;
317317
CREATE TABLE `sys_content` (
318318
`id` varchar(50) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '主键',
319319
`title` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NULL DEFAULT NULL COMMENT '标题',
320+
`type` int(11) DEFAULT NULL COMMENT '文章类型',
320321
`content` longtext CHARACTER SET utf8 COLLATE utf8_bin NULL COMMENT '内容',
321322
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
322323
PRIMARY KEY (`id`) USING BTREE
323324
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin COMMENT = '文章管理' ROW_FORMAT = Compact;
324-
325-
INSERT INTO `sys_content` VALUES ('1265451035091066882', 'java开源后台管理项目', '<p><b>java开源后台管理项目</b></p><p><b>介绍</b></p><article class=\"markdown-body mt-4\"><p>基于SpringBoot + Thymeleaf + Layui + Apache Shiro + Redis + Mybatis Plus 的后台管理系统<br>提供代码生成器,基本增删改查无需编写,可快速完成开发任务。<br>后台接口RESTful 风格,支持前后端分离,可与app公用一套接口。<br></p><p>开发最精简,可当脚手架,适合你来diy</p><p><b>特征</b></p><p></p><ul><li>后台接口RESTful 风格,支持前后端分离,可与app公用一套接口</li><li>采用RBAC的权限控制</li><li>统一响应结果封装及生成工具</li><li>统一异常处理</li><li>Shiro + Redis 实现 Token 角色权限认证</li><li>使用Druid Spring Boot Starter 集成Druid数据库连接池与监控</li><li>集成MyBatis-Plus,实现单表业务零SQL</li><li>支持多数据源,自由切换,只需方法或类上用 @DS 切换数据源</li><li>集成国人风格的knife4j,自动生成接口文档</li></ul><p></p><p></p><p><ul><li>提供代码生成器,生成从Html到Mapper,爽歪歪</li></ul></p><ul><li><b>代码仓库</b></li></ul><p></p><p></p><p>Gitee地址:<a href=\"https://gitee.com/zwens/springboot-manager\" target=\"_blank\">https://gitee.com/zwens/springboot-manager</a><br></p><p>GitHub地址:<a href=\"https://github.com/aitangbao/springboot-manager\" target=\"_blank\">https://github.com/aitangbao/springboot-manager</a></p><p><b>项目演示</b></p><p></p><ul><li>演示地址:<a href=\"http://manager.aitangbao.com.cn/login\" target=\"_blank\">http://manager.aitangbao.com.cn</a></li><li>账号密码:guest/123456</li></ul><p></p><p><ul><li>带宽1m 不太给力 请见谅&nbsp;</li></ul></p><ul><li><b>技术</b></li></ul><p></p><ul><li>核心框架:spring boot 2.1.6</li><li>持久层框架:mybatis plus</li><li>数据库连接池:alibaba druid</li><li>安全框架:apache shiro</li><li>缓存框架:redis</li><li>日志框架:logback</li><li>接口文档:Knife4j</li></ul><p></p><p><ul><li>前端模板:thymeleaf+layui2x</li></ul></p><ul><li><b>开发建议</b></li></ul><p></p><ul><li>Model内成员变量建议与表字段数量对应,如需扩展成员变量(比如连表查询)建议创建VO,否则需在扩展的成员变量上加@TableField(exist = false)</li><li>如果表有是否删除字段,需要在Model注解@TableLogic 默认1未删 0删除, 或@TableLogic(value=\"逻辑未删除值\",delval=\"逻辑删除值\")</li></ul><p></p><p><ul><li>建议业务失败直接使用throw new BusinessException(\"ErrorMessage\")抛出,由统一异常处理器来封装业务失败的响应结果,会直接被封装为{\"code\":500002,\"message\":\"ErrorMessage\"}返回,尽情抛出;</li></ul></p><ul><li><b>使用说明</b></li></ul><p></p><ul><li>使用IDE导入本项目,IDE需要安装lombok插件</li><li>下载redis 启动redis</li><li>创建company_project数据库,导入doc下的company_project.sql</li><li>运行项目<ol><li>直接运行CompanyProjectApplication.java</li><li>项目根目录下执行mvn -X clean package -Dmaven.test.skip=true编译打包,然后执行java -jar manager.jar</li></ol></li><li>接口文档访问&nbsp;<a href=\"http://localhost:8080/doc.html\" target=\"_blank\">http://localhost:8080/doc.html</a></li><li>登录地址&nbsp;<a href=\"http://localhost:8080/index/login\" target=\"_blank\">http://localhost:8080/index/login</a>&nbsp;用户名密码:admin/123456</li><li>代码生成使用:<ol><li>点击[代码生成]菜单,生成一个或多个表的代码,下载到本地</li><li>解压下载的代码,直接复制main文件夹到本地项目的src目录下</li><li>数据库执行sql,生成菜单</li></ol><p></p><p><ol><li>点击[角色管理]菜单,修改角色所绑定的菜单的权限,刷新页面查看</li></ol></p><ol><li><b>参与贡献</b></li></ol><p></p></li></ul><ol><li>Fork 本项目</li><li>新建 feature_xxx 分支</li><li>提交代码</li></ol><p></p><p><ol><li>提交 Pull Request</li></ol></p><ol><li><b>效果图</b></li></ol><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200507134721.png\" data-fancybox=\"images\" data-caption=\"image-20200507134713461\"><img src=\"http://tuchuang.aitangbao.com.cn/20200507134721.png\" alt=\"image-20200507134713461\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200507134721.png\" data-fancybox=\"images\" data-caption=\"image-20200507134713461\">image-20200507134713461</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161348.png\" data-fancybox=\"images\" data-caption=\"2\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161348.png\" alt=\"2\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161348.png\" data-fancybox=\"images\" data-caption=\"2\">2</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161353.png\" data-fancybox=\"images\" data-caption=\"3\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161353.png\" alt=\"3\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161353.png\" data-fancybox=\"images\" data-caption=\"3\">3</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161355.png\" data-fancybox=\"images\" data-caption=\"4\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161355.png\" alt=\"4\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161355.png\" data-fancybox=\"images\" data-caption=\"4\">4</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161404.png\" data-fancybox=\"images\" data-caption=\"5\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161404.png\" alt=\"5\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161404.png\" data-fancybox=\"images\" data-caption=\"5\">5</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161359.png\" data-fancybox=\"images\" data-caption=\"7\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161359.png\" alt=\"7\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161359.png\" data-fancybox=\"images\" data-caption=\"7\">7</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200430172453.png\" data-fancybox=\"images\" data-caption=\"image-20200430172452726\"><img src=\"http://tuchuang.aitangbao.com.cn/20200430172453.png\" alt=\"image-20200430172452726\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200430172453.png\" data-fancybox=\"images\" data-caption=\"image-20200430172452726\">image-20200430172452726</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161414.png\" data-fancybox=\"images\" data-caption=\"9\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161414.png\" alt=\"9\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161414.png\" data-fancybox=\"images\" data-caption=\"9\">9</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161423.png\" data-fancybox=\"images\" data-caption=\"12\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161423.png\" alt=\"12\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161423.png\" data-fancybox=\"images\" data-caption=\"12\">12</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161425.png\" data-fancybox=\"images\" data-caption=\"13\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161425.png\" alt=\"13\"></a></p><p class=\"text-center text-muted pt-3\" style=\"text-align: center;\"><a href=\"http://tuchuang.aitangbao.com.cn/20200429161425.png\" data-fancybox=\"images\" data-caption=\"13\">13</a></p><p></p><p><a href=\"http://tuchuang.aitangbao.com.cn/20200429161428.png\" data-fancybox=\"images\" data-caption=\"16\"><img src=\"http://tuchuang.aitangbao.com.cn/20200429161428.png\" alt=\"16\"></a></p></article>', '2020-04-22 16:58:35');
326325
-- 2020.5.27添加文章管理 end
327326

328327
-- 2020.6.15添加文件管理 begin

doc/oracle.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ COMMENT ON TABLE "sys_job_log" IS '定时任务日志';
161161
CREATE TABLE sys_content (
162162
id varchar2(50),
163163
title varchar2(255),
164+
type NUMBER(10, 0),
164165
content VARCHAR2(4000) ,
165166
create_time varchar2(20) ,
166167
PRIMARY KEY (id)

doc/sqlServer.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ CREATE TABLE sys_job_log (
154154
CREATE TABLE sys_content (
155155
id varchar(50),
156156
title varchar(255),
157+
type int,
157158
content varchar(4000) ,
158159
create_time datetime ,
159160
PRIMARY KEY (id)

src/main/java/com/company/project/entity/SysContentEntity.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,31 @@ public class SysContentEntity extends PageReqVO implements Serializable {
2626
private static final long serialVersionUID = 1L;
2727

2828
/**
29-
*
29+
* 主键id
3030
*/
3131
@TableId("id")
3232
private String id;
3333

3434
/**
35-
*
35+
* 主题
3636
*/
3737
@TableField("title")
3838
private String title;
3939

4040
/**
41-
*
41+
* 内容
4242
*/
4343
@TableField("content")
4444
private String content;
4545

4646
/**
47-
*
47+
* 类型(数据字典)
48+
*/
49+
@TableField("type")
50+
private String type;
51+
52+
/**
53+
* 创建时间
4854
*/
4955
@TableField(value = "create_time", fill = FieldFill.INSERT)
5056
private Date createTime;

src/main/java/com/company/project/entity/SysDictDetailEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class SysDictDetailEntity extends PageReqVO implements Serializable {
2626
private static final long serialVersionUID = 1L;
2727

2828
/**
29-
*
29+
* 主键
3030
*/
3131
@TableId("id")
3232
private String id;

src/main/java/com/company/project/entity/SysDictEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public class SysDictEntity extends PageReqVO implements Serializable {
2323
private static final long serialVersionUID = 1L;
2424

2525
/**
26-
*
26+
* 主键
2727
*/
2828
@TableId("id")
2929
private String id;

src/main/java/com/company/project/entity/SysFilesEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public class SysFilesEntity extends PageReqVO implements Serializable {
2626
private static final long serialVersionUID = 1L;
2727

2828
/**
29-
*
29+
* 主键
3030
*/
3131
@TableId("id")
3232
private String id;

src/main/java/com/company/project/service/impl/SysDictServiceImpl.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,20 @@
11
package com.company.project.service.impl;
22

3+
import com.alibaba.fastjson.JSON;
4+
import com.alibaba.fastjson.JSONArray;
5+
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
6+
import com.company.project.entity.SysDictDetailEntity;
7+
import com.company.project.mapper.SysDictDetailMapper;
38
import org.springframework.stereotype.Service;
49
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
510

611
import com.company.project.mapper.SysDictMapper;
712
import com.company.project.entity.SysDictEntity;
813
import com.company.project.service.SysDictService;
14+
import org.springframework.util.StringUtils;
15+
16+
import javax.annotation.Resource;
17+
import java.util.List;
918

1019
/**
1120
* 数据字典 服务类
@@ -17,5 +26,27 @@
1726
@Service("sysDictService")
1827
public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDictEntity> implements SysDictService {
1928

29+
@Resource
30+
private SysDictDetailMapper sysDictDetailMapper;
31+
32+
/**
33+
* 根据字典类型查询字典数据信息
34+
*
35+
* @param name 字典名称
36+
* @return 参数键值
37+
**/
38+
public JSONArray getType(String name) {
39+
if (StringUtils.isEmpty(name)) {
40+
return new JSONArray();
41+
}
42+
//根据名称获取字典
43+
SysDictEntity dict = this.getOne(Wrappers.<SysDictEntity>lambdaQuery().eq(SysDictEntity::getName, name));
44+
if (dict == null || dict.getId() == null) {
45+
return new JSONArray();
46+
}
47+
//获取明细
48+
List<SysDictDetailEntity> list = sysDictDetailMapper.selectList(Wrappers.<SysDictDetailEntity>lambdaQuery().eq(SysDictDetailEntity::getDictId, dict.getId()));
49+
return JSONArray.parseArray(JSON.toJSONString(list));
50+
}
2051

2152
}

src/main/resources/static/js/core.util.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,24 @@ var CoreUtil = (function () {
8484
return false;
8585
}
8686
}
87+
88+
//字典数据回显
89+
coreUtil.selectDictLabel = function (datas, value) {
90+
datas = JSON.parse(datas);
91+
var label = "";
92+
$.each(datas, function(index, dict) {
93+
if (dict.value == ('' + value)) {
94+
label = dict.label;
95+
return false;
96+
}
97+
});
98+
//匹配不到,返回未知
99+
if (CoreUtil.isEmpty(label)) {
100+
return "未知";
101+
}
102+
return label;
103+
}
104+
105+
87106
return coreUtil;
88107
})(CoreUtil, window);

src/main/resources/templates/syscontent/list.html

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,15 @@
1919
<input type="title" name="title" placeholder="请输入标题" autocomplete="off" class="layui-input">
2020
</div>
2121
</div>
22+
<div class="layui-form-item">
23+
<label class="layui-form-label">类型</label>
24+
<div class="layui-input-block">
25+
<select id="type" name="type" lay-filter="select-type" th:with="type=${@sysDictService.getType('content_type')}">
26+
<option value="0">请选择</option>
27+
<option th:each="dict : ${type}" th:text="${dict.label}" th:value="${dict.value}"></option>
28+
</select>
29+
</div>
30+
</div>
2231
<div class="layui-form-item">
2332
<label class="layui-form-label">内容</label>
2433
<div class="layui-input-block">
@@ -69,6 +78,8 @@
6978
<script src="/layui/layui.all.js"></script>
7079
<script src="/js/core.util.js"></script>
7180
<script>
81+
//文章类型字典数据
82+
var datas = "[[${@sysDictService.getType('content_type')}]]".replace(/&quot;/g,"\"");
7283
//获取token
7384
var token = CoreUtil.getData("access_token");
7485
//地址栏转义token中的#号
@@ -112,6 +123,11 @@
112123
{type: 'checkbox', fixed: 'left'},
113124
{field: 'id', title: 'id', sort: true},
114125
{field: 'title', title: '标题', sort: true},
126+
{field: 'type', title: '类型', sort: true, templet: function (item) {
127+
//获取类型对应的字典label
128+
return CoreUtil.selectDictLabel(datas, item.type);
129+
}
130+
},
115131
{field: 'content', title: '内容', sort: true},
116132
{field: 'createTime', title: '创建时间', sort: true},
117133
{width: 200, toolbar: "#tool", title: '操作'}
@@ -143,6 +159,9 @@
143159
$(".operation input[name=id]").val("");
144160
$(".operation input[name=title]").val("");
145161
layedit.setContent(editIndex, "");
162+
//渲染select 默认选中第一个
163+
$("#type option:first").prop("selected", 'selected');
164+
form.render();
146165
break;
147166
}
148167
;
@@ -163,6 +182,11 @@
163182
$(".operation input[name=id]").val(data.id);
164183
$(".operation input[name=title]").val(data.title);
165184
layedit.setContent(editIndex, data.content);
185+
//渲染select 默认选中
186+
if (!CoreUtil.isEmpty(data.type)) {
187+
$("#type").find('option[value="'+data.type+'"]').prop('selected',true);
188+
form.render();
189+
}
166190
break;
167191
case 'preview':
168192
layer.open({

0 commit comments

Comments
 (0)