From 12916e79bb532350bbe434aefdf664a174153213 Mon Sep 17 00:00:00 2001 From: HibiKier <775757368@qq.com> Date: Tue, 24 Dec 2024 04:59:43 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=8E=A8=20=E6=B7=BB=E5=8A=A0=E8=8F=9C?= =?UTF-8?q?=E5=8D=95API=E5=8F=8A=E4=BC=98=E5=8C=96=E5=BC=82=E5=B8=B8?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- zhenxun/builtin_plugins/web_ui/__init__.py | 2 + .../builtin_plugins/web_ui/api/__init__.py | 3 +- .../web_ui/api/menu/__init__.py | 26 ++++++++ .../web_ui/api/menu/data_source.py | 64 +++++++++++++++++++ .../builtin_plugins/web_ui/api/menu/model.py | 14 ++++ .../web_ui/api/tabs/main/__init__.py | 4 +- .../web_ui/api/tabs/manage/__init__.py | 18 +++--- .../web_ui/api/tabs/plugin_manage/__init__.py | 4 +- 8 files changed, 121 insertions(+), 14 deletions(-) create mode 100644 zhenxun/builtin_plugins/web_ui/api/menu/__init__.py create mode 100644 zhenxun/builtin_plugins/web_ui/api/menu/data_source.py create mode 100644 zhenxun/builtin_plugins/web_ui/api/menu/model.py diff --git a/zhenxun/builtin_plugins/web_ui/__init__.py b/zhenxun/builtin_plugins/web_ui/__init__.py index f855b8a4..afa325f9 100644 --- a/zhenxun/builtin_plugins/web_ui/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/__init__.py @@ -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") diff --git a/zhenxun/builtin_plugins/web_ui/api/__init__.py b/zhenxun/builtin_plugins/web_ui/api/__init__.py index de9b3798..3608647c 100644 --- a/zhenxun/builtin_plugins/web_ui/api/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/api/__init__.py @@ -1 +1,2 @@ -from .tabs import * # noqa: F403 +from .menu import * # noqa: F403f +from .tabs import * # noqa: F403f diff --git a/zhenxun/builtin_plugins/web_ui/api/menu/__init__.py b/zhenxun/builtin_plugins/web_ui/api/menu/__init__.py new file mode 100644 index 00000000..4d795145 --- /dev/null +++ b/zhenxun/builtin_plugins/web_ui/api/menu/__init__.py @@ -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}") diff --git a/zhenxun/builtin_plugins/web_ui/api/menu/data_source.py b/zhenxun/builtin_plugins/web_ui/api/menu/data_source.py new file mode 100644 index 00000000..e0dcb49e --- /dev/null +++ b/zhenxun/builtin_plugins/web_ui/api/menu/data_source.py @@ -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() diff --git a/zhenxun/builtin_plugins/web_ui/api/menu/model.py b/zhenxun/builtin_plugins/web_ui/api/menu/model.py new file mode 100644 index 00000000..c9d7193f --- /dev/null +++ b/zhenxun/builtin_plugins/web_ui/api/menu/model.py @@ -0,0 +1,14 @@ +from pydantic import BaseModel + + +class MenuItem(BaseModel): + module: str + """模块名称""" + name: str + """菜单名称""" + router: str + """路由""" + icon: str + """图标""" + default: bool = False + """默认选中""" diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/main/__init__.py b/zhenxun/builtin_plugins/web_ui/api/tabs/main/__init__.py index 98eff79f..36059101 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/main/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/main/__init__.py @@ -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未初始化...") diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py b/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py index 78a37e08..87288465 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/manage/__init__.py @@ -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) diff --git a/zhenxun/builtin_plugins/web_ui/api/tabs/plugin_manage/__init__.py b/zhenxun/builtin_plugins/web_ui/api/tabs/plugin_manage/__init__.py index 02d87261..5ea91897 100644 --- a/zhenxun/builtin_plugins/web_ui/api/tabs/plugin_manage/__init__.py +++ b/zhenxun/builtin_plugins/web_ui/api/tabs/plugin_manage/__init__.py @@ -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)