#!/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()