mirror of
https://github.com/chillzhuang/SpringBlade.git
synced 2024-11-24 11:29:26 +08:00
⚡ 优化代码
This commit is contained in:
parent
f8963a439a
commit
c7112fd9d7
2
LICENSE
2
LICENSE
@ -176,7 +176,7 @@ recommend that a file or class name and description of purpose be included on
|
||||
the same "printed page" as the copyright notice for easier identification within
|
||||
third-party archives.
|
||||
|
||||
Copyright 2019 smallchill
|
||||
Copyright 2019 ZhuangQian (smallchill@163.com)
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
57
README.md
57
README.md
@ -6,17 +6,23 @@
|
||||
* 官网地址:[https://bladex.vip](https://bladex.vip)
|
||||
|
||||
## 在线演示
|
||||
* 演示地址:[https://sword.bladex.vip](https://sword.bladex.vip)
|
||||
* Sword演示地址:[https://sword.bladex.vip](https://sword.bladex.vip)
|
||||
* Saber演示地址:[https://saber.avue.top](https://saber.avue.top)
|
||||
|
||||
## 项目地址
|
||||
* [github](https://github.com/chillzhuang/SpringBlade)
|
||||
* [gitee](https://gitee.com/smallc/SpringBlade)
|
||||
## 后端项目地址
|
||||
* [Gitee地址](https://gitee.com/smallc/SpringBlade)
|
||||
* [Github地址](https://github.com/chillzhuang/SpringBlade)
|
||||
|
||||
## 前端项目地址
|
||||
* [Sword--基于React](https://gitee.com/smallc/Sword)
|
||||
* [Saber--基于Vue](https://gitee.com/smallc/Saber)
|
||||
|
||||
## 主要特性&&变化
|
||||
* 采用前后端分离的模式,前端单独开源出一个框架:[Sword](https://github.com/chillzhuang/Sword),主要选型技术为React、Ant Design、Umi、Dva
|
||||
* 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:[BladeTool](https://github.com/chillzhuang/blade-tool.git)
|
||||
* [BladeTool](https://github.com/chillzhuang/blade-tool.git)已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发
|
||||
* 集成Sentinel从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
|
||||
* 采用前后端分离的模式,前端开源出一个基于React的框架:[Sword](https://gitee.com/smallc/Sword),主要选型技术为React、Ant Design、Umi、Dva
|
||||
* 采用前后端分离的模式,前端开源出一个基于Vue的框架:[Saber](https://gitee.com/smallc/Saber),主要选型技术为Vue、VueX、Avue、Element-UI
|
||||
* 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:[BladeTool](https://github.com/chillzhuang/blade-tool)
|
||||
* [BladeTool](https://github.com/chillzhuang/blade-tool)已推送至Maven中央库,直接引入即可,减少了工程的臃肿,也可更注重于业务开发
|
||||
* 集成Sentinel从流量控制、熔断降级、系统负载等多个维度保护服务的稳定性。
|
||||
* 注册中心、配置中心选型Nacos,为工程瘦身的同时加强各模块之间的联动。
|
||||
* 使用Traefik进行反向代理,监听后台变化自动化应用新的配置文件。
|
||||
* 部署使用Docker或K8s + Jenkins
|
||||
@ -31,6 +37,9 @@
|
||||
## 技术文档
|
||||
* [SpringBlade开发手册](https://gitee.com/smallc/SpringBlade/wikis/SpringBlade开发手册)
|
||||
|
||||
## 单工程SpringBoot版
|
||||
* [SpringBoot版](https://gitee.com/smallc/SpringBlade/tree/2.0-boot/)
|
||||
|
||||
## 工程结构
|
||||
```
|
||||
SpringBlade
|
||||
@ -39,7 +48,7 @@ SpringBlade
|
||||
├── blade-gateway -- Spring Cloud 网关
|
||||
├── blade-ops -- 运维中心
|
||||
├ ├── blade-admin -- spring-cloud后台管理
|
||||
├ ├── blade-codegen -- 代码生成
|
||||
├ ├── blade-develop -- 代码生成
|
||||
├── blade-service -- 业务模块
|
||||
├ ├── blade-desk -- 工作台模块
|
||||
├ ├── blade-log -- 日志模块
|
||||
@ -80,12 +89,14 @@ Apache Licence也是对商业应用友好的许可。使用者也可以在需要
|
||||
注意:若禁止条款被发现有权追讨19999的授权费。
|
||||
|
||||
## 注
|
||||
* SpringBlade前端UI项目地址:[Sword](https://gitee.com/smallc/Sword)
|
||||
* SpringBlade核心框架项目地址:[Blade-Tool](https://github.com/chillzhuang/blade-tool.git)
|
||||
* SpringBlade交流群:`477853168`
|
||||
* 前端UI项目地址(基于React):[Sword](https://gitee.com/smallc/Sword)
|
||||
* 前端UI项目地址(基于Vue):[Saber](https://gitee.com/smallc/Saber)
|
||||
* 核心框架项目地址:[BladeTool](https://github.com/chillzhuang/blade-tool.git)
|
||||
* 交流群:`477853168`
|
||||
|
||||
|
||||
# 界面一览
|
||||
# 界面
|
||||
## 监控界面一览
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-k8s1.png"/></td>
|
||||
@ -111,6 +122,10 @@ Apache Licence也是对商业应用友好的许可。使用者也可以在需要
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-swagger1.png"/></td>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/springblade-swagger2.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Sword界面一览
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-main.png"/></td>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-menu.png"/></td>
|
||||
@ -131,4 +146,20 @@ Apache Licence也是对商业应用友好的许可。使用者也可以在需要
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-locale-cn.png"/></td>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/sword-locale-us.png"/></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
## Saber界面一览
|
||||
<table>
|
||||
<tr>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-user.png"/></td>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-role.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-dict.png"/></td>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-dict-select.png"/></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-log.png"/></td>
|
||||
<td><img src="https://gitee.com/smallc/SpringBlade/raw/master/pic/saber-code.png"/></td>
|
||||
</tr>
|
||||
</table>
|
@ -62,7 +62,7 @@ public class AuthController {
|
||||
User user = res.getData().getUser();
|
||||
|
||||
//验证用户
|
||||
if (user == null) {
|
||||
if (user == null || Func.isEmpty(user.getId())) {
|
||||
return R.fail("用户名或密码不正确");
|
||||
}
|
||||
|
||||
|
@ -23,6 +23,11 @@
|
||||
<artifactId>blade-core-boot</artifactId>
|
||||
<version>${blade.tool.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springblade</groupId>
|
||||
<artifactId>blade-common</artifactId>
|
||||
<version>${blade.project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-generator</artifactId>
|
||||
|
@ -248,7 +248,7 @@ public class BladeGenerator {
|
||||
*/
|
||||
private Properties getProperties() {
|
||||
// 读取配置文件
|
||||
Resource resource = new ClassPathResource("generator.properties");
|
||||
Resource resource = new ClassPathResource("/templates/props/generator.properties");
|
||||
Properties props = new Properties();
|
||||
try {
|
||||
props = PropertiesLoaderUtils.loadProperties(resource);
|
||||
|
@ -30,7 +30,7 @@ class $!{entity}View extends PureComponent {
|
||||
params: { id },
|
||||
},
|
||||
} = this.props;
|
||||
router.push(`/$!{cfg.servicePackage}/$!{table.entityPath}/edit/${id}`);
|
||||
router.push(`/$!{cfg.servicePackage}/$!{table.entityPath}/edit/$!{id}`);
|
||||
};
|
||||
|
||||
render() {
|
||||
|
@ -23,7 +23,6 @@ import org.springblade.core.secure.BladeUser;
|
||||
import org.springblade.core.tool.api.R;
|
||||
import org.springblade.core.tool.support.Kv;
|
||||
import org.springblade.core.tool.utils.Func;
|
||||
import org.springblade.system.dto.MenuDTO;
|
||||
import org.springblade.system.entity.Menu;
|
||||
import org.springblade.system.feign.IDictClient;
|
||||
import org.springblade.system.service.IMenuService;
|
||||
@ -33,7 +32,6 @@ import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@ -154,10 +152,7 @@ public class MenuController extends BladeController {
|
||||
@GetMapping("auth-routes")
|
||||
@ApiOperation(value = "菜单的角色权限", position = 8)
|
||||
public R<List<Kv>> authRoutes(BladeUser user) {
|
||||
List<Kv> list = new ArrayList<>();
|
||||
List<MenuDTO> routes = menuService.authRoutes(Func.toIntList(user.getRoleId()));
|
||||
routes.forEach(route -> list.add(Kv.init().set(route.getPath(), Kv.init().set("authority", Func.toStrArray(route.getAlias())))));
|
||||
return R.data(list);
|
||||
return R.data(menuService.authRoutes(user));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -17,7 +17,8 @@ package org.springblade.system.service;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import org.springblade.system.dto.MenuDTO;
|
||||
import org.springblade.core.secure.BladeUser;
|
||||
import org.springblade.core.tool.support.Kv;
|
||||
import org.springblade.system.entity.Menu;
|
||||
import org.springblade.system.vo.MenuVO;
|
||||
|
||||
@ -80,9 +81,9 @@ public interface IMenuService extends IService<Menu> {
|
||||
|
||||
/**
|
||||
* 获取配置的角色权限
|
||||
* @param roleIds
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
List<MenuDTO> authRoutes(List<Integer> roleIds);
|
||||
List<Kv> authRoutes(BladeUser user);
|
||||
|
||||
}
|
||||
|
@ -19,7 +19,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springblade.core.secure.BladeUser;
|
||||
import org.springblade.core.tool.node.ForestNodeMerger;
|
||||
import org.springblade.core.tool.support.Kv;
|
||||
import org.springblade.core.tool.utils.Func;
|
||||
import org.springblade.system.dto.MenuDTO;
|
||||
import org.springblade.system.entity.Menu;
|
||||
@ -31,10 +33,7 @@ import org.springblade.system.vo.MenuVO;
|
||||
import org.springblade.system.wrapper.MenuWrapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
@ -98,8 +97,14 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IM
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MenuDTO> authRoutes(List<Integer> roleIds) {
|
||||
return baseMapper.authRoutes(roleIds);
|
||||
public List<Kv> authRoutes(BladeUser user) {
|
||||
if (Func.isEmpty(user)) {
|
||||
return null;
|
||||
}
|
||||
List<MenuDTO> routes = baseMapper.authRoutes(Func.toIntList(user.getRoleId()));
|
||||
List<Kv> list = new ArrayList<>();
|
||||
routes.forEach(route -> list.add(Kv.init().set(route.getPath(), Kv.init().set("authority", Func.toStrArray(route.getAlias())))));
|
||||
return list;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -69,8 +69,7 @@ public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements IR
|
||||
roleMenus.add(roleMenu);
|
||||
}));
|
||||
// 新增配置
|
||||
roleMenuService.saveBatch(roleMenus);
|
||||
return true;
|
||||
return roleMenuService.saveBatch(roleMenus);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import org.springblade.core.tool.utils.Func;
|
||||
import org.springblade.system.feign.IDictClient;
|
||||
import org.springblade.system.user.entity.User;
|
||||
import org.springblade.system.user.service.IUserService;
|
||||
import org.springblade.system.user.vo.UserVO;
|
||||
import org.springblade.system.user.wrapper.UserWrapper;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import springfox.documentation.annotations.ApiIgnore;
|
||||
@ -56,7 +57,7 @@ public class UserController {
|
||||
*/
|
||||
@ApiOperation(value = "查看详情", notes = "传入id", position = 1)
|
||||
@GetMapping("/detail")
|
||||
public R<User> detail(User user) {
|
||||
public R<UserVO> detail(User user) {
|
||||
User detail = userService.getOne(Condition.getQueryWrapper(user));
|
||||
UserWrapper userWrapper = new UserWrapper(userService, dictClient);
|
||||
return R.data(userWrapper.entityVO(detail));
|
||||
@ -71,9 +72,10 @@ public class UserController {
|
||||
@ApiImplicitParam(name = "realName", value = "姓名", paramType = "query", dataType = "string")
|
||||
})
|
||||
@ApiOperation(value = "列表", notes = "传入account和realName", position = 2)
|
||||
public R<IPage<User>> list(@ApiIgnore @RequestParam Map<String, Object> user, Query query) {
|
||||
public R<IPage<UserVO>> list(@ApiIgnore @RequestParam Map<String, Object> user, Query query) {
|
||||
IPage<User> pages = userService.page(Condition.getPage(query), Condition.getQueryWrapper(user, User.class));
|
||||
return R.data(pages);
|
||||
UserWrapper userWrapper = new UserWrapper(userService, dictClient);
|
||||
return R.data(userWrapper.pageVO(pages));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,18 +4,18 @@
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<artifactId>blade-service</artifactId>
|
||||
<name>${project.artifactId}</name>
|
||||
<version>2.0.0</version>
|
||||
<packaging>pom</packaging>
|
||||
<description>SpringBlade 微服务集合</description>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springblade</groupId>
|
||||
<artifactId>SpringBlade</artifactId>
|
||||
<version>2.0.0</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>blade-service</artifactId>
|
||||
<name>${project.artifactId}</name>
|
||||
<version>2.0.0</version>
|
||||
<packaging>pom</packaging>
|
||||
<description>SpringBlade 微服务集合</description>
|
||||
|
||||
<modules>
|
||||
<module>blade-desk</module>
|
||||
<module>blade-log</module>
|
||||
|
@ -18,10 +18,10 @@ spring:
|
||||
|
||||
#feign配置
|
||||
feign:
|
||||
#hystrix:
|
||||
#enabled: true
|
||||
sentinel:
|
||||
hystrix:
|
||||
enabled: true
|
||||
#sentinel:
|
||||
#enabled: true
|
||||
okhttp:
|
||||
enabled: true
|
||||
httpclient:
|
||||
@ -39,7 +39,7 @@ hystrix:
|
||||
execution:
|
||||
isolation:
|
||||
thread:
|
||||
timeoutInMilliseconds: 720000
|
||||
timeoutInMilliseconds: 5000
|
||||
|
||||
#ribbon配置
|
||||
ribbon:
|
||||
|
BIN
pic/saber-code.png
Normal file
BIN
pic/saber-code.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 278 KiB |
BIN
pic/saber-dict-select.png
Normal file
BIN
pic/saber-dict-select.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 352 KiB |
BIN
pic/saber-dict.png
Normal file
BIN
pic/saber-dict.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 388 KiB |
BIN
pic/saber-log.png
Normal file
BIN
pic/saber-log.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 468 KiB |
BIN
pic/saber-role.png
Normal file
BIN
pic/saber-role.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 320 KiB |
BIN
pic/saber-user.png
Normal file
BIN
pic/saber-user.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 300 KiB |
16
pom.xml
16
pom.xml
@ -9,13 +9,13 @@
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<properties>
|
||||
<blade.tool.version>2.0.0</blade.tool.version>
|
||||
<blade.tool.version>2.0.6</blade.tool.version>
|
||||
<blade.project.version>2.0.0</blade.project.version>
|
||||
|
||||
<java.version>1.8</java.version>
|
||||
<swagger.version>2.9.2</swagger.version>
|
||||
<swagger.models.version>1.5.21</swagger.models.version>
|
||||
<swagger.bootstrapui.version>1.8.8</swagger.bootstrapui.version>
|
||||
<swagger.bootstrapui.version>1.8.9</swagger.bootstrapui.version>
|
||||
<mybatis.plus.version>3.0.7.1</mybatis.plus.version>
|
||||
<curator.framework.version>4.0.1</curator.framework.version>
|
||||
<protostuff.version>1.6.0</protostuff.version>
|
||||
@ -25,7 +25,7 @@
|
||||
|
||||
<spring.boot.version>2.0.8.RELEASE</spring.boot.version>
|
||||
<spring.cloud.version>Finchley.SR2</spring.cloud.version>
|
||||
<spring.platform.version>Cairo-SR5</spring.platform.version>
|
||||
<spring.platform.version>Cairo-SR7</spring.platform.version>
|
||||
|
||||
<!-- 推荐使用Harbor -->
|
||||
<docker.registry.url>192.168.186.129</docker.registry.url>
|
||||
@ -79,16 +79,6 @@
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
Loading…
Reference in New Issue
Block a user