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 @@
+
loadTable()">
+ {{ $t('DocFilter.all') }}
+ {{ $t('DocFilter.filter') }}
+
loadTable()">
- 全部
- 未完成
- 进行中
- 已完成
+ {{ $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;
+
}