一个菜单表,里面有menu_id和parent_id,现在通过sql查出菜单表所有数据,如何通过后端拦截器把他变成树形结构,然后传到前端变成树形表格
时间: 2023-05-15 11:08:03 浏览: 99
可以通过递归的方式将菜单表的数据转换成树形结构,具体实现可以参考以下步骤:
1. 从数据库中查询出所有菜单数据,存储到一个列表中。
2. 定义一个字典,用于存储每个菜单的子菜单列表。
3. 遍历菜单列表,将每个菜单的子菜单添加到字典中对应的列表中。
4. 遍历菜单列表,对于每个菜单,如果它没有父菜单,则将它作为根节点,递归地将其子菜单添加到根节点下。
5. 将根节点列表返回给前端,前端可以使用树形表格插件将其展示成树形结构。
以下是一个示例代码:
```python
def build_menu_tree(menu_list):
# 定义一个字典,用于存储每个菜单的子菜单列表
menu_dict = {}
for menu in menu_list:
parent_id = menu['parent_id']
if parent_id not in menu_dict:
menu_dict[parent_id] = []
menu_dict[parent_id].append(menu)
# 递归构建树形结构
def build_tree(parent_id):
tree = []
if parent_id in menu_dict:
for menu in menu_dict[parent_id]:
menu['children'] = build_tree(menu['menu_id'])
tree.append(menu)
return tree
# 构建所有根节点
root_nodes = []
for menu in menu_list:
if menu['parent_id'] is None:
menu['children'] = build_tree(menu['menu_id'])
root_nodes.append(menu)
return root_nodes
```
在后端拦截器中调用该函数,将菜单列表转换成树形结构后,将其作为响应数据返回给前端即可。