From a39e994a2e76c64930b3cbffa3c2133d37410d1c Mon Sep 17 00:00:00 2001 From: admin Date: Fri, 8 May 2026 22:55:14 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E6=9B=B4=E6=96=B0=E5=BC=80=E5=8F=91?= =?UTF-8?q?=E6=97=A5=E5=BF=97=EF=BC=8C=E8=AE=B0=E5=BD=95=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=88=A4=E6=96=AD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/DEVELOPMENT_LOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/docs/DEVELOPMENT_LOG.md b/docs/DEVELOPMENT_LOG.md index e37dde2..a2f9e46 100644 --- a/docs/DEVELOPMENT_LOG.md +++ b/docs/DEVELOPMENT_LOG.md @@ -39,3 +39,30 @@ ``` + +--- + +### 修复:版本状态判断逻辑 + +**问题描述:** +- 状态列误展示为更新策略(optional/forced),应与策略区分开 +- 状态应反映该版本是否仍然生效 + +**正确逻辑:** +- 同一应用下,版本按 ID 升序排列(ID 越大越新) +- 若存在**更新版本**(ID 更大)且策略为**强制更新** → 当前版本状态为 `superseded`(失效) +- 否则 → 当前版本状态为 `active`(生效) + +**举例:** +| 版本 | 策略 | 状态 | 说明 | +|------|------|------|------| +| v1.0.0 (ID=1) | optional | **生效** | 没有比它新的版本 | +| v1.0.0 (ID=1) | optional | **失效** | ID=2 的 v1.0.1 是强制更新 | +| v1.0.0 (ID=1) | forced | **生效** | ID=2 的 v1.0.2 是可选更新 | + +**修改文件:** + +| 文件 | 修改内容 | +|------|----------| +| `backend/internal/router/admin/versions.go` | `handleGetAllVersions`: 查询所有版本,按 app 分组收集 forced 版本 ID,遍历时检查是否有 ID 更大的 forced 版本
`handleGetVersionByID`: 用 COUNT 查询是否有同应用下 ID 更大且策略为 forced 的版本 | +| `frontend/src/pages/admin/versions/components/columns.ts` | 恢复状态列展示 `status` 字段的 `active`/`superseded` |