From f294ffbde3444dcd06696dc7df7e3720d1366ef8 Mon Sep 17 00:00:00 2001 From: LIEN Date: Sat, 25 Jul 2026 00:08:59 +0800 Subject: [PATCH 1/6] fix(ui): normalize displayed build versions --- frontend/src/utils/version.ts | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 frontend/src/utils/version.ts diff --git a/frontend/src/utils/version.ts b/frontend/src/utils/version.ts new file mode 100644 index 000000000..5f78fd440 --- /dev/null +++ b/frontend/src/utils/version.ts @@ -0,0 +1,17 @@ +const SEMANTIC_VERSION_PATTERN = /(?:^|[^0-9])v?(\d+\.\d+\.\d+)(?=$|[^0-9])/i + +/** + * Extract a clean semantic version from build identifiers. + * + * Examples: + * - main-v0.0.1-81a2f23b25fb -> 0.0.1 + * - v0.0.1 -> 0.0.1 + * - 0.0.1 -> 0.0.1 + */ +export function extractSemanticVersion(value: string | null | undefined): string { + const normalized = value?.trim() ?? '' + if (!normalized) return '' + + const match = normalized.match(SEMANTIC_VERSION_PATTERN) + return match?.[1] ?? normalized.replace(/^v/i, '') +} From de2feef3ea3a38203c78ef48856b0a8cb53d1f1a Mon Sep 17 00:00:00 2001 From: LIEN Date: Sat, 25 Jul 2026 00:09:19 +0800 Subject: [PATCH 2/6] fix(ui): display clean semantic versions --- frontend/src/api/admin/system.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/frontend/src/api/admin/system.ts b/frontend/src/api/admin/system.ts index 1c057c849..b8c993509 100644 --- a/frontend/src/api/admin/system.ts +++ b/frontend/src/api/admin/system.ts @@ -3,6 +3,7 @@ */ import { apiClient } from '../client' +import { extractSemanticVersion } from '@/utils/version' export interface ReleaseInfo { name: string @@ -26,7 +27,10 @@ export interface VersionInfo { */ export async function getVersion(): Promise<{ version: string }> { const { data } = await apiClient.get<{ version: string }>('/admin/system/version') - return data + return { + ...data, + version: extractSemanticVersion(data.version) + } } /** @@ -37,7 +41,11 @@ export async function checkUpdates(force = false): Promise { const { data } = await apiClient.get('/admin/system/check-updates', { params: force ? { force: 'true' } : undefined }) - return data + return { + ...data, + current_version: extractSemanticVersion(data.current_version), + latest_version: extractSemanticVersion(data.latest_version) + } } export interface UpdateResult { From 48ec26a2df2400b1620c6303324b91b2a33c175f Mon Sep 17 00:00:00 2001 From: LIEN Date: Sat, 25 Jul 2026 00:09:28 +0800 Subject: [PATCH 3/6] fix(ui): contain long account emails in dropdown --- frontend/src/styles/layout-fixes.css | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 frontend/src/styles/layout-fixes.css diff --git a/frontend/src/styles/layout-fixes.css b/frontend/src/styles/layout-fixes.css new file mode 100644 index 000000000..b1b1b83fc --- /dev/null +++ b/frontend/src/styles/layout-fixes.css @@ -0,0 +1,9 @@ +/* Keep the fixed-width account dropdown readable for long email addresses. */ +header.glass .dropdown.glass-popover.w-56 { + width: min(16rem, calc(100vw - 1rem)); +} + +header.glass .dropdown.glass-popover.w-56 > .border-b:first-child > div:last-child { + max-width: 100%; + overflow-wrap: anywhere; +} From 72c56ade1e103cf858ac922fd93df366816038e8 Mon Sep 17 00:00:00 2001 From: LIEN Date: Sat, 25 Jul 2026 00:09:42 +0800 Subject: [PATCH 4/6] fix(ui): load account dropdown layout fixes --- frontend/src/components/layout/AppLayout.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/frontend/src/components/layout/AppLayout.vue b/frontend/src/components/layout/AppLayout.vue index 4c5b0c5de..65382048e 100644 --- a/frontend/src/components/layout/AppLayout.vue +++ b/frontend/src/components/layout/AppLayout.vue @@ -24,6 +24,7 @@