From f9d408221758df508f9dc89c3f2a8488ff9b8c4b Mon Sep 17 00:00:00 2001 From: Soulter <905617992@qq.com> Date: Sat, 20 Jun 2026 22:23:25 +0800 Subject: [PATCH] feat: add prerelease visibility toggle --- .../src/i18n/locales/en-US/core/header.json | 2 + .../src/i18n/locales/ru-RU/core/header.json | 2 + .../src/i18n/locales/zh-CN/core/header.json | 2 + .../full/vertical-header/VerticalHeader.vue | 47 ++++++++++++++++++- 4 files changed, 51 insertions(+), 2 deletions(-) diff --git a/dashboard/src/i18n/locales/en-US/core/header.json b/dashboard/src/i18n/locales/en-US/core/header.json index f25aaaf93..824e2decd 100644 --- a/dashboard/src/i18n/locales/en-US/core/header.json +++ b/dashboard/src/i18n/locales/en-US/core/header.json @@ -26,7 +26,9 @@ "release": "😊 Release" }, "advancedSettings": "Advanced settings", + "releases": "Releases", "updateToLatest": "Update to Latest Version", + "showPreReleases": "Show pre-release versions", "preRelease": "Pre-release", "preReleaseWarning": { "title": "Pre-release Version Notice", diff --git a/dashboard/src/i18n/locales/ru-RU/core/header.json b/dashboard/src/i18n/locales/ru-RU/core/header.json index 28aebb4a3..a43b31409 100644 --- a/dashboard/src/i18n/locales/ru-RU/core/header.json +++ b/dashboard/src/i18n/locales/ru-RU/core/header.json @@ -26,7 +26,9 @@ "release": "😊 Релиз" }, "advancedSettings": "Расширенные настройки", + "releases": "Релизы", "updateToLatest": "Обновить до последней версии", + "showPreReleases": "Показывать предварительные версии", "preRelease": "Предварительная версия", "preReleaseWarning": { "title": "Внимание: предварительная версия", diff --git a/dashboard/src/i18n/locales/zh-CN/core/header.json b/dashboard/src/i18n/locales/zh-CN/core/header.json index 61ae3c2e2..96c81ab66 100644 --- a/dashboard/src/i18n/locales/zh-CN/core/header.json +++ b/dashboard/src/i18n/locales/zh-CN/core/header.json @@ -26,7 +26,9 @@ "release": "😊 正式版" }, "advancedSettings": "高级设置", + "releases": "版本列表", "updateToLatest": "更新到最新版本", + "showPreReleases": "显示预发布版本", "preRelease": "预发布", "preReleaseWarning": { "title": "预发布版本提醒", diff --git a/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue b/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue index 4d32b94c2..c4f38337c 100644 --- a/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue +++ b/dashboard/src/layouts/full/vertical-header/VerticalHeader.vue @@ -30,6 +30,7 @@ const { t } = useI18n(); const route = useRoute(); const LAST_BOT_ROUTE_KEY = "astrbot:last_bot_route"; const LAST_CHAT_ROUTE_KEY = "astrbot:last_chat_route"; +const SHOW_PRE_RELEASES_KEY = "astrbot:updateDialog:showPreReleases"; let dialog = ref(false); let accountWarning = ref(false); let accountWarningMd5 = ref(false); @@ -50,6 +51,11 @@ let dashboardHasNewVersion = ref(false); let dashboardCurrentVersion = ref(""); let releases = ref([]); let releasesLoading = ref(false); +const showPreReleases = ref( + typeof window === "undefined" + ? false + : localStorage.getItem(SHOW_PRE_RELEASES_KEY) === "true", +); let updatingDashboardLoading = ref(false); let installLoading = ref(false); let showAdvancedUpdateSettings = ref(false); @@ -150,7 +156,12 @@ const releasesHeader = computed(() => [ { title: t("core.header.updateDialog.table.content"), key: "body" }, { title: t("core.header.updateDialog.table.actions"), key: "switch" }, ]); -const firstReleasePageItems = computed(() => releases.value.slice(0, 6)); +const visibleReleases = computed(() => + showPreReleases.value + ? releases.value + : releases.value.filter((item: any) => !isPreRelease(item.tag_name)), +); +const firstReleasePageItems = computed(() => visibleReleases.value.slice(0, 6)); const firstReleasePageHasPreRelease = computed(() => firstReleasePageItems.value.some((item: any) => isPreRelease(item.tag_name)), ); @@ -883,6 +894,11 @@ onMounted(() => { // 监听 viewMode 变化,切换到 bot 模式时跳转到首页 // 保存 bot 模式的最後路由 // 監聽 route 變化,保存最後一次 bot 路由 +watch(showPreReleases, (value) => { + if (typeof window === "undefined") return; + localStorage.setItem(SHOW_PRE_RELEASES_KEY, value ? "true" : "false"); +}); + watch( () => route.fullPath, (newPath) => { @@ -1456,6 +1472,21 @@ onMounted(async () => {
+
+
+ {{ t("core.header.updateDialog.releases") }} +
+ +
+ { { margin-left: 0; } +.release-table-toolbar { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + flex-wrap: wrap; +} + +.release-prerelease-switch { + flex: 0 1 auto; +} + /* 响应式布局样式 */ .logo-container { margin-left: 10px;