#!/usr/bin/env python3 """修复菜单结构""" import asyncio from sqlalchemy.ext.asyncio import create_async_engine from sqlalchemy import text DB_CONFIG = { 'host': '123.57.81.127', 'port': 3306, 'user': 'cpy_admin', 'password': 'Tgzz2025+', 'database': 'ruoyi-fastapi' } DATABASE_URL = ( f"mysql+asyncmy://{DB_CONFIG['user']}:{DB_CONFIG['password']}@" f"{DB_CONFIG['host']}:{DB_CONFIG['port']}/{DB_CONFIG['database']}" ) async def fix_menu_structure(): engine = create_async_engine(DATABASE_URL, echo=False) async with engine.connect() as conn: print("=" * 80) print("Fixing Menu Structure") print("=" * 80) # 1. 将测试类别菜单移到测试配置管理下 print("\n[1] Moving Test Category to Test Config Directory...") # 获取测试配置管理目录ID result = await conn.execute(text(""" SELECT menu_id FROM sys_menu WHERE path = 'testconfig' AND menu_type = 'M' """)) test_config_id = result.scalar() if test_config_id: # 更新测试类别的父级 await conn.execute(text(f""" UPDATE sys_menu SET parent_id = {test_config_id}, order_num = 1 WHERE path = 'test_category' AND menu_type = 'C' """)) await conn.commit() print(f" [OK] Test Category moved under Test Config (ID: {test_config_id})") else: print(" [WARN] Test Config Directory not found") # 2. 确保工单领取菜单在工单管理目录下 print("\n[2] Checking Work Order Claim Menu Position...") # 获取工单管理目录ID result = await conn.execute(text(""" SELECT menu_id FROM sys_menu WHERE path = 'workorder' AND menu_type = 'M' """)) workorder_dir_id = result.scalar() if workorder_dir_id: # 更新工单领取的父级 await conn.execute(text(f""" UPDATE sys_menu SET parent_id = {workorder_dir_id}, order_num = 1 WHERE path = 'workorder/claim' AND menu_type = 'C' """)) await conn.commit() print(f" [OK] Work Order Claim is under Work Order Management (ID: {workorder_dir_id})") else: print(" [WARN] Work Order Management Directory not found") # 3. 检查并修复菜单顺序 print("\n[3] Fixing Menu Order...") # 测试配置管理下的菜单排序 if test_config_id: await conn.execute(text(f""" SET @order_num = 0; UPDATE sys_menu SET order_num = (@order_num := @order_num + 1) WHERE parent_id = {test_config_id} AND menu_type = 'C' ORDER BY menu_id; """)) await conn.commit() print(" [OK] Test Config sub-menu order fixed") # 4. 验证修复结果 print("\n[4] Verification:") # 检查测试配置管理的子菜单 if test_config_id: result = await conn.execute(text(f""" SELECT menu_id, menu_name, path, order_num FROM sys_menu WHERE parent_id = {test_config_id} AND menu_type = 'C' ORDER BY order_num """)) rows = result.fetchall() print(f"\n Test Config Directory (ID: {test_config_id}) Children:") for row in rows: print(f" - {row[1]} (ID:{row[0]}, Path:{row[2]}, Order:{row[3]})") # 检查工单管理的子菜单 if workorder_dir_id: result = await conn.execute(text(f""" SELECT menu_id, menu_name, path, order_num FROM sys_menu WHERE parent_id = {workorder_dir_id} AND menu_type = 'C' ORDER BY order_num """)) rows = result.fetchall() print(f"\n Work Order Management (ID: {workorder_dir_id}) Children:") for row in rows: print(f" - {row[1]} (ID:{row[0]}, Path:{row[2]}, Order:{row[3]})") print("\n" + "=" * 80) print("Menu Structure Fix Complete") print("=" * 80) print("\nPlease refresh the page to see the changes") await engine.dispose() if __name__ == '__main__': asyncio.run(fix_menu_structure())