Skip to content

Commit c3d267e

Browse files
author
zhuoda
committed
v3.8.0【优化】简介明了的数据范围说明文档;【优化】Long序列化;【优化】标签页右键关闭;【优化】表格排序Demo
1 parent 6eb7930 commit c3d267e

File tree

73 files changed

+1841
-334
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+1841
-334
lines changed

README.md

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
### **SmartAdmin**
22

3-
**SmartAdmin****中国·洛阳** [1024创新实验室](https://www.1024lab.net/) 基于SpringBoot+Sa-Token+Mybatis-Plus 和 Vue3+Vite5+Ant Design Vue ,坚持以 <font color="#DC143C">**「高质量代码」为核心,「简洁、高效、安全」**</font>的快速开发平台
3+
**SmartAdmin****中国·洛阳** [1024创新实验室](https://www.1024lab.net/) 基于SpringBoot2/3+Sa-Token+Mybatis-Plus 和 Vue3+Ant Design Vue+Uni-App+Uni-UI,并以 <font color="#DC143C">**「高质量代码」为核心,「简洁、高效、安全」**</font>的快速开发平台
44

5-
<font color="#DC143C">**国内首个满足《网络安全》、《数据安全》、三级等保**</font>支持登录限制、支持接口国产加解密、支持数据加解密等一系列安全措施的开源项目
5+
**<font color="#DC143C">国内首个满足《网络安全-三级等保》、《数据安全》</font>** 功能要求,支持登录限制、接口国产加解密、数据脱敏等一系列安全要求
66

7-
前端同时支持 **<font color="#DC143C">JavaScript和TypeScript双版本</font>**后端同时支持 **<font color="#DC143C">Java8+SpringBoot2.X和Java17+SpringBoot3.X 双版本</font>**
7+
前端提供 **<font color="#DC143C">JavaScript和TypeScript双版本</font>**后端提供 **<font color="#DC143C">Java8+SpringBoot2.X和Java17+SpringBoot3.X 双版本</font>**
88

9-
<font color="#DC143C">**SmartAdmin开源一套漂亮的代码和一套整洁的代码规范**</font>,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,保持谦逊,保持学习,**热爱代码,更热爱生活**
9+
同时 **<font color="#DC143C">重磅开源</font>** 开源六年来 **<font color="#DC143C">千余家企业验证过且正在使用</font>** 的代码规范: **<font color="#DC143C">《高质量代码思想》、《Vue3规范》、《Java规范》</font>** ,让大家在这浮躁的世界里感受到一股把代码写好的清流!同时又能节省大量时间,减少加班,快乐工作,保持谦逊,保持学习,**<font color="#DC143C">热爱代码,更热爱生活</font>**
1010
### **技术体系**
1111

12-
- 前端:Vue3 + Vite5 + Vue-Router + Pinia + Ant Design Vue 4.X
12+
- 前端:JavaScript/TypeScript + Vue3 + Vite5 + Pinia + Ant Design Vue 4.X
1313
- 移动端:uniapp (vue3版本) + uni-ui + (同时支持APP、小程序、H5)
14-
- 后端:SpringBoot2/3 + Sa Token + Mybatis-plus + 多种数据库
14+
- 后端:Java8/17 + SpringBoot2/3 + Sa Token + Mybatis-plus + 多种数据库
1515
- 电脑在线预览:[https://preview.smartadmin.vip](https://preview.smartadmin.vip)
1616
- 官方文档:[https://smartadmin.vip](https://smartadmin.vip)
1717
- 移动端在线预览:[https://app.smartadmin.vip](https://app.smartadmin.vip/#/pages/login/login)
@@ -51,7 +51,7 @@
5151

5252
### **功能亮点**
5353

54-
- **<font color="#DC143C">安全体系</font>**:满足国家三级等保要求,如密码加密、密码复杂度要求、登录错误次数锁定、登录超时退出等关键功能
54+
- **<font color="#DC143C">安全体系</font>**:满足国家三级等保要求,如双因子登录、密码加密、密码复杂度要求、登录错误次数锁定、登录超时退出、数据脱敏等网络安全和数据安全功能
5555
- **<font color="#DC143C">接口加解密</font>**:支持请求参数和返回内容进行加解密操作,支持国产加密算法和其他国外加密算法
5656
- **表格自定义列**:支持用户自定义列,并能将用户自定义列持久化到数据库
5757
- **数据变更记录**:支持基于git diff插件的数据变更记录,查看数据变化更直观方便

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/goods/domain/form/GoodsQueryForm.java

+3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package net.lab1024.sa.admin.module.business.goods.domain.form;
22

3+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
34
import io.swagger.v3.oas.annotations.media.Schema;
45
import lombok.Data;
56
import net.lab1024.sa.admin.module.business.goods.constant.GoodsStatusEnum;
67
import net.lab1024.sa.base.common.domain.PageParam;
8+
import net.lab1024.sa.base.common.json.deserializer.DictValueVoDeserializer;
79
import net.lab1024.sa.base.common.swagger.SchemaEnum;
810
import net.lab1024.sa.base.common.validator.enumeration.CheckEnum;
911
import org.hibernate.validator.constraints.Length;
@@ -32,6 +34,7 @@ public class GoodsQueryForm extends PageParam {
3234
private Integer goodsStatus;
3335

3436
@Schema(description = "产地")
37+
@JsonDeserialize(using = DictValueVoDeserializer.class)
3538
private String place;
3639

3740
@Schema(description = "上架状态")

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/business/oa/notice/service/NoticeEmployeeService.java

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public class NoticeEmployeeService {
5252
public ResponseDTO<PageResult<NoticeEmployeeVO>> queryList(Long requestEmployeeId, NoticeEmployeeQueryForm noticeEmployeeQueryForm) {
5353
Page<?> page = SmartPageUtil.convert2PageQuery(noticeEmployeeQueryForm);
5454

55-
//获取请求人的 部门及其子部门
5655
List<Long> employeeDepartmentIdList = Lists.newArrayList();
5756
EmployeeEntity employeeEntity = employeeService.getById(requestEmployeeId);
5857
// 如果不是管理员 则获取请求人的 部门及其子部门

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/controller/EmployeeController.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
* @Date 2021-12-09 22:57:49
2626
* @Wechat zhuoda1024
2727
28-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
28+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
2929
*/
3030
@RestController
3131
@Tag(name = AdminSwaggerTagConst.System.SYSTEM_EMPLOYEE)
@@ -110,7 +110,7 @@ public ResponseDTO<Boolean> getPasswordComplexityEnabled() {
110110
@Operation(summary = "重置员工密码 @author 卓大")
111111
@GetMapping("/employee/update/password/reset/{employeeId}")
112112
@SaCheckPermission("system:employee:password:reset")
113-
public ResponseDTO<String> resetPassword(@PathVariable Integer employeeId) {
113+
public ResponseDTO<String> resetPassword(@PathVariable Long employeeId) {
114114
return employeeService.resetPassword(employeeId);
115115
}
116116

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/dao/EmployeeDao.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,6 @@ EmployeeEntity getByActualName(@Param("actualName") String actualName,
113113
/**
114114
* 员工重置密码
115115
*/
116-
Integer updatePassword(@Param("employeeId") Integer employeeId, @Param("password") String password);
116+
Integer updatePassword(@Param("employeeId") Long employeeId, @Param("password") String password);
117117

118118
}

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/employee/service/EmployeeService.java

+1-3
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@
4747
@Service
4848
public class EmployeeService {
4949

50-
private static final String PASSWORD_SALT_FORMAT = "smart_%s_admin_$^&*";
51-
5250
@Resource
5351
private EmployeeDao employeeDao;
5452

@@ -364,7 +362,7 @@ public ResponseDTO<List<EmployeeVO>> getAllEmployeeByDepartmentId(Long departmen
364362
/**
365363
* 重置密码
366364
*/
367-
public ResponseDTO<String> resetPassword(Integer employeeId) {
365+
public ResponseDTO<String> resetPassword(Long employeeId) {
368366
String password = securityPasswordService.randomPassword();
369367
employeeDao.updatePassword(employeeId, SecurityPasswordService.getEncryptPwd(password));
370368
return ResponseDTO.ok(password);

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/role/manager/RoleEmployeeManager.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
* @Date 2022-04-08 21:53:04
1717
* @Wechat zhuoda1024
1818
19-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
19+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
2020
*/
2121
@Service
2222
public class RoleEmployeeManager extends ServiceImpl<RoleEmployeeDao, RoleEmployeeEntity> {

smart-admin-api-java17-springboot3/sa-admin/src/main/java/net/lab1024/sa/admin/module/system/support/AdminProtectController.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* @Date 2023/10/17 19:07:27
3030
* @Wechat zhuoda1024
3131
32-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>,Since 2012
32+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>,Since 2012
3333
*/
3434

3535
@RestController

smart-admin-api-java17-springboot3/sa-admin/src/main/resources/mapper/business/oa/notice/NoticeMapper.xml

+12-12
Original file line numberDiff line numberDiff line change
@@ -95,25 +95,25 @@
9595
left join t_notice_type on t_notice.notice_type_id = t_notice_type.notice_type_id
9696
<where>
9797
<if test="!administratorFlag">
98-
(
98+
(
9999
t_notice.notice_id in
100100
(select t_notice_visible_range.notice_id
101101
from t_notice_visible_range
102102
where
103103
( t_notice_visible_range.data_type = #{departmentDataType}
104-
<if test="requestEmployeeDepartmentIdList != null and requestEmployeeDepartmentIdList.size > 0">
105-
and
106-
t_notice_visible_range.data_id
107-
in
108-
<foreach collection="requestEmployeeDepartmentIdList" open="(" close=")" separator="," item="item">
109-
#{item}
110-
</foreach>
111-
</if>
112-
)
113-
or ( t_notice_visible_range.data_type = #{employeeDataType} and t_notice_visible_range.data_id = #{requestEmployeeId} )
104+
<if test="requestEmployeeDepartmentIdList != null and requestEmployeeDepartmentIdList.size > 0">
105+
and
106+
t_notice_visible_range.data_id
107+
in
108+
<foreach collection="requestEmployeeDepartmentIdList" open="(" close=")" separator="," item="item">
109+
#{item}
110+
</foreach>
111+
</if>
112+
)
113+
or ( t_notice_visible_range.data_type = #{employeeDataType} and t_notice_visible_range.data_id = #{requestEmployeeId} )
114114
)
115115
or t_notice.all_visible_flag = true
116-
)
116+
)
117117
</if>
118118

119119
and t_notice.deleted_flag = #{deletedFlag}

smart-admin-api-java17-springboot3/sa-admin/src/main/resources/test/application.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# 项目配置: 名称、日志目录
99
project:
1010
name: sa-admin
11-
log-directory: /home/project/smartadmin/sit/log
11+
log-directory: /home/project/smartadmin/test/log
1212

1313
# 项目端口和url根路径
1414
server:

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/common/json/serializer/LongJsonSerializer.java

+14-5
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,24 @@
1414
* @Date 2020-06-02 22:55:07
1515
* @Wechat zhuoda1024
1616
17-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
17+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
1818
*/
1919
public class LongJsonSerializer extends JsonSerializer<Long> {
2020

21+
public static final LongJsonSerializer INSTANCE = new LongJsonSerializer();
22+
2123
@Override
22-
public void serialize(Long value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
23-
String text = (value == null ? null : String.valueOf(value));
24-
if (text != null) {
25-
jsonGenerator.writeString(text);
24+
public void serialize(Long value, JsonGenerator gen, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
25+
if (null == value) {
26+
gen.writeNull();
27+
return;
28+
}
29+
// js中最大安全整数16位 Number.MAX_SAFE_INTEGER
30+
String longStr = String.valueOf(value);
31+
if (longStr.length() > 16) {
32+
gen.writeString(longStr);
33+
} else {
34+
gen.writeNumber(value);
2635
}
2736
}
2837
}

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/DateConfig.java smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/JsonConfig.java

+5-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
77
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
88
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
9+
import net.lab1024.sa.base.common.json.serializer.LongJsonSerializer;
910
import org.apache.commons.lang3.StringUtils;
1011
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
1112
import org.springframework.context.annotation.Bean;
@@ -17,16 +18,16 @@
1718
import java.time.format.DateTimeParseException;
1819

1920
/**
20-
* java8 localDate 时间类格式化配置
21+
* Json 序列化配置
2122
*
2223
* @Author 1024创新实验室-主任: 卓大
2324
* @Date 2017-11-28 15:21:10
2425
* @Wechat zhuoda1024
2526
26-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
27+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
2728
*/
2829
@Configuration
29-
public class DateConfig {
30+
public class JsonConfig {
3031

3132
@Bean
3233
public Jackson2ObjectMapperBuilderCustomizer customizer() {
@@ -35,6 +36,7 @@ public Jackson2ObjectMapperBuilderCustomizer customizer() {
3536
builder.deserializers(new LocalDateTimeDeserializer(DatePattern.NORM_DATETIME_FORMAT.getDateTimeFormatter()));
3637
builder.serializers(new LocalDateSerializer(DatePattern.NORM_DATE_FORMAT.getDateTimeFormatter()));
3738
builder.serializers(new LocalDateTimeSerializer(DatePattern.NORM_DATETIME_FORMAT.getDateTimeFormatter()));
39+
builder.serializerByType(Long.class, LongJsonSerializer.INSTANCE);
3840
};
3941
}
4042

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/SwaggerConfig.java

+21-23
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,9 @@
3131
/**
3232
* springdoc-openapi 配置
3333
* nginx配置前缀时如果需要访问【/swagger-ui/index.html】需添加额外nginx配置
34-
* location /v3/api-docs/ {
35-
* proxy_pass http://127.0.0.1:11024/v3/api-docs/;
34+
* location /v3/api-docs/ {
35+
* proxy_pass http://127.0.0.1:1024/v3/api-docs/;
3636
* }
37-
*
3837
* @Author 1024创新实验室-主任: 卓大
3938
* @Date 2020-03-25 22:54:46
4039
* @Wechat zhuoda1024
@@ -48,7 +47,7 @@ public class SwaggerConfig {
4847
/**
4948
* 用于解决/swagger-ui/index.html页面ServersUrl 测试环境部署错误问题
5049
*/
51-
@Value("${springdoc.swagger-ui.server-base-url:''}")
50+
@Value("${springdoc.swagger-ui.server-base-url}")
5251
private String serverBaseUrl;
5352

5453
public static final String[] SWAGGER_WHITELIST = {
@@ -59,20 +58,20 @@ public class SwaggerConfig {
5958
"/v3/api-docs",
6059
"/v3/api-docs/**",
6160
"/doc.html",
62-
};
61+
};
6362

6463
@Bean
6564
public OpenAPI api() {
6665
return new OpenAPI()
6766
.components(components())
6867
.info(new Info()
69-
.title("SmartAdmin 3.X 接口文档")
70-
.contact(new Contact().name("1024创新实验室").email("[email protected]").url("https://1024lab.net"))
71-
.version("v3.X")
72-
.description("<font color=\"#DC143C\">**以「高质量代码」为核心,「简洁、高效、安全」**</font>基于 SpringBoot + Sa-Token + Mybatis-Plus 和 Vue3 + Vite5 + Ant Design (同时支持JavaScript和TypeScript双版本) 的快速开发平台。" +
73-
"<br/><font color=\"#DC143C\">**国内首个满足《网络安全》、《数据安全》、三级等保**</font>, 支持登录限制、支持国产接口加解密等安全、支持数据加解密等一系列安全体系的开源项目。" +
74-
"<br/><font color=\"#DC143C\">**我们开源一套漂亮的代码和一套整洁的代码规范**</font>,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,保持谦逊,保持学习,热爱代码,更热爱生活!")
75-
)
68+
.title("SmartAdmin 3.X 接口文档")
69+
.contact(new Contact().name("1024创新实验室").email("[email protected]").url("https://1024lab.net"))
70+
.version("v3.X")
71+
.description("<font color=\"#DC143C\">**以「高质量代码」为核心,「简洁、高效、安全」**</font>基于 SpringBoot + Sa-Token + Mybatis-Plus 和 Vue3 + Vite5 + Ant Design (同时支持JavaScript和TypeScript双版本) 的快速开发平台。" +
72+
"<br/><font color=\"#DC143C\">**国内首个满足《网络安全》、《数据安全》、三级等保**</font>, 支持登录限制、支持国产接口加解密等安全、支持数据加解密等一系列安全体系的开源项目。" +
73+
"<br/><font color=\"#DC143C\">**我们开源一套漂亮的代码和一套整洁的代码规范**</font>,让大家在这浮躁的代码世界里感受到一股把代码写好的清流!同时又让开发者节省大量的时间,减少加班,快乐工作,保持谦逊,保持学习,热爱代码,更热爱生活!")
74+
)
7675
.addSecurityItem(new SecurityRequirement().addList(RequestHeaderConst.TOKEN));
7776
}
7877

@@ -84,27 +83,26 @@ private Components components() {
8483
@Bean
8584
public GroupedOpenApi businessApi() {
8685
return GroupedOpenApi.builder()
87-
.group("业务接口")
88-
.pathsToMatch("/**")
89-
.pathsToExclude(SwaggerTagConst.Support.URL_PREFIX + "/**")
90-
.addOperationCustomizer(new SmartOperationCustomizer())
91-
.build();
86+
.group("业务接口")
87+
.pathsToMatch("/**")
88+
.pathsToExclude(SwaggerTagConst.Support.URL_PREFIX + "/**")
89+
.addOperationCustomizer(new SmartOperationCustomizer())
90+
.build();
9291

9392
}
9493

9594
@Bean
9695
public GroupedOpenApi supportApi() {
9796
return GroupedOpenApi.builder()
98-
.group("支撑接口(Support)")
99-
.pathsToMatch(SwaggerTagConst.Support.URL_PREFIX + "/**")
100-
.addOperationCustomizer(new SmartOperationCustomizer())
101-
.build();
97+
.group("支撑接口(Support)")
98+
.pathsToMatch(SwaggerTagConst.Support.URL_PREFIX + "/**")
99+
.addOperationCustomizer(new SmartOperationCustomizer())
100+
.build();
102101
}
103102

104103
/**
105104
* 以下代码可以用于设置 /swagger-ui/index.html 的serverBaseUrl
106105
* 如果使用knife4j则不需要
107-
*
108106
* @param openAPI
109107
* @param securityParser
110108
* @param springDocConfigProperties
@@ -132,6 +130,6 @@ public String customize(String baseUrl) {
132130
}
133131
});
134132
return new OpenAPIService(openAPI, securityParser, springDocConfigProperties,
135-
propertyResolverUtils, openApiBuilderCustomizers, Optional.of(list), javadocProvider);
133+
propertyResolverUtils, openApiBuilderCustomizers, Optional.of(list), javadocProvider);
136134
}
137135
}

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/config/UrlConfig.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
* @Date 2022-05-30 21:22:12
2929
* @Wechat zhuoda1024
3030
31-
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
31+
* @Copyright <a href="https://1024lab.net">1024创新实验室</a>
3232
*/
3333
@Configuration
3434
@Slf4j

smart-admin-api-java17-springboot3/sa-base/src/main/java/net/lab1024/sa/base/listener/WebServerListener.java

+8-8
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,14 @@ private void showProjectMessage(WebServerInitializedEvent webServerInitializedEv
6767
String swaggerUrl = URLUtil.normalize(String.format("http://localhost:%d%s/swagger-ui/index.html", port, contextPath), false, true);
6868
String knife4jUrl = URLUtil.normalize(String.format("http://localhost:%d%s/doc.html", port, contextPath), false, true);
6969
log.warn("\n{}\n" +
70-
"\t当前启动环境:\t{} , {}" +
71-
"\n\t返回码初始化:\t完成{}个返回码初始化" +
72-
"\n\t服务本机地址:\t{}" +
73-
"\n\t服务外网地址:\t{}" +
74-
"\n\tSwagger地址:\t{}" +
75-
"\n\tknife4j地址:\t{}" +
76-
"\n-------------------------------------------------------------------------------------\n",
77-
title, profile, environmentEnum.getDesc(), codeCount, localhostUrl, externalUrl, swaggerUrl, knife4jUrl);
70+
"\t当前启动环境:\t{} , {}" +
71+
"\n\t返回码初始化:\t完成{}个返回码初始化" +
72+
"\n\t服务本机地址:\t{}" +
73+
"\n\t服务外网地址:\t{}" +
74+
"\n\tSwagger地址:\t{}" +
75+
"\n\tknife4j地址:\t{}" +
76+
"\n-------------------------------------------------------------------------------------\n",
77+
title, profile, environmentEnum.getDesc(), codeCount, localhostUrl, externalUrl, swaggerUrl, knife4jUrl);
7878
}
7979

8080
/**

0 commit comments

Comments
 (0)