🎨 添加菜单API及优化异常处理

This commit is contained in:
HibiKier 2024-12-24 04:59:43 +08:00
parent e3d5332bbd
commit 12916e79bb
8 changed files with 121 additions and 14 deletions

View File

@ -13,6 +13,7 @@ from zhenxun.utils.enum import PluginType
from .api.logs import router as ws_log_routes
from .api.logs.log_manager import LOG_STORAGE
from .api.menu import router as menu_router
from .api.tabs.dashboard import router as dashboard_router
from .api.tabs.database import router as database_router
from .api.tabs.main import router as main_router
@ -80,6 +81,7 @@ BaseApiRouter.include_router(manage_router)
BaseApiRouter.include_router(database_router)
BaseApiRouter.include_router(plugin_router)
BaseApiRouter.include_router(system_router)
BaseApiRouter.include_router(menu_router)
WsApiRouter = APIRouter(prefix="/zhenxun/socket")

View File

@ -1 +1,2 @@
from .tabs import * # noqa: F403
from .menu import * # noqa: F403f
from .tabs import * # noqa: F403f

View File

@ -0,0 +1,26 @@
from fastapi import APIRouter
from fastapi.responses import JSONResponse
from zhenxun.services.log import logger
from ...base_model import Result
from ...utils import authentication
from .data_source import menu_manage
from .model import MenuItem
router = APIRouter(prefix="/menu")
@router.get(
"/get_menus",
dependencies=[authentication()],
response_model=Result[list[MenuItem]],
response_class=JSONResponse,
deprecated="获取菜单列表", # type: ignore
)
async def _() -> Result[list[MenuItem]]:
try:
return Result.ok(menu_manage.get_menus(), "拿到菜单了哦!")
except Exception as e:
logger.error(f"{router.prefix}/get_menus 调用错误", "WebUi", e=e)
return Result.fail(f"发生了一点错误捏 {type(e)}: {e}")

View File

@ -0,0 +1,64 @@
import ujson as json
from zhenxun.configs.path_config import DATA_PATH
from zhenxun.services.log import logger
from .model import MenuItem
class MenuManage:
def __init__(self) -> None:
self.file = DATA_PATH / "web_ui" / "menu.json"
self.menu = []
if self.file.exists():
try:
self.menu = json.load(self.file.open(encoding="utf8"))
except Exception as e:
logger.warning("菜单文件损坏,已重新生成...", "WebUi", e=e)
if not self.menu:
self.menu = [
MenuItem(
name="仪表盘",
module="dashboard",
router="/dashboard",
icon="dashboard",
default=True,
),
MenuItem(
name="真寻控制台",
module="command",
router="/command",
icon="command",
),
MenuItem(
name="插件列表", module="plugin", router="/plugin", icon="plugin"
),
MenuItem(
name="插件商店", module="store", router="/store", icon="store"
),
MenuItem(
name="好友/群组", module="manage", router="/manage", icon="user"
),
MenuItem(
name="数据库管理",
module="database",
router="/database",
icon="database",
),
MenuItem(
name="系统信息", module="system", router="/system", icon="system"
),
]
self.save()
def get_menus(self):
return self.menu
def save(self):
self.file.parent.mkdir(parents=True, exist_ok=True)
temp = [menu.dict() for menu in self.menu]
with self.file.open("w", encoding="utf8") as f:
json.dump(temp, f, ensure_ascii=False, indent=4)
menu_manage = MenuManage()

View File

@ -0,0 +1,14 @@
from pydantic import BaseModel
class MenuItem(BaseModel):
module: str
"""模块名称"""
name: str
"""菜单名称"""
router: str
"""路由"""
icon: str
"""图标"""
default: bool = False
"""默认选中"""

View File

@ -107,7 +107,7 @@ async def _(bot_id: str) -> Result[dict[str, int]]:
"group_count": len(await PlatformUtils.get_group_list(bot)),
}
return Result.ok(data, "拿到信息啦!")
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/get_fg_count 调用错误", "WebUi", e=e)
@ -198,7 +198,7 @@ async def _(param: BotStatusParam):
try:
await BotConsole.set_bot_status(param.status, param.bot_id)
return Result.ok(info="修改bot全局开关成功")
except ValueError:
except (ValueError, KeyError):
return Result.fail("Bot未初始化...")

View File

@ -53,10 +53,10 @@ async def _(bot_id: str) -> Result:
group_id=g.group_id, group_name=g.group_name, ava_url=ava_url
)
)
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error("调用API错误", "/get_group_list", e=e)
logger.error(f"{router.prefix}/get_group_list 调用错误", "WebUi", e=e)
return Result.fail(f"{type(e)}: {e}")
return Result.ok(group_list_result, "拿到了新鲜出炉的数据!")
@ -101,7 +101,7 @@ async def _(bot_id: str) -> Result[list[Friend]]:
result_list,
"拿到了新鲜出炉的数据!",
)
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error("调用API错误", "/get_group_list", e=e)
@ -180,7 +180,7 @@ async def _(param: HandleRequest) -> Result:
except NotFoundError:
return Result.warning_("未找到此Id请求...")
return Result.ok(info="成功处理了请求!")
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/refuse_request 调用错误", "WebUi", e=e)
@ -226,7 +226,7 @@ async def _(param: HandleRequest) -> Result:
except ActionFailed:
await FgRequest.expire(param.id)
return Result.warning_("请求失败,可能该请求已失效或请求数据错误...")
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/approve_request 调用错误", "WebUi", e=e)
@ -251,7 +251,7 @@ async def _(param: LeaveGroup) -> Result:
return Result.warning_("Bot未在该群聊中...")
await bot.set_group_leave(group_id=param.group_id)
return Result.ok(info="成功处理了请求!")
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/leave_group 调用错误", "WebUi", e=e)
@ -276,7 +276,7 @@ async def _(param: DeleteFriend) -> Result:
return Result.warning_("Bot未有其好友...")
await bot.delete_friend(user_id=param.user_id)
return Result.ok(info="成功处理了请求!")
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/delete_friend 调用错误", "WebUi", e=e)
@ -298,7 +298,7 @@ async def _(bot_id: str, user_id: str) -> Result[UserDetail]:
if result
else Result.warning_("未找到该好友...")
)
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/get_friend_detail 调用错误", "WebUi", e=e)
@ -334,7 +334,7 @@ async def _(param: SendMessageParam) -> Result:
bot, param.user_id, param.group_id, param.message
)
return Result.ok("发送成功!")
except ValueError:
except (ValueError, KeyError):
return Result.warning_("指定Bot未连接...")
except Exception as e:
logger.error(f"{router.prefix}/send_message 调用错误", "WebUi", e=e)

View File

@ -84,7 +84,7 @@ async def _(param: UpdatePlugin) -> Result:
try:
await ApiDataSource.update_plugin(param)
return Result.ok(info="已经帮你写好啦!")
except ValueError:
except (ValueError, KeyError):
return Result.fail("插件数据不存在...")
except Exception as e:
logger.error(f"{router.prefix}/update_plugin 调用错误", "WebUi", e=e)
@ -152,7 +152,7 @@ async def _(module: str) -> Result[PluginDetail]:
return Result.ok(
await ApiDataSource.get_plugin_detail(module), "已经帮你写好啦!"
)
except ValueError:
except (ValueError, KeyError):
return Result.fail("插件数据不存在...")
except Exception as e:
logger.error(f"{router.prefix}/get_plugin 调用错误", "WebUi", e=e)