diff --git a/front/src/utils/i18n/languages/en-us.js b/front/src/utils/i18n/languages/en-us.js index 5a260788fac5428a6d7965d33c3bee6f48939dc8..309c1674ce5847b609138df02d57e20f22dcfb62 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 d600c75adafca9b1237aaa6330f473f434e0c9f2..cd15ef29ce0b1da686af85de51b295de9ba4b56c 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 249fefabe678180cf3c3151e06096f54acae7502..fdabc7d88d042b6ce8aaaa4de076118dbcf41944 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 0da80d8208163c75c77b8b58a993818fd003f397..18496c10ceaaebb6eba147ae33285a0dbd8913ba 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 5ed3a206fbe44f7f2d9dae99153e8cdc4fd5921f..41ac2f1b455cf5ca60ce1490206f682a355dddef 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; + }