fix(更新日志): 面板随指定版本下拉联动;本机已是最新时展示本机条目

- 「指定版本更新」下拉选中版本时日志切到该版本自身的条目(升级/回退统一语义),
  未收录显示"暂无更新说明"(区块不消失),选回空项回默认区间;
  列表加载后自动默认选中第一条不触发切换
- 本机版本==线上最新时回退显示本机版本条目(原来整块消失),灰度/回滚仍隐藏
- 精简 4.0.20/4.0.21 超长文案,修复既有红测试(更新说明限 40 字)
This commit is contained in:
2026-09-16 01:02:13 +08:00
parent 79b5d40327
commit d189d94c3b
7 changed files with 152 additions and 17 deletions
+23 -4
View File
@@ -28,14 +28,14 @@ export const CLIENT_CHANGELOG: ClientChangelogEntry[] = [
version: '4.0.21',
date: '2026-09-15',
items: [
'新增设备标识文件:客户端程序目录会生成 code.txt,遇到问题时把文件里的标识发给客服,可快速查本机日志',
'客户端目录会生成 code.txt,遇到问题时把发给客服,可快速查本机日志',
],
},
{
version: '4.0.20',
date: '2026-09-15',
items: [
'新增运行日志自动同步:本地日志会(压缩后)上传到云端后台,遇到问题客服可远程排查,不用手动发日志文件(云端保留 7 天)',
'本地日志会自动上传到云端(保留 7 天),遇到问题客服可远程排查,不用手动发日志',
],
},
{
@@ -214,12 +214,15 @@ export function newestChangelogVersion(entries: ClientChangelogEntry[] = CLIENT_
*
* - latestVersion 为空(检测未完成/失败)时按数据文件里最新版本兜底;
* - currentVersion 为空(旧客户端无版本桥)时只给最新版本一条,不把整段历史倒给用户;
* - 本机版本已高于线上(灰度/回滚)时返回空数组,由调用方隐藏该区块
* - 本机版本已高于线上(灰度/回滚)时返回空数组,由调用方隐藏该区块
* - includeCurrent 为 true(面板展示用)时,本机 == 线上(无更新可看)退回展示
* 本机版本自身的条目——刚升级完的用户最想知道"这个版本改了什么"。
*/
export function selectChangelogEntries(options: {
currentVersion?: string
latestVersion?: string
entries?: ClientChangelogEntry[]
includeCurrent?: boolean
} = {}): ClientChangelogEntry[] {
const entries = options.entries ?? CLIENT_CHANGELOG
if (!entries.length) return []
@@ -231,5 +234,21 @@ export function selectChangelogEntries(options: {
const newest = inRange.find((entry) => compareVersions(entry.version, upper) === 0)
return [newest ?? inRange[0]]
}
return inRange.filter((entry) => compareVersions(entry.version, current) > 0)
const newer = inRange.filter((entry) => compareVersions(entry.version, current) > 0)
if (newer.length || !options.includeCurrent) return newer
// 本机 == 线上:展示本机版本条目;本机高于线上时 inRange 里没有它,仍为空(不展示低版本日志)
return inRange.filter((entry) => compareVersions(entry.version, current) === 0)
}
/**
* 取指定版本自身的条目("指定版本更新"下拉选中时展示,升级/回退/同版统一语义)。
* 版本未收录或版本号为空时返回空数组——不倒推相邻版本,避免张冠李戴。
*/
export function selectVersionEntry(
version: string,
entries: ClientChangelogEntry[] = CLIENT_CHANGELOG,
): ClientChangelogEntry[] {
const target = normVersion(version)
if (!target) return []
return entries.filter((entry) => compareVersions(entry.version, target) === 0)
}