diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/resource/LayuiApiResourceTreeNode.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/resource/LayuiApiResourceTreeNode.java
new file mode 100644
index 000000000..2505a2be2
--- /dev/null
+++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/resource/LayuiApiResourceTreeNode.java
@@ -0,0 +1,65 @@
+package cn.stylefeng.roses.kernel.system.pojo.resource;
+
+import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 用于渲染api资源树(layui插件)
+ *
+ * @author fengshuonan
+ * @date 2021/1/14 21:51
+ */
+@Data
+public class LayuiApiResourceTreeNode implements AbstractTreeNode {
+
+ /**
+ * 资源的上级编码
+ */
+ private String parentId;
+
+ /**
+ * 节点名称
+ */
+ private String title;
+
+ /**
+ * 资源的编码
+ */
+ private String id;
+
+ /**
+ * 是否展开状态 不展开-false 展开-true
+ */
+ private Boolean spread = false;
+
+ /**
+ * 是否是资源标识
+ *
+ * true-是资源标识
+ * false-虚拟节点,不是一个具体资源
+ */
+ private Boolean resourceFlag;
+
+ /**
+ * 子节点的集合
+ */
+ private List children;
+
+ @Override
+ public String getNodeId() {
+ return this.id;
+ }
+
+ @Override
+ public String getNodeParentId() {
+ return this.parentId;
+ }
+
+ @Override
+ public void setChildrenNodes(List childrenNodes) {
+ this.children = childrenNodes;
+ }
+
+}
diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ApiController.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ApiController.java
new file mode 100644
index 000000000..c854e4d7e
--- /dev/null
+++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ApiController.java
@@ -0,0 +1,55 @@
+package cn.stylefeng.roses.kernel.resource.modular.controller;
+
+import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
+import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
+import cn.stylefeng.roses.kernel.resource.api.pojo.resource.ResourceDefinition;
+import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService;
+import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
+import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
+import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
+import cn.stylefeng.roses.kernel.system.pojo.resource.LayuiApiResourceTreeNode;
+import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 资源管理控制器
+ *
+ * @author fengshuonan
+ * @date 2020/11/24 19:47
+ */
+@RestController
+@ApiResource(name = "API接口管理")
+public class ApiController {
+
+ @Resource
+ private SysResourceService sysResourceService;
+
+ /**
+ * 获取资源树列表,用于接口文档页面
+ *
+ * @author fengshuonan
+ * @date 2020/12/18 15:50
+ */
+ @GetResource(name = "获取接口树列表(用于接口文档页面)", path = "/resource/getTree", requiredLogin = false)
+ public ResponseData getTree() {
+ List resourceTree = sysResourceService.getResourceTree();
+ return new SuccessResponseData(resourceTree);
+ }
+
+ /**
+ * 获取接口详情
+ *
+ * @author fengshuonan
+ * @date 2020/12/18 15:50
+ */
+ @GetResource(name = "获取API详情(用于接口文档页面)", path = "/resource/getDetail", requiredLogin = false)
+ public ResponseData getResourceDetail(@Validated(BaseRequest.detail.class) ResourceRequest resourceRequest) {
+ ResourceDefinition resourceDetail = sysResourceService.getResourceDetail(resourceRequest);
+ return new SuccessResponseData(resourceDetail);
+ }
+
+}
diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java
index bd9fa8c34..48fe46ea0 100644
--- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java
+++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java
@@ -3,16 +3,13 @@ package cn.stylefeng.roses.kernel.resource.modular.controller;
import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
-import cn.stylefeng.roses.kernel.resource.api.pojo.resource.ResourceDefinition;
import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource;
import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode;
import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService;
-import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest;
import cn.stylefeng.roses.kernel.system.pojo.role.request.SysRoleRequest;
-import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@@ -55,18 +52,6 @@ public class ResourceController {
return new SuccessResponseData(menuResourceList);
}
- /**
- * 获取资源树列表,用于接口文档页面
- *
- * @author fengshuonan
- * @date 2020/12/18 15:50
- */
- @GetResource(name = "获取资源树列表,用于接口文档页面", path = "/resource/getTree", requiredLogin = false, requiredPermission = false)
- public ResponseData getTree() {
- List resourceTree = sysResourceService.getResourceTree();
- return new SuccessResponseData(resourceTree);
- }
-
/**
* 获取资源平级树列表,用于分配接口权限(适用于layui版本)
*
@@ -90,16 +75,4 @@ public class ResourceController {
return new SuccessResponseData(resourceLateralTree);
}
- /**
- * 获取接口详情
- *
- * @author fengshuonan
- * @date 2020/12/18 15:50
- */
- @GetResource(name = "获取接口详情", path = "/resource/getDetail", requiredLogin = false, requiredPermission = false)
- public ResponseData getResourceDetail(@Validated(BaseRequest.detail.class) ResourceRequest resourceRequest) {
- ResourceDefinition resourceDetail = sysResourceService.getResourceDetail(resourceRequest);
- return new SuccessResponseData(resourceDetail);
- }
-
}
diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java
index 5a52523cd..c3d6f72ff 100644
--- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java
+++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java
@@ -4,6 +4,7 @@ import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult;
import cn.stylefeng.roses.kernel.resource.api.pojo.resource.ResourceDefinition;
import cn.stylefeng.roses.kernel.resource.modular.entity.SysResource;
import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode;
+import cn.stylefeng.roses.kernel.system.pojo.resource.LayuiApiResourceTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -55,7 +56,7 @@ public interface SysResourceService extends IService {
* @author fengshuonan
* @date 2020/12/18 15:06
*/
- List getResourceTree();
+ List getResourceTree();
/**
* 获取资源的详情
diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java
index e9f830a0e..ae30ca388 100644
--- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java
+++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java
@@ -24,6 +24,7 @@ import cn.stylefeng.roses.kernel.rule.factory.DefaultTreeBuildFactory;
import cn.stylefeng.roses.kernel.system.ResourceServiceApi;
import cn.stylefeng.roses.kernel.system.RoleServiceApi;
import cn.stylefeng.roses.kernel.system.UserServiceApi;
+import cn.stylefeng.roses.kernel.system.pojo.resource.LayuiApiResourceTreeNode;
import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest;
import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResourceResponse;
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserResponse;
@@ -96,7 +97,7 @@ public class SysResourceServiceImpl extends ServiceImpl getResourceTree() {
+ public List getResourceTree() {
// 1. 获取所有的资源
LambdaQueryWrapper sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>();
@@ -104,7 +105,7 @@ public class SysResourceServiceImpl extends ServiceImpl allResource = this.list(sysResourceLambdaQueryWrapper);
// 2. 按应用和模块编码设置map
- Map>> appModularResources = divideResources(allResource);
+ Map>> appModularResources = divideResources(allResource);
// 3. 创建模块code和模块name的映射
Map modularCodeName = createModularCodeName(allResource);
@@ -335,13 +336,13 @@ public class SysResourceServiceImpl extends ServiceImpl>> divideResources(List sysResources) {
- HashMap>> appModularResources = new HashMap<>();
+ private Map>> divideResources(List sysResources) {
+ HashMap>> appModularResources = new HashMap<>();
for (SysResource sysResource : sysResources) {
// 查询应用下有无资源
String appCode = sysResource.getAppCode();
- Map> modularResource = appModularResources.get(appCode);
+ Map> modularResource = appModularResources.get(appCode);
// 该应用下没资源就创建一个map
if (modularResource == null) {
@@ -349,17 +350,18 @@ public class SysResourceServiceImpl extends ServiceImpl resourceTreeNodes = modularResource.get(sysResource.getModularCode());
+ List resourceTreeNodes = modularResource.get(sysResource.getModularCode());
if (resourceTreeNodes == null) {
resourceTreeNodes = new ArrayList<>();
}
// 将当前资源放入资源集合
- ResourceTreeNode resourceTreeNode = new ResourceTreeNode();
+ LayuiApiResourceTreeNode resourceTreeNode = new LayuiApiResourceTreeNode();
resourceTreeNode.setResourceFlag(true);
- resourceTreeNode.setNodeName(sysResource.getUrl() + "(" + sysResource.getResourceName() + ")");
- resourceTreeNode.setCode(sysResource.getResourceCode());
- resourceTreeNode.setParentCode(sysResource.getModularCode());
+ resourceTreeNode.setTitle(sysResource.getResourceName());
+ resourceTreeNode.setId(sysResource.getResourceCode());
+ resourceTreeNode.setParentId(sysResource.getModularCode());
+ resourceTreeNode.setSpread(false);
resourceTreeNodes.add(resourceTreeNode);
modularResource.put(sysResource.getModularCode(), resourceTreeNodes);
@@ -388,31 +390,33 @@ public class SysResourceServiceImpl extends ServiceImpl createResourceTree(Map>> appModularResources, Map modularCodeName) {
+ private List createResourceTree(Map>> appModularResources, Map modularCodeName) {
- List finalTree = new ArrayList<>();
+ List finalTree = new ArrayList<>();
// 按应用遍历应用模块资源集合
for (String appName : appModularResources.keySet()) {
// 创建当前应用节点
- ResourceTreeNode appNode = new ResourceTreeNode();
- appNode.setCode(appName);
- appNode.setNodeName(appName);
+ LayuiApiResourceTreeNode appNode = new LayuiApiResourceTreeNode();
+ appNode.setId(appName);
+ appNode.setTitle(appName);
+ appNode.setSpread(true);
appNode.setResourceFlag(false);
- appNode.setParentCode(TreeConstants.DEFAULT_PARENT_ID.toString());
+ appNode.setParentId(TreeConstants.DEFAULT_PARENT_ID.toString());
// 遍历当前应用下的模块资源
- Map> modularResources = appModularResources.get(appName);
+ Map> modularResources = appModularResources.get(appName);
// 创建模块节点
- ArrayList modularNodes = new ArrayList<>();
+ ArrayList modularNodes = new ArrayList<>();
for (String modularCode : modularResources.keySet()) {
- ResourceTreeNode modularNode = new ResourceTreeNode();
- modularNode.setCode(modularCode);
- modularNode.setNodeName(modularCodeName.get(modularCode));
+ LayuiApiResourceTreeNode modularNode = new LayuiApiResourceTreeNode();
+ modularNode.setId(modularCode);
+ modularNode.setTitle(modularCodeName.get(modularCode));
+ modularNode.setParentId(appName);
+ modularNode.setSpread(false);
modularNode.setResourceFlag(false);
- modularNode.setParentCode(appName);
modularNode.setChildren(modularResources.get(modularCode));
modularNodes.add(modularNode);
}