diff --git a/astrbot/dashboard/routes/update.py b/astrbot/dashboard/routes/update.py index e6e9b90c..f2b5da9b 100644 --- a/astrbot/dashboard/routes/update.py +++ b/astrbot/dashboard/routes/update.py @@ -13,6 +13,7 @@ class UpdateRoute(Route): self.routes = { '/update/check': ('GET', self.check_update), '/update/do': ('POST', self.update_project), + '/update/dashboard': ('POST', self.update_dashboard), '/update/pip-install': ('POST', self.install_pip_package) } self.astrbot_updator = astrbot_updator @@ -22,8 +23,8 @@ class UpdateRoute(Route): type_ = request.args.get('type', None) try: + dv = await get_dashboard_version() if type_ == 'dashboard': - dv = await get_dashboard_version() return Response().ok({ "has_new_version": dv != f"v{VERSION}", "current_version": dv @@ -34,7 +35,10 @@ class UpdateRoute(Route): status="success", message=str(ret) if ret is not None else "已经是最新版本了。", data={ - "has_new_version": ret is not None + "version": f"v{VERSION}", + "has_new_version": ret is not None, + "dashboard_version": dv, + "dashboard_has_new_version": dv != f"v{VERSION}" } ).__dict__ except Exception as e: @@ -68,6 +72,18 @@ class UpdateRoute(Route): logger.error(f"/api/update_project: {traceback.format_exc()}") return Response().error(e.__str__()).__dict__ + async def update_dashboard(self): + try: + try: + await download_dashboard() + except Exception as e: + logger.error(f"下载管理面板文件失败: {e}。") + return Response().error(f"下载管理面板文件失败: {e}").__dict__ + return Response().ok(None, "更新成功。刷新页面即可应用新版本面板。").__dict__ + except Exception as e: + logger.error(f"/api/update_dashboard: {traceback.format_exc()}") + return Response().error(e.__str__()).__dict__ + async def install_pip_package(self): data = await request.json package = data.get('package', '') diff --git a/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue b/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue index 96148f7a..37686d2c 100644 --- a/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +++ b/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue @@ -15,6 +15,9 @@ let newUsername = ref(''); let status = ref(''); let updateStatus = ref('') let hasNewVersion = ref(false); +let botCurrVersion = ref(''); +let dashboardHasNewVersion = ref(false); +let dashboardCurrentVersion = ref(''); let version = ref(''); const open = (link: string) => { @@ -64,6 +67,9 @@ function checkUpdate() { .then((res) => { hasNewVersion.value = res.data.data.has_new_version; updateStatus.value = res.data.message; + botCurrVersion.value = res.data.data.version; + dashboardCurrentVersion.value = res.data.data.dashboard_version; + dashboardHasNewVersion.value = res.data.data.dashboard_has_new_version; }) .catch((err) => { if (err.response.status == 401) { @@ -84,7 +90,24 @@ function switchVersion(version: string) { }) .then((res) => { updateStatus.value = res.data.message; - if (res.data.status == 'success') { + if (res.data.status == 'ok') { + setTimeout(() => { + window.location.reload(); + }, 1000); + } + }) + .catch((err) => { + console.log(err); + updateStatus.value = err + }); +} + +function updateDashboard() { + updateStatus.value = '正在更新...'; + axios.post('/api/update/dashboard') + .then((res) => { + updateStatus.value = res.data.message; + if (res.data.status == 'ok') { setTimeout(() => { window.location.reload(); }, 1000); @@ -106,8 +129,8 @@ commonStore.getStartTime();