124 lines
4.4 KiB
Python
124 lines
4.4 KiB
Python
#!/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())
|