From 4dbae9035ed15c108f8d9b9fb1f5016b9197d281 Mon Sep 17 00:00:00 2001 From: lin222 Date: Sat, 12 Oct 2024 14:09:35 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20filter=20condition=20?= =?UTF-8?q?for=20empty=20folders=20in=20the=20interface=20documentation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- front/src/utils/i18n/languages/en-us.js | 5 +++ front/src/utils/i18n/languages/zh-cn.js | 5 +++ front/src/views/project/DocTable/index.vue | 33 ++++++++++--------- .../web/controller/doc/DocController.java | 21 ++++++++++-- .../web/controller/doc/param/DocListForm.java | 5 +++ 5 files changed, 52 insertions(+), 17 deletions(-) diff --git a/front/src/utils/i18n/languages/en-us.js b/front/src/utils/i18n/languages/en-us.js index 5a260788..309c1674 100644 --- a/front/src/utils/i18n/languages/en-us.js +++ b/front/src/utils/i18n/languages/en-us.js @@ -6,6 +6,7 @@ export default { 'responseArrayType': 'Response array type', 'isRequestArray': 'Is request array', 'isResponseArray': 'Is response array', + 'all': 'All', 'todo': 'Todo', 'doing': 'Doing', 'done': 'Done', @@ -558,5 +559,9 @@ export default { }, DocChangelog: { confirmRestore: 'Restore this version?' + }, + DocFilter: { + 'all': 'All', + 'filter': 'Filter Empty Folders' } } diff --git a/front/src/utils/i18n/languages/zh-cn.js b/front/src/utils/i18n/languages/zh-cn.js index d600c75a..cd15ef29 100644 --- a/front/src/utils/i18n/languages/zh-cn.js +++ b/front/src/utils/i18n/languages/zh-cn.js @@ -6,6 +6,7 @@ export default { 'responseArrayType': '返回数组元素类型', 'isRequestArray': '是否请求数组', 'isResponseArray': '是否返回数组', + 'all': '全部', 'todo': '待进行', 'doing': '进行中', 'done': '已完成', @@ -561,5 +562,9 @@ export default { }, DocChangelog: { confirmRestore: '确认还原到此版本吗?' + }, + DocFilter: { + 'all': '全部', + 'filter': '过滤空文件夹' } } diff --git a/front/src/views/project/DocTable/index.vue b/front/src/views/project/DocTable/index.vue index 249fefab..fdabc7d8 100644 --- a/front/src/views/project/DocTable/index.vue +++ b/front/src/views/project/DocTable/index.vue @@ -3,7 +3,7 @@
- {{ $t('createDoc') }} + {{ $t('createDoc') }} {{ $t('createDoc') }} @@ -11,11 +11,15 @@
+ + {{ $t('DocFilter.all') }} + {{ $t('DocFilter.filter') }} + - 全部 - 未完成 - 进行中 - 已完成 + {{ $t('all') }} + {{ $t('todo') }} + {{ $t('doing') }} + {{ $t('done') }} {{ $t('expand') }} @@ -48,7 +52,7 @@ trigger="hover" width="800" > - + @@ -62,7 +66,7 @@ :data="tableRows" row-id="id" use-virtual - :treeConfig="{ + :tree-config="{ children: 'children', iconClose: 'el-icon-arrow-right', iconOpen: 'el-icon-arrow-down', @@ -89,7 +93,7 @@
- +
@@ -206,7 +210,7 @@ - + - + /> - + - + />
@@ -331,7 +333,8 @@ export default { ] }, searchForm: { - status: null + status: null, + filterEmptyFolder: null }, token: '' } diff --git a/server/server-web/src/main/java/cn/torna/web/controller/doc/DocController.java b/server/server-web/src/main/java/cn/torna/web/controller/doc/DocController.java index 0da80d82..18496c10 100644 --- a/server/server-web/src/main/java/cn/torna/web/controller/doc/DocController.java +++ b/server/server-web/src/main/java/cn/torna/web/controller/doc/DocController.java @@ -57,6 +57,8 @@ import java.util.stream.Collectors; @RequestMapping("doc") public class DocController { + private static final byte IS_FOLDER = 1; + @Autowired private DocInfoService docInfoService; @@ -89,8 +91,23 @@ public class DocController { public Result> listProjectDoc2(@Valid @RequestBody DocListForm docListForm) { DocListFormDTO docListFormDTO = CopyUtil.copyBean(docListForm, DocListFormDTO::new); List docInfos = docInfoService.listModuleTableDoc(docListFormDTO); - List docInfoVOS = CopyUtil.copyList(docInfos, DocInfoVO::new); - return Result.ok(docInfoVOS); + // if filterEmptyFolder = 1, then filter empty folder + if (Objects.equals(IS_FOLDER, docListForm.getFilterEmptyFolder())) { + docInfos = this.filterEmptyFolder(docInfos); + } + List list = CopyUtil.copyList(docInfos, DocInfoVO::new); + return Result.ok(list); + } + + private List filterEmptyFolder(List list) { + Map folderChildrenCountMap = list.stream() + .collect(Collectors.groupingBy(DocInfo::getParentId, Collectors.summingInt(docInfo -> 1))); + + return list.stream() + // 过滤空文件夹:文件夹必须有子元素,或非文件夹显示 + .filter(docInfo -> !Objects.equals(docInfo.getIsFolder(), IS_FOLDER) + || folderChildrenCountMap.getOrDefault(docInfo.getId(), 0) > 0) + .collect(Collectors.toList()); } /** diff --git a/server/server-web/src/main/java/cn/torna/web/controller/doc/param/DocListForm.java b/server/server-web/src/main/java/cn/torna/web/controller/doc/param/DocListForm.java index 5ed3a206..41ac2f1b 100644 --- a/server/server-web/src/main/java/cn/torna/web/controller/doc/param/DocListForm.java +++ b/server/server-web/src/main/java/cn/torna/web/controller/doc/param/DocListForm.java @@ -21,4 +21,9 @@ public class DocListForm { @Condition private Byte status; + /** + * 是否过滤空文件夹 + */ + private Byte filterEmptyFolder; + } -- Gitee