ETest-Vue-FastAPI/fix_menu.py

120 lines
4.6 KiB
Python
Raw Permalink Normal View History

2026-03-30 10:38:36 +08:00
#!/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_menus():
engine = create_async_engine(DATABASE_URL, echo=False)
async with engine.connect() as conn:
print("=" * 80)
print("Adding Missing Menus")
print("=" * 80)
# 1. 添加工单领取菜单
print("\n[1] Adding Work Order Claim Menu...")
# 检查是否已存在
result = await conn.execute(text("""
SELECT COUNT(*) FROM sys_menu WHERE path = 'workorder/claim'
"""))
count = result.scalar()
if count == 0:
# 添加工单管理目录
await conn.execute(text("""
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component,
is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES ('工单管理', 0, 7, 'workorder', NULL, 0, 0, 'M', '0', '0', NULL, 'form', 'admin', NOW())
"""))
await conn.commit()
# 获取刚插入的目录ID
result = await conn.execute(text("""
SELECT menu_id FROM sys_menu WHERE path = 'workorder' AND menu_type = 'M'
"""))
parent_id = result.scalar()
# 添加工单领取菜单
await conn.execute(text(f"""
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component,
is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES ('工单领取', {parent_id}, 1, 'workorder/claim', 'workorder/claim/index',
0, 0, 'C', '0', '0', 'workorder:claim:list', 'el-icon-s-claim', 'admin', NOW())
"""))
await conn.commit()
# 添加工单领取按钮权限
result = await conn.execute(text("""
SELECT menu_id FROM sys_menu WHERE path = 'workorder/claim'
"""))
claim_menu_id = result.scalar()
buttons = [
('工单领取查询', 'workorder:claim:query'),
('工单领取', 'workorder:claim:claim'),
('批量领取', 'workorder:claim:batch'),
]
for btn_name, btn_perm in buttons:
await conn.execute(text(f"""
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component,
is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time)
VALUES ('{btn_name}', {claim_menu_id}, 1, '#', NULL,
0, 0, 'F', '0', '0', '{btn_perm}', NULL, 'admin', NOW())
"""))
await conn.commit()
print(f" [OK] Work Order Claim Menu added (Parent ID: {parent_id}, Menu ID: {claim_menu_id})")
else:
print(" [INFO] Work Order Claim Menu already exists")
# 2. 检查测试类别配置菜单
print("\n[2] Checking Test Category Menu...")
result = await conn.execute(text("""
SELECT menu_id, menu_name, parent_id, path, component
FROM sys_menu WHERE path = 'test_category'
"""))
row = result.fetchone()
if row:
print(f" [INFO] Test Category Menu exists: ID={row[0]}, Name={row[1]}, Parent={row[2]}")
print(f" Path={row[3]}, Component={row[4]}")
else:
print(" [WARN] Test Category Menu not found!")
# 3. 检查测试配置管理目录
print("\n[3] Checking Test Config Directory...")
result = await conn.execute(text("""
SELECT menu_id, menu_name FROM sys_menu WHERE path = 'testconfig' AND menu_type = 'M'
"""))
row = result.fetchone()
if row:
print(f" [INFO] Test Config Directory exists: ID={row[0]}, Name={row[1]}")
else:
print(" [WARN] Test Config Directory not found!")
print("\n" + "=" * 80)
print("Menu Fix Complete")
print("=" * 80)
print("\n请刷新页面查看新菜单")
await engine.dispose()
if __name__ == '__main__':
asyncio.run(fix_menus())