zhibo/archive/Zhibo/zhibo-1201/generate_menu_structure.py

125 lines
3.4 KiB
Python
Raw Normal View History

2025-12-21 16:08:52 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import pymysql
# 数据库连接配置
db_config = {
'host': '1.15.149.240',
'user': 'zhibo',
'password': 'zCETFpGMwYN3CNeH',
'database': 'zhibo',
'charset': 'utf8mb4'
}
# 连接数据库
conn = pymysql.connect(**db_config)
cursor = conn.cursor(pymysql.cursors.DictCursor)
# 查询所有显示的菜单
sql = """
SELECT id, pid, name, component, menu_type, sort, is_show
FROM eb_system_menu
WHERE is_show = 1
ORDER BY pid, sort, id
"""
cursor.execute(sql)
all_menus = cursor.fetchall()
# 构建菜单树
menu_tree = {}
for menu in all_menus:
if menu['pid'] == 0:
if menu['id'] not in menu_tree:
menu_tree[menu['id']] = {'info': menu, 'children': []}
else:
menu_tree[menu['id']]['info'] = menu
# 添加子菜单
for menu in all_menus:
if menu['pid'] != 0:
parent_id = menu['pid']
if parent_id not in menu_tree:
menu_tree[parent_id] = {'info': None, 'children': []}
menu_tree[parent_id]['children'].append(menu)
# 生成Markdown文档
output = """# 系统完整菜单结构
> 生成时间2024-12-04
> 说明本文档记录了系统中所有一级菜单及其子菜单的完整层级结构
---
## 📋 菜单统计
- **一级菜单总数**: {total_level1}
- **子菜单总数**: {total_children}
- **菜单总数**: {total_all}
---
## 🗂️ 完整菜单结构
"""
# 统计
total_level1 = len([m for m in all_menus if m['pid'] == 0])
total_children = len([m for m in all_menus if m['pid'] != 0])
total_all = len(all_menus)
output = output.format(
total_level1=total_level1,
total_children=total_children,
total_all=total_all
)
# 按sort排序一级菜单
sorted_level1 = sorted(
[(k, v) for k, v in menu_tree.items() if v['info'] is not None],
key=lambda x: (x[1]['info']['sort'], x[1]['info']['id'])
)
# 生成菜单列表
for idx, (menu_id, menu_data) in enumerate(sorted_level1, 1):
menu_info = menu_data['info']
children = menu_data['children']
# 一级菜单标题
output += f"\n### {idx}. {menu_info['name']}\n\n"
output += f"- **菜单ID**: {menu_info['id']}\n"
output += f"- **路由路径**: `{menu_info['component']}`\n"
output += f"- **菜单类型**: {menu_info['menu_type']}\n"
output += f"- **排序**: {menu_info['sort']}\n"
if children:
output += f"- **子菜单数量**: {len(children)}\n\n"
output += "#### 子菜单列表:\n\n"
# 按sort排序子菜单
sorted_children = sorted(children, key=lambda x: (x['sort'], x['id']))
for child_idx, child in enumerate(sorted_children, 1):
output += f"{child_idx}. **{child['name']}**\n"
output += f" - ID: {child['id']}\n"
output += f" - 路径: `{child['component']}`\n"
output += f" - 类型: {child['menu_type']}\n"
output += f" - 排序: {child['sort']}\n\n"
else:
output += f"- **子菜单数量**: 0无子菜单\n\n"
output += "---\n"
# 保存文件
output_file = r'小张\行动\完整菜单结构.md'
with open(output_file, 'w', encoding='utf-8') as f:
f.write(output)
print(f"✅ 菜单结构已生成到文件: {output_file}")
print(f"📊 统计信息:")
print(f" - 一级菜单: {total_level1}")
print(f" - 子菜单: {total_children}")
print(f" - 总计: {total_all}")
# 关闭连接
cursor.close()
conn.close()