From 0abb5f8bdf603c93ea62d60bb847e29588b5931c Mon Sep 17 00:00:00 2001 From: Gloridust Date: Mon, 15 Jun 2026 00:35:30 +0800 Subject: [PATCH] =?UTF-8?q?fix(panel):=20=E5=BC=80=E5=8F=91=E7=89=88?= =?UTF-8?q?=E6=9E=84=E5=BB=BA=E7=9A=84=E7=89=88=E6=9C=AC=E5=B1=95=E7=A4=BA?= =?UTF-8?q?=EF=BC=8C=E4=B8=8D=E5=86=8D=E8=AF=AF=E6=A0=87=E3=80=8C=E5=B7=B2?= =?UTF-8?q?=E6=98=AF=E6=9C=80=E6=96=B0=E3=80=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 本地/未发布构建(dev / dev-)无法与发布版做语义化比较,之前会错误显示 「· 已是最新」。现在: - 「关于」卡:当前版本非 vX.Y.Z 时标「开发版」,仅把最新发布版作为信息展示 (当前版本 dev-xxx · 最新发布 v1.2.0),不显示「已是最新」、不触发红点。 - build-local.sh 默认烤入 dev-<短SHA>(而非裸 dev),便于辨识本地构建。 Co-Authored-By: Claude Opus 4.8 (1M context) --- panel/web/src/pages/Admin.tsx | 19 +++++++++++++++---- scripts/build-local.sh | 5 +++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/panel/web/src/pages/Admin.tsx b/panel/web/src/pages/Admin.tsx index e5686b7..3c41979 100644 --- a/panel/web/src/pages/Admin.tsx +++ b/panel/web/src/pages/Admin.tsx @@ -92,13 +92,19 @@ function AboutSection({ isAdmin }: { isAdmin: boolean }) { api.getVersion().then(setInfo).catch(() => {}); }, []); + // 当前版本是否为正式发布版(语义化 vX.Y.Z)。dev / dev- 等本地构建无法与发布版比较, + // 既不显示「已是最新」也不显示红点,只把最新发布版作为信息展示。 + const isRelease = !!info && /^v?\d+\.\d+\.\d+$/.test(info.current); + const check = async () => { setChecking(true); try { const r = await api.checkUpdate(); setInfo(r); - if (r.hasUpdate) toast(`发现新版本 ${r.latest}`, 'ok'); - else if (r.error) toast('检查失败:' + r.error, 'error'); + const rel = /^v?\d+\.\d+\.\d+$/.test(r.current); + if (r.error) toast('检查失败:' + r.error, 'error'); + else if (r.hasUpdate) toast(`发现新版本 ${r.latest}`, 'ok'); + else if (!rel) toast(`最新发布 ${r.latest ?? '未知'}(当前为开发版)`, 'ok'); else toast('已是最新版本', 'ok'); } catch (e: any) { toast(e.message || '检查失败', 'error'); @@ -116,7 +122,7 @@ function AboutSection({ isAdmin }: { isAdmin: boolean }) {
云微 · WechatOnCloud - {info?.hasUpdate && 有新版} + {info?.hasUpdate ? 有新版 : info && !isRelease ? 开发版 : null}
当前版本 {info?.current ?? '…'} @@ -125,7 +131,12 @@ function AboutSection({ isAdmin }: { isAdmin: boolean }) { {' · '}最新 {info.latest} )} - {info && !info.hasUpdate && info.latest && !info.error && <>{' · '}已是最新} + {isRelease && info && !info.hasUpdate && info.latest && !info.error && <>{' · '}已是最新} + {!isRelease && info?.latest && !info.error && ( + <> + {' · '}最新发布 {info.latest} + + )}
{info?.hasUpdate && (
diff --git a/scripts/build-local.sh b/scripts/build-local.sh index 9649a58..75ba323 100755 --- a/scripts/build-local.sh +++ b/scripts/build-local.sh @@ -10,9 +10,10 @@ set -euo pipefail OWNER="${WOC_IMAGE_OWNER:-gloridust}" TAG="${WOC_VERSION:-latest}" -# 烤进面板镜像的版本号:设了 WOC_VERSION 就用它(如 v1.2.0),否则 dev(dev 不会触发「有新版」红点)。 -VER="${WOC_VERSION:-dev}" ROOT="$(cd "$(dirname "$0")/.." && pwd)" +# 烤进面板镜像的版本号:设了 WOC_VERSION 就用它(如 v1.2.0),否则用 dev-<短SHA>(本地构建标识)。 +# 开发版不是正式发布版,面板「关于」会标「开发版」、不会触发「有新版」红点。 +VER="${WOC_VERSION:-dev-$(git -C "$ROOT" rev-parse --short HEAD 2>/dev/null || echo local)}" PANEL_IMAGE="ghcr.io/${OWNER}/woc-panel:${TAG}" WECHAT_IMAGE="ghcr.io/${OWNER}/wechat-on-cloud:${TAG}"