From 27b81381bfcac8b95cb3a55db59d1cff942ce1c7 Mon Sep 17 00:00:00 2001 From: wangjiahao <1522128093@qq.com> Date: Mon, 18 Mar 2024 12:13:44 +0800 Subject: [PATCH] =?UTF-8?q?refactor(=E4=BB=AA=E8=A1=A8=E6=9D=BF):=20?= =?UTF-8?q?=E5=8F=AF=E8=A7=86=E5=8C=96=E8=B5=84=E6=BA=90=E6=A0=91=E6=8E=92?= =?UTF-8?q?=E5=BA=8F=E6=94=B9=E4=B8=BA=E5=89=8D=E7=AB=AF=E6=8E=92=E5=BA=8F?= =?UTF-8?q?=20#7741?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataease/commons/utils/CoreTreeUtils.java | 35 ++++++ .../core-frontend/src/models/tree/TreeNode.ts | 1 + core/core-frontend/src/utils/treeSortUtils.ts | 23 ++++ .../src/views/common/DeResourceTree.vue | 114 +++++++++++++++++- 4 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 core/core-backend/src/main/java/io/dataease/commons/utils/CoreTreeUtils.java create mode 100644 core/core-frontend/src/utils/treeSortUtils.ts diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/CoreTreeUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/CoreTreeUtils.java new file mode 100644 index 0000000000..0b964cc9cc --- /dev/null +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/CoreTreeUtils.java @@ -0,0 +1,35 @@ +package io.dataease.commons.utils; + +import io.dataease.constant.SortConstants; +import io.dataease.visualization.dto.VisualizationNodeBO; +import org.apache.commons.lang3.StringUtils; + +import java.text.Collator; +import java.util.*; +import java.util.stream.Collectors; + +/** + * @author : WangJiaHao + * @date : 2024/3/18 10:53 + */ +public class CoreTreeUtils { + + public static List customSortBO(List list, String sortType) { + Collator collator = Collator.getInstance(Locale.CHINA); + if (StringUtils.equalsIgnoreCase(SortConstants.NAME_DESC, sortType)) { + Set poSet = new TreeSet<>(Comparator.comparing(VisualizationNodeBO::getName, collator)); + poSet.addAll(list); + return poSet.stream().collect(Collectors.toList()); + } else if (StringUtils.equalsIgnoreCase(SortConstants.NAME_ASC, sortType)) { + Set poSet = new TreeSet<>(Comparator.comparing(VisualizationNodeBO::getName, collator).reversed()); + poSet.addAll(list); + return poSet.stream().collect(Collectors.toList()); + } else if (StringUtils.equalsIgnoreCase(SortConstants.TIME_ASC, sortType)) { + Collections.reverse(list); + return list; + } else { + // 默认时间倒序 + return list; + } + } +} diff --git a/core/core-frontend/src/models/tree/TreeNode.ts b/core/core-frontend/src/models/tree/TreeNode.ts index 8fcf466f02..d0a829e6a1 100644 --- a/core/core-frontend/src/models/tree/TreeNode.ts +++ b/core/core-frontend/src/models/tree/TreeNode.ts @@ -12,4 +12,5 @@ export interface BusiTreeRequest { busiFlag?: string leaf?: boolean weight?: number + sortType: string } diff --git a/core/core-frontend/src/utils/treeSortUtils.ts b/core/core-frontend/src/utils/treeSortUtils.ts new file mode 100644 index 0000000000..8e605dba8d --- /dev/null +++ b/core/core-frontend/src/utils/treeSortUtils.ts @@ -0,0 +1,23 @@ +import { BusiTreeNode } from '@/models/tree/TreeNode' +import _ from 'lodash' + +export default function treeSort(tree: BusiTreeNode[], sortType: string, historySortType: string) { + const result = _.cloneDeep(tree) + sortPer(result, sortType, historySortType) + _.forEach(result, node => { + if (node.children && node.children.length > 0) { + sortPer(node.children, sortType, historySortType) + } + }) + return result +} + +export const sortPer = (subTree: BusiTreeNode[], sortType: string, historySortType: string) => { + if (sortType === 'name_desc') { + subTree.sort((a, b) => b.name.localeCompare(a.name, 'zh-Hans-CN', { sensitivity: 'accent' })) + } else if (sortType === 'name_asc') { + subTree.sort((a, b) => a.name.localeCompare(b.name, 'zh-Hans-CN', { sensitivity: 'accent' })) + } else if (sortType !== historySortType) { + return subTree.reverse() + } +} diff --git a/core/core-frontend/src/views/common/DeResourceTree.vue b/core/core-frontend/src/views/common/DeResourceTree.vue index bf83e67eab..03b1e86e0a 100644 --- a/core/core-frontend/src/views/common/DeResourceTree.vue +++ b/core/core-frontend/src/views/common/DeResourceTree.vue @@ -16,10 +16,10 @@ const interactiveStore = interactiveStoreWithOut() import router from '@/router' import { useI18n } from '@/hooks/web/useI18n' import _ from 'lodash' -import DeResourceCreateOpt from '@/views/common/DeResourceCreateOpt.vue' import DeResourceCreateOptV2 from '@/views/common/DeResourceCreateOptV2.vue' import { useCache } from '@/hooks/web/useCache' import { findParentIdByChildIdRecursive } from '@/utils/canvasUtils' +import treeSort from '@/utils/treeSortUtils' const { wsCache } = useCache() const dvMainStore = dvMainStoreWithOut() @@ -57,6 +57,7 @@ const resourceGroupOpt = ref() const resourceCreateOpt = ref() const returnMounted = ref(false) const state = reactive({ + curSortType: 'time_desc', resourceTree: [] as BusiTreeNode[], folderMenuList: [ { @@ -76,6 +77,24 @@ const state = reactive({ divided: true } ], + sortType: [ + { + label: '按时间升序', + value: 'time_asc' + }, + { + label: '按时间降序', + value: 'time_desc' + }, + { + label: '按名称升序', + value: 'name_asc' + }, + { + label: '按名称降序', + value: 'time_asc' + } + ], templateCreatePid: 0 }) @@ -364,6 +383,11 @@ const getDefaultExpandedKeys = () => { } } +const sortTypeChange = sortType => { + state.resourceTree = treeSort(state.resourceTree, sortType, state.curSortType) + state.curSortType = sortType +} + watch(filterText, val => { resourceListTree.value.filter(val) }) @@ -438,6 +462,43 @@ defineExpose({ + + + +