From 452a7bb45029ba5e858aaaefc45726722930f257 Mon Sep 17 00:00:00 2001 From: chiyi Date: Wed, 8 Jul 2026 09:49:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=85=AC=E5=91=8A=E5=B1=95?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/package-lock.json | 8 ++++---- frontend/package.json | 2 +- frontend/src/announcement.js | 13 +++++++++++++ frontend/src/components/AnnouncementModal.vue | 2 +- frontend/src/layouts/PublicLayout.vue | 9 ++++++++- 5 files changed, 27 insertions(+), 7 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 487de1d..333a52d 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,7 +8,7 @@ "name": "vivid-frontend", "version": "0.1.0", "dependencies": { - "fflate": "^0.8.2", + "fflate": "^0.8.3", "marked": "^18.0.5", "qrcode": "^1.5.4", "vue": "^3.5.13", @@ -1499,9 +1499,9 @@ } }, "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/fflate/-/fflate-0.8.3.tgz", + "integrity": "sha512-tbZNuJrLwGUp3zshBtdy4W+ORxZuIh8a5ilyIEQDC5rY1f3U20JMry0Ll3WBzU58EZKsEuJFXhb5gwv8CsPvgA==", "license": "MIT" }, "node_modules/find-up": { diff --git a/frontend/package.json b/frontend/package.json index 4f39242..3566ada 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -9,7 +9,7 @@ "preview": "vite preview" }, "dependencies": { - "fflate": "^0.8.2", + "fflate": "^0.8.3", "marked": "^18.0.5", "qrcode": "^1.5.4", "vue": "^3.5.13", diff --git a/frontend/src/announcement.js b/frontend/src/announcement.js index ba13f4c..60f8b52 100644 --- a/frontend/src/announcement.js +++ b/frontend/src/announcement.js @@ -19,6 +19,19 @@ export async function loadAnnouncement() { } catch { /* offline — skip */ } } +// Manual open (公告 button in the left rail): re-fetch so the text is fresh +// even if nothing was loaded yet, then show regardless of seen-state. +export async function openAnnouncement() { + try { + const r = await api('/announcement') + if (r.ok && r.data) { + announcement.content = r.data.content || '' + announcement.version = r.data.version || '' + } + } catch { /* offline — show whatever we have */ } + announcement.show = true +} + // Dismiss: hide + remember this version server-side so it won't re-pop. export async function dismissAnnouncement() { announcement.show = false diff --git a/frontend/src/components/AnnouncementModal.vue b/frontend/src/components/AnnouncementModal.vue index ba39306..b006d95 100644 --- a/frontend/src/components/AnnouncementModal.vue +++ b/frontend/src/components/AnnouncementModal.vue @@ -5,7 +5,7 @@ import { announcement, dismissAnnouncement } from '../announcement' import Icon from './Icon.vue' marked.setOptions({ breaks: true, gfm: true }) -const html = computed(() => marked.parse(announcement.content || '')) +const html = computed(() => marked.parse(announcement.content.trim() || '暂无公告'))