66from 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
6770def 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