mirror of
https://github.com/continew-org/continew-admin.git
synced 2025-09-09 08:57:16 +08:00
build: continew-starter 2.13.3 => 2.13.4
1.移除 continew-starter-security-password 模块依赖及相关配置(已融合到 security-crypto 模块) 2.更新 continew-starter-security-crypto 模块配置 3.BaseController 增加跳过 DICT、DICT_TREE 接口权限处理 4.EnableCrudRestController => EnableCrudApi 5.调整 CRUD 相关 Controller API 接口配置,增加 DICT 或 DICT_TREE 接口,移除原 CommonController 接口
This commit is contained in:
10
README.md
10
README.md
@@ -4,7 +4,7 @@
|
|||||||
<img src="https://img.shields.io/badge/SNAPSHOT-v4.0.0-%23ff3f59.svg" alt="Release" />
|
<img src="https://img.shields.io/badge/SNAPSHOT-v4.0.0-%23ff3f59.svg" alt="Release" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://github.com/continew-org/continew-starter" title="ContiNew Starter" target="_blank">
|
<a href="https://github.com/continew-org/continew-starter" title="ContiNew Starter" target="_blank">
|
||||||
<img src="https://img.shields.io/badge/ContiNew Starter-2.13.3-%236CB52D.svg" alt="ContiNew Starter" />
|
<img src="https://img.shields.io/badge/ContiNew Starter-2.13.4-%236CB52D.svg" alt="ContiNew Starter" />
|
||||||
</a>
|
</a>
|
||||||
<a href="https://spring.io/projects/spring-boot" title="Spring Boot" target="_blank">
|
<a href="https://spring.io/projects/spring-boot" title="Spring Boot" target="_blank">
|
||||||
<img src="https://img.shields.io/badge/Spring Boot-3.3.12-%236CB52D.svg?logo=Spring-Boot" alt="Spring Boot" />
|
<img src="https://img.shields.io/badge/Spring Boot-3.3.12-%236CB52D.svg?logo=Spring-Boot" alt="Spring Boot" />
|
||||||
@@ -88,12 +88,12 @@ ContiNew Admin(Continue New Admin),页面现代美观,且专注设计与
|
|||||||
|
|
||||||
2.**Starter 组件:** 从 v2.1.0 版本开始,抽取并封装后端基础组件及各框架集成配置到 ContiNew Starter 项目,且 **[已发布至 Maven 中央仓库](https://central.sonatype.com/search?q=continew-starter&namespace=top.continew)**,可在你的任意项目中直接引入所需依赖使用。即使你不用脚手架项目,难道能让你搭项目框架更快、更爽、更省力的 Starter 也要 Say No 吗?
|
2.**Starter 组件:** 从 v2.1.0 版本开始,抽取并封装后端基础组件及各框架集成配置到 ContiNew Starter 项目,且 **[已发布至 Maven 中央仓库](https://central.sonatype.com/search?q=continew-starter&namespace=top.continew)**,可在你的任意项目中直接引入所需依赖使用。即使你不用脚手架项目,难道能让你搭项目框架更快、更爽、更省力的 Starter 也要 Say No 吗?
|
||||||
|
|
||||||
3.**CRUD 套件:** 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,且 API 支持按实际所需开放或扩展。
|
3.**CRUD 套件:** 封装通用增删改查套件,适配后端各分层,几分钟即可提供一套 CRUD API,包括新增、修改、批量删除、查询详情、分页列表查询、全部列表查询、树型列表查询、导出到 Excel,甚至是字典列表(用于下拉选项场景),且 API 支持按实际所需开放或扩展。
|
||||||
|
|
||||||
```java
|
```java
|
||||||
@Tag(name = "部门管理 API")
|
@Tag(name = "部门管理 API")
|
||||||
@RestController
|
@RestController
|
||||||
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.EXPORT})
|
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.EXPORT, Api.DICT_TREE})
|
||||||
public class DeptController extends BaseController<DeptService, DeptResp, DeptDetailResp, DeptQuery, DeptReq> {}
|
public class DeptController extends BaseController<DeptService, DeptResp, DeptDetailResp, DeptQuery, DeptReq> {}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -231,7 +231,7 @@ public class DeptController extends BaseController<DeptService, DeptResp, DeptDe
|
|||||||
| <a href="https://arco.design/vue/docs/start" target="_blank">Arco Design</a> | 2.57.0 | 字节跳动推出的前端 UI 框架,年轻化的色彩和组件设计。 |
|
| <a href="https://arco.design/vue/docs/start" target="_blank">Arco Design</a> | 2.57.0 | 字节跳动推出的前端 UI 框架,年轻化的色彩和组件设计。 |
|
||||||
| <a href="https://www.typescriptlang.org/zh/" target="_blank">TypeScript</a> | 5.0.4 | TypeScript 是微软开发的一个开源的编程语言,通过在 JavaScript 的基础上添加静态类型定义构建而成。 |
|
| <a href="https://www.typescriptlang.org/zh/" target="_blank">TypeScript</a> | 5.0.4 | TypeScript 是微软开发的一个开源的编程语言,通过在 JavaScript 的基础上添加静态类型定义构建而成。 |
|
||||||
| <a href="https://vite.dev/" target="_blank">Vite</a> | 5.1.5 | 下一代的前端工具链,为开发提供极速响应。 |
|
| <a href="https://vite.dev/" target="_blank">Vite</a> | 5.1.5 | 下一代的前端工具链,为开发提供极速响应。 |
|
||||||
| [ContiNew Starter](https://github.com/continew-org/continew-starter) | 2.13.3 | ContiNew Starter 包含了一系列经过企业实践优化的依赖包(如 MyBatis-Plus、SaToken),可轻松集成到应用中,为开发人员减少手动引入依赖及配置的麻烦,为 Spring Boot Web 项目的灵活快速构建提供支持。 |
|
| [ContiNew Starter](https://github.com/continew-org/continew-starter) | 2.13.4 | ContiNew Starter 包含了一系列经过企业实践优化的依赖包(如 MyBatis-Plus、SaToken),可轻松集成到应用中,为开发人员减少手动引入依赖及配置的麻烦,为 Spring Boot Web 项目的灵活快速构建提供支持。 |
|
||||||
| <a href="https://spring.io/projects/spring-boot" target="_blank">Spring Boot</a> | 3.3.12 | 简化 Spring 应用的初始搭建和开发过程,基于“约定优于配置”的理念,使开发人员不再需要定义样板化的配置。(Spring Boot 3.0 开始,要求 Java 17 作为最低版本) |
|
| <a href="https://spring.io/projects/spring-boot" target="_blank">Spring Boot</a> | 3.3.12 | 简化 Spring 应用的初始搭建和开发过程,基于“约定优于配置”的理念,使开发人员不再需要定义样板化的配置。(Spring Boot 3.0 开始,要求 Java 17 作为最低版本) |
|
||||||
| <a href="https://undertow.io/" target="_blank">Undertow</a> | 2.3.18.Final | 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。 |
|
| <a href="https://undertow.io/" target="_blank">Undertow</a> | 2.3.18.Final | 采用 Java 开发的灵活的高性能 Web 服务器,提供包括阻塞和基于 NIO 的非堵塞机制。 |
|
||||||
| <a href="https://sa-token.dev33.cn/" target="_blank">Sa-Token + JWT</a> | 1.44.0 | 轻量级 Java 权限认证框架,让鉴权变得简单、优雅。 |
|
| <a href="https://sa-token.dev33.cn/" target="_blank">Sa-Token + JWT</a> | 1.44.0 | 轻量级 Java 权限认证框架,让鉴权变得简单、优雅。 |
|
||||||
@@ -253,7 +253,7 @@ public class DeptController extends BaseController<DeptService, DeptResp, DeptDe
|
|||||||
| [AJ-Captcha](https://ajcaptcha.beliefteam.cn/captcha-doc/) | 1.3.0 | Java 行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式。 |
|
| [AJ-Captcha](https://ajcaptcha.beliefteam.cn/captcha-doc/) | 1.3.0 | Java 行为验证码,包含滑动拼图、文字点选两种方式,UI支持弹出和嵌入两种方式。 |
|
||||||
| Easy Captcha | 1.6.2 | Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 |
|
| Easy Captcha | 1.6.2 | Java 图形验证码,支持 gif、中文、算术等类型,可用于 Java Web、JavaSE 等项目。 |
|
||||||
| [Crane4j](https://createsequence.gitee.io/crane4j-doc/#/) | 2.9.0 | 一个基于注解的,用于完成一切 “根据 A 的 key 值拿到 B,再把 B 的属性映射到 A” 这类需求的字段填充框架。 |
|
| [Crane4j](https://createsequence.gitee.io/crane4j-doc/#/) | 2.9.0 | 一个基于注解的,用于完成一切 “根据 A 的 key 值拿到 B,再把 B 的属性映射到 A” 这类需求的字段填充框架。 |
|
||||||
| [SpEL Validator](https://spel-validator.sticki.cn/) | 0.5.1-beta | 基于 SpEL 的 jakarta.validation-api 扩展增强包。 |
|
| [SpEL Validator](https://spel-validator.sticki.cn/) | 0.5.2-beta | 基于 SpEL 的 jakarta.validation-api 扩展增强包。 |
|
||||||
| [CosID](https://cosid.ahoo.me/guide/getting-started.html) | 2.13.0 | 旨在提供通用、灵活、高性能的分布式 ID 生成器。 |
|
| [CosID](https://cosid.ahoo.me/guide/getting-started.html) | 2.13.0 | 旨在提供通用、灵活、高性能的分布式 ID 生成器。 |
|
||||||
| [Graceful Response](https://doc.feiniaojin.com/graceful-response/home.html) | 5.0.4-boot3 | 一个Spring Boot技术栈下的优雅响应处理组件,可以帮助开发者完成响应数据封装、异常处理、错误码填充等过程,提高开发效率,提高代码质量。 |
|
| [Graceful Response](https://doc.feiniaojin.com/graceful-response/home.html) | 5.0.4-boot3 | 一个Spring Boot技术栈下的优雅响应处理组件,可以帮助开发者完成响应数据封装、异常处理、错误码填充等过程,提高开发效率,提高代码质量。 |
|
||||||
| <a href="https://doc.xiaominfo.com/" target="_blank">Knife4j</a> | 4.5.0 | 前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案。 |
|
| <a href="https://doc.xiaominfo.com/" target="_blank">Knife4j</a> | 4.5.0 | 前身是 swagger-bootstrap-ui,集 Swagger2 和 OpenAPI3 为一体的增强解决方案。 |
|
||||||
|
@@ -102,12 +102,6 @@
|
|||||||
<artifactId>continew-starter-auth-justauth</artifactId>
|
<artifactId>continew-starter-auth-justauth</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- ContiNew Starter 安全模块 - 密码编码器 -->
|
|
||||||
<dependency>
|
|
||||||
<groupId>top.continew.starter</groupId>
|
|
||||||
<artifactId>continew-starter-security-password</artifactId>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<!-- ContiNew Starter 安全模块 - 加密 -->
|
<!-- ContiNew Starter 安全模块 - 加密 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>top.continew.starter</groupId>
|
<groupId>top.continew.starter</groupId>
|
||||||
|
@@ -73,6 +73,10 @@ public class BaseController<S extends BaseService<L, D, Q, C>, L, D, Q, C> exten
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// 不需要校验 DICT、DICT_TREE 接口权限
|
||||||
|
if (Api.DICT.equals(crudApi.value()) || Api.DICT_TREE.equals(crudApi.value())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
// 校验权限,例如:创建用户接口(POST /system/user) => 校验 system:user:create 权限
|
// 校验权限,例如:创建用户接口(POST /system/user) => 校验 system:user:create 权限
|
||||||
String permissionPrefix = CrudApiPermissionPrefixCache.get(targetClass);
|
String permissionPrefix = CrudApiPermissionPrefixCache.get(targetClass);
|
||||||
String apiName = getApiName(crudApi.value());
|
String apiName = getApiName(crudApi.value());
|
||||||
|
@@ -19,14 +19,16 @@ package top.continew.admin.common.config.doc;
|
|||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||||
import cn.dev33.satoken.annotation.SaCheckRole;
|
import cn.dev33.satoken.annotation.SaCheckRole;
|
||||||
import cn.dev33.satoken.annotation.SaMode;
|
import cn.dev33.satoken.annotation.SaMode;
|
||||||
import cn.hutool.core.text.CharSequenceUtil;
|
|
||||||
import org.springframework.web.method.HandlerMethod;
|
import org.springframework.web.method.HandlerMethod;
|
||||||
import top.continew.admin.common.base.controller.BaseController;
|
import top.continew.admin.common.base.controller.BaseController;
|
||||||
|
import top.continew.admin.common.config.crud.CrudApiPermissionPrefixCache;
|
||||||
import top.continew.starter.core.constant.StringConstants;
|
import top.continew.starter.core.constant.StringConstants;
|
||||||
import top.continew.starter.extension.crud.annotation.CrudApi;
|
import top.continew.starter.extension.crud.annotation.CrudApi;
|
||||||
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
|
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
|
||||||
|
import top.continew.starter.extension.crud.enums.Api;
|
||||||
|
|
||||||
import java.lang.annotation.Annotation;
|
import java.lang.annotation.Annotation;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -160,18 +162,21 @@ public class OperationDescriptionCustomizer {
|
|||||||
*
|
*
|
||||||
* @param handlerMethod 处理程序方法
|
* @param handlerMethod 处理程序方法
|
||||||
* @return 拼接好的权限信息字符串
|
* @return 拼接好的权限信息字符串
|
||||||
|
* @see BaseController#preHandle(CrudApi, Object[], Method, Class)
|
||||||
*/
|
*/
|
||||||
private String getCrudPermissionInfo(HandlerMethod handlerMethod) {
|
private String getCrudPermissionInfo(HandlerMethod handlerMethod) {
|
||||||
CrudRequestMapping crudRequestMapping = handlerMethod.getBeanType().getAnnotation(CrudRequestMapping.class);
|
Class<?> targetClass = handlerMethod.getBeanType();
|
||||||
|
CrudRequestMapping crudRequestMapping = targetClass.getAnnotation(CrudRequestMapping.class);
|
||||||
CrudApi crudApi = handlerMethod.getMethodAnnotation(CrudApi.class);
|
CrudApi crudApi = handlerMethod.getMethodAnnotation(CrudApi.class);
|
||||||
if (crudRequestMapping == null || crudApi == null) {
|
if (crudRequestMapping == null || crudApi == null) {
|
||||||
return StringConstants.EMPTY;
|
return StringConstants.EMPTY;
|
||||||
}
|
}
|
||||||
|
if (Api.DICT.equals(crudApi.value()) || Api.DICT_TREE.equals(crudApi.value())) {
|
||||||
String path = crudRequestMapping.value();
|
return StringConstants.EMPTY;
|
||||||
String prefix = String.join(StringConstants.COLON, CharSequenceUtil.splitTrim(path, StringConstants.SLASH));
|
}
|
||||||
|
String permissionPrefix = CrudApiPermissionPrefixCache.get(targetClass);
|
||||||
String apiName = BaseController.getApiName(crudApi.value());
|
String apiName = BaseController.getApiName(crudApi.value());
|
||||||
String permission = "%s:%s".formatted(prefix, apiName.toLowerCase());
|
String permission = "%s:%s".formatted(permissionPrefix, apiName.toLowerCase());
|
||||||
return "<font style=\"color:red\" class=\"light-red\">CRUD 权限校验:</font></br><font style=\"color:red\" class=\"light-red\">方法:</font><font style=\"color:red\" class=\"light-red\">" + permission + "</font>";
|
return "<font style=\"color:red\" class=\"light-red\">CRUD 权限校验:</font></br><font style=\"color:red\" class=\"light-red\">方法:</font><font style=\"color:red\" class=\"light-red\">" + permission + "</font>";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -22,5 +22,5 @@ import ${packageName}.service.${classNamePrefix}Service;
|
|||||||
*/
|
*/
|
||||||
@Tag(name = "${businessName}管理 API")
|
@Tag(name = "${businessName}管理 API")
|
||||||
@RestController
|
@RestController
|
||||||
@CrudRequestMapping(value = "/${apiModuleName}/${apiName}", api = {Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE, Api.EXPORT})
|
@CrudRequestMapping(value = "/${apiModuleName}/${apiName}", api = {Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE, Api.EXPORT, Api.DICT})
|
||||||
public class ${className} extends BaseController<${classNamePrefix}Service, ${classNamePrefix}Resp, ${classNamePrefix}DetailResp, ${classNamePrefix}Query, ${classNamePrefix}Req> {}
|
public class ${className} extends BaseController<${classNamePrefix}Service, ${classNamePrefix}Resp, ${classNamePrefix}DetailResp, ${classNamePrefix}Query, ${classNamePrefix}Req> {}
|
@@ -1,4 +1,5 @@
|
|||||||
import http from '@/utils/http'
|
import http from '@/utils/http'
|
||||||
|
import type { LabelValueState } from '@/types/global'
|
||||||
|
|
||||||
const BASE_URL = '/${apiModuleName}/${apiName}'
|
const BASE_URL = '/${apiModuleName}/${apiName}'
|
||||||
|
|
||||||
@@ -64,3 +65,8 @@ export function delete${classNamePrefix}(id: string) {
|
|||||||
export function export${classNamePrefix}(query: ${classNamePrefix}Query) {
|
export function export${classNamePrefix}(query: ${classNamePrefix}Query) {
|
||||||
return http.download(`${'$'}{BASE_URL}/export`, query)
|
return http.download(`${'$'}{BASE_URL}/export`, query)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @desc 查询${businessName}字典 */
|
||||||
|
export function list${classNamePrefix}Dict(query?: ${classNamePrefix}Query) {
|
||||||
|
return http.get<LabelValueState[]>(`${BASE_URL}/dict`, query)
|
||||||
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="gi_table_page">
|
<GiPageLayout>
|
||||||
<GiTable
|
<GiTable
|
||||||
title="${businessName}管理"
|
title="${businessName}管理"
|
||||||
row-key="id"
|
row-key="id"
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
|
|
||||||
<${classNamePrefix}AddModal ref="${classNamePrefix}AddModalRef" @save-success="search" />
|
<${classNamePrefix}AddModal ref="${classNamePrefix}AddModalRef" @save-success="search" />
|
||||||
<${classNamePrefix}DetailDrawer ref="${classNamePrefix}DetailDrawerRef" />
|
<${classNamePrefix}DetailDrawer ref="${classNamePrefix}DetailDrawerRef" />
|
||||||
</div>
|
</GiPageLayout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
|
@@ -25,16 +25,10 @@ import org.springframework.web.bind.annotation.GetMapping;
|
|||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import top.continew.admin.tenant.model.query.PackageQuery;
|
|
||||||
import top.continew.admin.tenant.service.PackageService;
|
|
||||||
import top.continew.admin.tenant.service.TenantService;
|
import top.continew.admin.tenant.service.TenantService;
|
||||||
import top.continew.starter.extension.crud.model.query.SortQuery;
|
|
||||||
import top.continew.starter.extension.crud.model.resp.LabelValueResp;
|
|
||||||
import top.continew.starter.extension.tenant.annotation.TenantIgnore;
|
import top.continew.starter.extension.tenant.annotation.TenantIgnore;
|
||||||
import top.continew.starter.log.annotation.Log;
|
import top.continew.starter.log.annotation.Log;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 公共 API
|
* 公共 API
|
||||||
*
|
*
|
||||||
@@ -49,16 +43,8 @@ import java.util.List;
|
|||||||
@RequestMapping("/tenant/common")
|
@RequestMapping("/tenant/common")
|
||||||
public class CommonController {
|
public class CommonController {
|
||||||
|
|
||||||
private final PackageService packageService;
|
|
||||||
|
|
||||||
private final TenantService tenantService;
|
private final TenantService tenantService;
|
||||||
|
|
||||||
@Operation(summary = "查询套餐字典", description = "查询套餐字典列表")
|
|
||||||
@GetMapping("/dict/package")
|
|
||||||
public List<LabelValueResp> listPackageDict(PackageQuery query, SortQuery sortQuery) {
|
|
||||||
return packageService.listDict(query, sortQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SaIgnore
|
@SaIgnore
|
||||||
@TenantIgnore
|
@TenantIgnore
|
||||||
@Operation(summary = "根据域名查询租户 ID", description = "根据域名查询租户 ID")
|
@Operation(summary = "根据域名查询租户 ID", description = "根据域名查询租户 ID")
|
||||||
|
@@ -46,7 +46,7 @@ import java.util.List;
|
|||||||
@Tag(name = "套餐管理 API")
|
@Tag(name = "套餐管理 API")
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@CrudRequestMapping(value = "/tenant/package", api = {Api.LIST, Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE})
|
@CrudRequestMapping(value = "/tenant/package", api = {Api.LIST, Api.PAGE, Api.GET, Api.CREATE, Api.UPDATE, Api.DELETE, Api.DICT})
|
||||||
public class PackageController extends BaseController<PackageService, PackageResp, PackageDetailResp, PackageQuery, PackageReq> {
|
public class PackageController extends BaseController<PackageService, PackageResp, PackageDetailResp, PackageQuery, PackageReq> {
|
||||||
|
|
||||||
private final TenantExtensionProperties tenantExtensionProperties;
|
private final TenantExtensionProperties tenantExtensionProperties;
|
||||||
|
@@ -36,7 +36,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
|
|||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import top.continew.starter.core.autoconfigure.application.ApplicationProperties;
|
import top.continew.starter.core.autoconfigure.application.ApplicationProperties;
|
||||||
import top.continew.starter.extension.crud.annotation.EnableCrudRestController;
|
import top.continew.starter.extension.crud.annotation.EnableCrudApi;
|
||||||
import top.continew.starter.web.annotation.EnableGlobalResponse;
|
import top.continew.starter.web.annotation.EnableGlobalResponse;
|
||||||
import top.continew.starter.web.model.R;
|
import top.continew.starter.web.model.R;
|
||||||
|
|
||||||
@@ -47,10 +47,10 @@ import top.continew.starter.web.model.R;
|
|||||||
* @since 2022/12/8 23:15
|
* @since 2022/12/8 23:15
|
||||||
*/
|
*/
|
||||||
@Slf4j
|
@Slf4j
|
||||||
|
@EnableCrudApi
|
||||||
|
@EnableGlobalResponse
|
||||||
@EnableFileStorage
|
@EnableFileStorage
|
||||||
@EnableMethodCache(basePackages = "top.continew.admin")
|
@EnableMethodCache(basePackages = "top.continew.admin")
|
||||||
@EnableGlobalResponse
|
|
||||||
@EnableCrudRestController
|
|
||||||
@EnableFeignClients
|
@EnableFeignClients
|
||||||
@RestController
|
@RestController
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
|
@@ -119,17 +119,21 @@ logging:
|
|||||||
file:
|
file:
|
||||||
path: ./logs
|
path: ./logs
|
||||||
|
|
||||||
--- ### 安全配置:字段加/解密配置
|
--- ### 安全配置:加/解密配置
|
||||||
continew-starter.security:
|
continew-starter.security.crypto:
|
||||||
crypto:
|
enabled: true
|
||||||
|
# 默认算法,即 @FieldEncrypt 默认采用的算法(默认:AES 对称加密算法)
|
||||||
|
algorithm: AES
|
||||||
|
# 对称加密算法密钥
|
||||||
|
password: abcdefghijklmnop
|
||||||
|
# 非对称加密算法密钥(在线生成 RSA 密钥对:http://web.chacuo.net/netrsakeypair)
|
||||||
|
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM51dgYtMyF+tTQt80sfFOpSV27a7t9uaUVeFrdGiVxscuizE7H8SMntYqfn9lp8a5GH5P1/GGehVjUD2gF/4kcCAwEAAQ==
|
||||||
|
private-key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAznV2Bi0zIX61NC3zSx8U6lJXbtru325pRV4Wt0aJXGxy6LMTsfxIye1ip+f2WnxrkYfk/X8YZ6FWNQPaAX/iRwIDAQABAkEAk/VcAusrpIqA5Ac2P5Tj0VX3cOuXmyouaVcXonr7f+6y2YTjLQuAnkcfKKocQI/juIRQBFQIqqW/m1nmz1wGeQIhAO8XaA/KxzOIgU0l/4lm0A2Wne6RokJ9HLs1YpOzIUmVAiEA3Q9DQrpAlIuiT1yWAGSxA9RxcjUM/1kdVLTkv0avXWsCIE0X8woEjK7lOSwzMG6RpEx9YHdopjViOj1zPVH61KTxAiBmv/dlhqkJ4rV46fIXELZur0pj6WC3N7a4brR8a+CLLQIhAMQyerWl2cPNVtE/8tkziHKbwW3ZUiBXU24wFxedT9iV
|
||||||
|
## 密码编码器配置
|
||||||
|
password-encoder:
|
||||||
enabled: true
|
enabled: true
|
||||||
# 默认算法,即 @FieldEncrypt 默认采用的算法(默认:AES 对称加密算法)
|
# 默认启用的编码器算法(默认:BCrypt 加密算法)
|
||||||
algorithm: AES
|
algorithm: BCRYPT
|
||||||
# 对称加密算法密钥
|
|
||||||
password: abcdefghijklmnop
|
|
||||||
# 非对称加密算法密钥(在线生成 RSA 密钥对:http://web.chacuo.net/netrsakeypair)
|
|
||||||
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM51dgYtMyF+tTQt80sfFOpSV27a7t9uaUVeFrdGiVxscuizE7H8SMntYqfn9lp8a5GH5P1/GGehVjUD2gF/4kcCAwEAAQ==
|
|
||||||
private-key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAznV2Bi0zIX61NC3zSx8U6lJXbtru325pRV4Wt0aJXGxy6LMTsfxIye1ip+f2WnxrkYfk/X8YZ6FWNQPaAX/iRwIDAQABAkEAk/VcAusrpIqA5Ac2P5Tj0VX3cOuXmyouaVcXonr7f+6y2YTjLQuAnkcfKKocQI/juIRQBFQIqqW/m1nmz1wGeQIhAO8XaA/KxzOIgU0l/4lm0A2Wne6RokJ9HLs1YpOzIUmVAiEA3Q9DQrpAlIuiT1yWAGSxA9RxcjUM/1kdVLTkv0avXWsCIE0X8woEjK7lOSwzMG6RpEx9YHdopjViOj1zPVH61KTxAiBmv/dlhqkJ4rV46fIXELZur0pj6WC3N7a4brR8a+CLLQIhAMQyerWl2cPNVtE/8tkziHKbwW3ZUiBXU24wFxedT9iV
|
|
||||||
|
|
||||||
--- ### 验证码配置
|
--- ### 验证码配置
|
||||||
continew-starter.captcha:
|
continew-starter.captcha:
|
||||||
|
@@ -128,17 +128,21 @@ logging:
|
|||||||
file:
|
file:
|
||||||
path: ../logs
|
path: ../logs
|
||||||
|
|
||||||
--- ### 安全配置:字段加/解密配置
|
--- ### 安全配置:加/解密配置
|
||||||
continew-starter.security:
|
continew-starter.security.crypto:
|
||||||
crypto:
|
enabled: true
|
||||||
|
# 默认算法,即 @FieldEncrypt 默认采用的算法(默认:AES 对称加密算法)
|
||||||
|
algorithm: AES
|
||||||
|
# 对称加密算法密钥
|
||||||
|
password: abcdefghijklmnop
|
||||||
|
# 非对称加密算法密钥(在线生成 RSA 密钥对:http://web.chacuo.net/netrsakeypair)
|
||||||
|
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM51dgYtMyF+tTQt80sfFOpSV27a7t9uaUVeFrdGiVxscuizE7H8SMntYqfn9lp8a5GH5P1/GGehVjUD2gF/4kcCAwEAAQ==
|
||||||
|
private-key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAznV2Bi0zIX61NC3zSx8U6lJXbtru325pRV4Wt0aJXGxy6LMTsfxIye1ip+f2WnxrkYfk/X8YZ6FWNQPaAX/iRwIDAQABAkEAk/VcAusrpIqA5Ac2P5Tj0VX3cOuXmyouaVcXonr7f+6y2YTjLQuAnkcfKKocQI/juIRQBFQIqqW/m1nmz1wGeQIhAO8XaA/KxzOIgU0l/4lm0A2Wne6RokJ9HLs1YpOzIUmVAiEA3Q9DQrpAlIuiT1yWAGSxA9RxcjUM/1kdVLTkv0avXWsCIE0X8woEjK7lOSwzMG6RpEx9YHdopjViOj1zPVH61KTxAiBmv/dlhqkJ4rV46fIXELZur0pj6WC3N7a4brR8a+CLLQIhAMQyerWl2cPNVtE/8tkziHKbwW3ZUiBXU24wFxedT9iV
|
||||||
|
## 密码编码器配置
|
||||||
|
password-encoder:
|
||||||
enabled: true
|
enabled: true
|
||||||
# 默认算法,即 @FieldEncrypt 默认采用的算法(默认:AES 对称加密算法)
|
# 默认启用的编码器算法(默认:BCrypt 加密算法)
|
||||||
algorithm: AES
|
algorithm: BCRYPT
|
||||||
# 对称加密算法密钥
|
|
||||||
password: abcdefghijklmnop
|
|
||||||
# 非对称加密算法密钥(在线生成 RSA 密钥对:http://web.chacuo.net/netrsakeypair)
|
|
||||||
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAM51dgYtMyF+tTQt80sfFOpSV27a7t9uaUVeFrdGiVxscuizE7H8SMntYqfn9lp8a5GH5P1/GGehVjUD2gF/4kcCAwEAAQ==
|
|
||||||
private-key: MIIBVQIBADANBgkqhkiG9w0BAQEFAASCAT8wggE7AgEAAkEAznV2Bi0zIX61NC3zSx8U6lJXbtru325pRV4Wt0aJXGxy6LMTsfxIye1ip+f2WnxrkYfk/X8YZ6FWNQPaAX/iRwIDAQABAkEAk/VcAusrpIqA5Ac2P5Tj0VX3cOuXmyouaVcXonr7f+6y2YTjLQuAnkcfKKocQI/juIRQBFQIqqW/m1nmz1wGeQIhAO8XaA/KxzOIgU0l/4lm0A2Wne6RokJ9HLs1YpOzIUmVAiEA3Q9DQrpAlIuiT1yWAGSxA9RxcjUM/1kdVLTkv0avXWsCIE0X8woEjK7lOSwzMG6RpEx9YHdopjViOj1zPVH61KTxAiBmv/dlhqkJ4rV46fIXELZur0pj6WC3N7a4brR8a+CLLQIhAMQyerWl2cPNVtE/8tkziHKbwW3ZUiBXU24wFxedT9iV
|
|
||||||
|
|
||||||
--- ### 验证码配置
|
--- ### 验证码配置
|
||||||
continew-starter.captcha:
|
continew-starter.captcha:
|
||||||
|
@@ -7,7 +7,7 @@ application:
|
|||||||
description: 持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。
|
description: 持续迭代优化的前后端分离中后台管理系统框架,开箱即用,持续提供舒适的开发体验。
|
||||||
# 版本
|
# 版本
|
||||||
version: 4.0.0-SNAPSHOT
|
version: 4.0.0-SNAPSHOT
|
||||||
starter: 2.13.3
|
starter: 2.13.4
|
||||||
# 基本包
|
# 基本包
|
||||||
base-package: top.continew.admin
|
base-package: top.continew.admin
|
||||||
## 作者信息配置
|
## 作者信息配置
|
||||||
@@ -89,13 +89,12 @@ spring.task:
|
|||||||
await-termination-period: 30s
|
await-termination-period: 30s
|
||||||
|
|
||||||
--- ### 文件上传配置
|
--- ### 文件上传配置
|
||||||
spring.servlet:
|
spring.servlet.multipart:
|
||||||
multipart:
|
enabled: true
|
||||||
enabled: true
|
# 单文件上传大小限制
|
||||||
# 单文件上传大小限制
|
max-file-size: 10MB
|
||||||
max-file-size: 10MB
|
# 单次总上传文件大小限制
|
||||||
# 单次总上传文件大小限制
|
max-request-size: 20MB
|
||||||
max-request-size: 20MB
|
|
||||||
## 头像配置
|
## 头像配置
|
||||||
avatar:
|
avatar:
|
||||||
# 存储路径
|
# 存储路径
|
||||||
@@ -135,24 +134,23 @@ knife4j:
|
|||||||
footer-custom-content: 'Copyright © 2022-present [${application.contact.name}](${application.contact.url}) ⋅ [${application.name}](${application.url}) v${application.version}'
|
footer-custom-content: 'Copyright © 2022-present [${application.contact.name}](${application.contact.url}) ⋅ [${application.name}](${application.url}) v${application.version}'
|
||||||
|
|
||||||
--- ### 全局响应配置
|
--- ### 全局响应配置
|
||||||
continew-starter.web:
|
continew-starter.web.response:
|
||||||
response:
|
# 是否开启国际化(默认:false)
|
||||||
# 是否开启国际化(默认:false)
|
i18n: false
|
||||||
i18n: false
|
# 自定义失败 HTTP 状态码(默认:200,建议业务和通信状态码区分)
|
||||||
# 自定义失败 HTTP 状态码(默认:200,建议业务和通信状态码区分)
|
default-http-status-code-on-error: 200
|
||||||
default-http-status-code-on-error: 200
|
# 自定义成功响应码(默认:0)
|
||||||
# 自定义成功响应码(默认:0)
|
default-success-code: 0
|
||||||
default-success-code: 0
|
# 自定义成功提示(默认:ok)
|
||||||
# 自定义成功提示(默认:ok)
|
default-success-msg: ok
|
||||||
default-success-msg: ok
|
# 自定义失败响应码(默认:1)
|
||||||
# 自定义失败响应码(默认:1)
|
default-error-code: 1
|
||||||
default-error-code: 1
|
# 自定义失败提示(默认:error)
|
||||||
# 自定义失败提示(默认:error)
|
default-error-msg: error
|
||||||
default-error-msg: error
|
# 是否将原生异常错误信息填充到状态信息中
|
||||||
# 是否将原生异常错误信息填充到状态信息中
|
origin-exception-using-detail-message: false
|
||||||
origin-exception-using-detail-message: false
|
# 响应类全名(配置后 response-style 将不再生效)
|
||||||
# 响应类全名(配置后 response-style 将不再生效)
|
response-class-full-name: top.continew.starter.web.model.R
|
||||||
response-class-full-name: top.continew.starter.web.model.R
|
|
||||||
|
|
||||||
--- ### 日志配置
|
--- ### 日志配置
|
||||||
## API 请求/响应日志配置
|
## API 请求/响应日志配置
|
||||||
@@ -182,13 +180,6 @@ continew-starter.trace:
|
|||||||
pattern: '[$spanId][$traceId]'
|
pattern: '[$spanId][$traceId]'
|
||||||
mdc-enable: false
|
mdc-enable: false
|
||||||
|
|
||||||
--- ### 安全配置:密码编码器配置
|
|
||||||
continew-starter.security:
|
|
||||||
password:
|
|
||||||
enabled: true
|
|
||||||
# 默认启用的编码器算法(默认:BCrypt 加密算法)
|
|
||||||
algorithm: BCRYPT
|
|
||||||
|
|
||||||
--- ### CRUD 配置
|
--- ### CRUD 配置
|
||||||
continew-starter.crud:
|
continew-starter.crud:
|
||||||
## 全局树结构配置(简单树,对应前端 UI)
|
## 全局树结构配置(简单树,对应前端 UI)
|
||||||
@@ -237,10 +228,9 @@ continew-starter.tenant:
|
|||||||
- 9000 # 开发工具
|
- 9000 # 开发工具
|
||||||
|
|
||||||
--- ### 限流器配置
|
--- ### 限流器配置
|
||||||
continew-starter:
|
continew-starter.rate-limiter:
|
||||||
rate-limiter:
|
enabled: true
|
||||||
enabled: true
|
key-prefix: RateLimiter
|
||||||
key-prefix: RateLimiter
|
|
||||||
|
|
||||||
--- ### Sa-Token 配置
|
--- ### Sa-Token 配置
|
||||||
sa-token:
|
sa-token:
|
||||||
|
@@ -38,7 +38,7 @@ public class DictApiImpl implements DictApi {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LabelValueResp> listAll() {
|
public List<LabelValueResp> listAll() {
|
||||||
List<LabelValueResp> list = baseService.listDict(null, null);
|
List<LabelValueResp> list = baseService.dict(null, null);
|
||||||
list.addAll(baseService.listEnumDict());
|
list.addAll(baseService.listEnumDict());
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
@@ -17,7 +17,6 @@
|
|||||||
package top.continew.admin.system.controller;
|
package top.continew.admin.system.controller;
|
||||||
|
|
||||||
import cn.dev33.satoken.annotation.SaIgnore;
|
import cn.dev33.satoken.annotation.SaIgnore;
|
||||||
import cn.hutool.core.lang.tree.Tree;
|
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.alicp.jetcache.anno.Cached;
|
import com.alicp.jetcache.anno.Cached;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@@ -32,11 +31,10 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
import top.continew.admin.common.constant.CacheConstants;
|
import top.continew.admin.common.constant.CacheConstants;
|
||||||
import top.continew.admin.system.enums.OptionCategoryEnum;
|
import top.continew.admin.system.enums.OptionCategoryEnum;
|
||||||
import top.continew.admin.system.model.query.*;
|
import top.continew.admin.system.model.query.OptionQuery;
|
||||||
import top.continew.admin.system.model.resp.file.FileUploadResp;
|
import top.continew.admin.system.model.resp.file.FileUploadResp;
|
||||||
import top.continew.admin.system.service.*;
|
import top.continew.admin.system.service.*;
|
||||||
import top.continew.starter.core.util.validation.ValidationUtils;
|
import top.continew.starter.core.util.validation.ValidationUtils;
|
||||||
import top.continew.starter.extension.crud.model.query.SortQuery;
|
|
||||||
import top.continew.starter.extension.crud.model.resp.LabelValueResp;
|
import top.continew.starter.extension.crud.model.resp.LabelValueResp;
|
||||||
import top.continew.starter.extension.tenant.annotation.TenantIgnore;
|
import top.continew.starter.extension.tenant.annotation.TenantIgnore;
|
||||||
import top.continew.starter.extension.tenant.context.TenantContextHolder;
|
import top.continew.starter.extension.tenant.context.TenantContextHolder;
|
||||||
@@ -60,10 +58,6 @@ import java.util.List;
|
|||||||
public class CommonController {
|
public class CommonController {
|
||||||
|
|
||||||
private final FileService fileService;
|
private final FileService fileService;
|
||||||
private final DeptService deptService;
|
|
||||||
private final MenuService menuService;
|
|
||||||
private final UserService userService;
|
|
||||||
private final RoleService roleService;
|
|
||||||
private final DictItemService dictItemService;
|
private final DictItemService dictItemService;
|
||||||
private final OptionService optionService;
|
private final OptionService optionService;
|
||||||
|
|
||||||
@@ -82,30 +76,6 @@ public class CommonController {
|
|||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(summary = "查询部门树", description = "查询树结构的部门列表")
|
|
||||||
@GetMapping("/tree/dept")
|
|
||||||
public List<Tree<Long>> listDeptTree(DeptQuery query, SortQuery sortQuery) {
|
|
||||||
return deptService.tree(query, sortQuery, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "查询菜单树", description = "查询树结构的菜单列表")
|
|
||||||
@GetMapping("/tree/menu")
|
|
||||||
public List<Tree<Long>> listMenuTree(MenuQuery query, SortQuery sortQuery) {
|
|
||||||
return menuService.tree(query, sortQuery, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "查询用户字典", description = "查询用户字典列表")
|
|
||||||
@GetMapping("/dict/user")
|
|
||||||
public List<LabelValueResp> listUserDict(UserQuery query, SortQuery sortQuery) {
|
|
||||||
return userService.listDict(query, sortQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "查询角色字典", description = "查询角色字典列表")
|
|
||||||
@GetMapping("/dict/role")
|
|
||||||
public List<LabelValueResp> listRoleDict(RoleQuery query, SortQuery sortQuery) {
|
|
||||||
return roleService.listDict(query, sortQuery);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Operation(summary = "查询字典", description = "查询字典列表")
|
@Operation(summary = "查询字典", description = "查询字典列表")
|
||||||
@Parameter(name = "code", description = "字典编码", example = "notice_type", in = ParameterIn.PATH)
|
@Parameter(name = "code", description = "字典编码", example = "notice_type", in = ParameterIn.PATH)
|
||||||
@GetMapping("/dict/{code}")
|
@GetMapping("/dict/{code}")
|
||||||
|
@@ -35,6 +35,6 @@ import top.continew.starter.extension.crud.enums.Api;
|
|||||||
@Tag(name = "部门管理 API")
|
@Tag(name = "部门管理 API")
|
||||||
@RestController
|
@RestController
|
||||||
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE,
|
@CrudRequestMapping(value = "/system/dept", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE,
|
||||||
Api.EXPORT})
|
Api.EXPORT, Api.DICT_TREE})
|
||||||
public class DeptController extends BaseController<DeptService, DeptResp, DeptResp, DeptQuery, DeptReq> {
|
public class DeptController extends BaseController<DeptService, DeptResp, DeptResp, DeptQuery, DeptReq> {
|
||||||
}
|
}
|
||||||
|
@@ -55,7 +55,7 @@ import java.util.List;
|
|||||||
@Tag(name = "菜单管理 API")
|
@Tag(name = "菜单管理 API")
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@CrudRequestMapping(value = "/system/menu", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE})
|
@CrudRequestMapping(value = "/system/menu", api = {Api.TREE, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE, Api.DICT_TREE})
|
||||||
public class MenuController extends BaseController<MenuService, MenuResp, MenuResp, MenuQuery, MenuReq> {
|
public class MenuController extends BaseController<MenuService, MenuResp, MenuResp, MenuQuery, MenuReq> {
|
||||||
|
|
||||||
private final MenuService menuService;
|
private final MenuService menuService;
|
||||||
|
@@ -53,7 +53,7 @@ import java.util.List;
|
|||||||
@Validated
|
@Validated
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@CrudRequestMapping(value = "/system/role", api = {Api.LIST, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE})
|
@CrudRequestMapping(value = "/system/role", api = {Api.LIST, Api.GET, Api.CREATE, Api.UPDATE, Api.BATCH_DELETE, Api.DICT})
|
||||||
public class RoleController extends BaseController<RoleService, RoleResp, RoleDetailResp, RoleQuery, RoleReq> {
|
public class RoleController extends BaseController<RoleService, RoleResp, RoleDetailResp, RoleQuery, RoleReq> {
|
||||||
|
|
||||||
private final UserRoleService userRoleService;
|
private final UserRoleService userRoleService;
|
||||||
|
@@ -59,7 +59,7 @@ import java.io.IOException;
|
|||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@CrudRequestMapping(value = "/system/user", api = {Api.PAGE, Api.LIST, Api.GET, Api.CREATE, Api.UPDATE,
|
@CrudRequestMapping(value = "/system/user", api = {Api.PAGE, Api.LIST, Api.GET, Api.CREATE, Api.UPDATE,
|
||||||
Api.BATCH_DELETE, Api.EXPORT})
|
Api.BATCH_DELETE, Api.EXPORT, Api.DICT})
|
||||||
public class UserController extends BaseController<UserService, UserResp, UserDetailResp, UserQuery, UserReq> {
|
public class UserController extends BaseController<UserService, UserResp, UserDetailResp, UserQuery, UserReq> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -134,9 +134,9 @@ public class RoleServiceImpl extends BaseServiceImpl<RoleMapper, RoleDO, RoleRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<LabelValueResp> listDict(RoleQuery query, SortQuery sortQuery) {
|
public List<LabelValueResp> dict(RoleQuery query, SortQuery sortQuery) {
|
||||||
query.setExcludeRoleCodes(RoleCodeEnum.getSuperRoleCodes());
|
query.setExcludeRoleCodes(RoleCodeEnum.getSuperRoleCodes());
|
||||||
return super.listDict(query, sortQuery);
|
return super.dict(query, sortQuery);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
2
pom.xml
2
pom.xml
@@ -13,7 +13,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>top.continew.starter</groupId>
|
<groupId>top.continew.starter</groupId>
|
||||||
<artifactId>continew-starter</artifactId>
|
<artifactId>continew-starter</artifactId>
|
||||||
<version>2.13.3</version>
|
<version>2.13.4</version>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
<groupId>top.continew.admin</groupId>
|
<groupId>top.continew.admin</groupId>
|
||||||
|
Reference in New Issue
Block a user