Skip to content

Commit fe3a3b4

Browse files
authored
Optimize the data sort logic of tree nodes (#758)
1 parent 65ec721 commit fe3a3b4

File tree

1 file changed

+18
-6
lines changed

1 file changed

+18
-6
lines changed

backend/utils/build_tree.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,18 @@
66
from backend.utils.serializers import RowData, select_list_serialize
77

88

9-
def get_tree_nodes(row: Sequence[RowData]) -> list[dict[str, Any]]:
9+
def get_tree_nodes(row: Sequence[RowData], is_sort: bool, sort_key: str) -> list[dict[str, Any]]:
1010
"""
1111
获取所有树形结构节点
1212
1313
:param row: 原始数据行序列
14+
:param is_sort: 是否启用结果排序
15+
:param sort_key: 基于此键对结果进行进行排序
1416
:return:
1517
"""
1618
tree_nodes = select_list_serialize(row)
17-
tree_nodes.sort(key=lambda x: x['sort'])
19+
if is_sort:
20+
tree_nodes.sort(key=lambda x: x[sort_key])
1821
return tree_nodes
1922

2023

@@ -65,17 +68,24 @@ def recursive_to_tree(nodes: list[dict[str, Any]], *, parent_id: int | None = No
6568

6669

6770
def get_tree_data(
68-
row: Sequence[RowData], build_type: BuildTreeType = BuildTreeType.traversal, *, parent_id: int | None = None
71+
row: Sequence[RowData],
72+
build_type: BuildTreeType = BuildTreeType.traversal,
73+
*,
74+
parent_id: int | None = None,
75+
is_sort: bool = True,
76+
sort_key: str = 'sort',
6977
) -> list[dict[str, Any]]:
7078
"""
7179
获取树形结构数据
7280
7381
:param row: 原始数据行序列
7482
:param build_type: 构建树形结构的算法类型,默认为遍历算法
7583
:param parent_id: 父节点 ID,仅在递归算法中使用
84+
:param is_sort: 是否启用结果排序
85+
:param sort_key: 基于此键对结果进行进行排序
7686
:return:
7787
"""
78-
nodes = get_tree_nodes(row)
88+
nodes = get_tree_nodes(row, is_sort, sort_key)
7989
match build_type:
8090
case BuildTreeType.traversal:
8191
tree = traversal_to_tree(nodes)
@@ -86,11 +96,13 @@ def get_tree_data(
8696
return tree
8797

8898

89-
def get_vben5_tree_data(row: Sequence[RowData]) -> list[dict[str, Any]]:
99+
def get_vben5_tree_data(row: Sequence[RowData], is_sort: bool = True, sort_key: str = 'sort') -> list[dict[str, Any]]:
90100
"""
91101
获取 vben5 菜单树形结构数据
92102
93103
:param row: 原始数据行序列
104+
:param is_sort: 是否启用结果排序
105+
:param sort_key: 基于此键对结果进行进行排序
94106
:return:
95107
"""
96108
meta_keys = {'title', 'icon', 'link', 'cache', 'display', 'status'}
@@ -108,7 +120,7 @@ def get_vben5_tree_data(row: Sequence[RowData]) -> list[dict[str, Any]]:
108120
'menuVisibleWithForbidden': not bool(node['status']),
109121
},
110122
}
111-
for node in get_tree_nodes(row)
123+
for node in get_tree_nodes(row, is_sort, sort_key)
112124
]
113125

114126
return traversal_to_tree(vben5_nodes)

0 commit comments

Comments
 (0)