---
id: v4-2472-upgrade-pending-reboot
title: 固件升级完成待重启 — 触摸屏终态文案与出口
doc_type: design-record
status: decided-pending-dev-confirm
target_release: "8.4"
last_updated: 2026-09-14
sources:
  - { type: jira, ref: "V4-2472", url: "https://tvunetworks.atlassian.net/browse/V4-2472" }
  - { type: jira, ref: "V4-1676", url: "https://tvunetworks.atlassian.net/browse/V4-1676" }
  - { type: slack, ref: "V4 dev · 触摸屏卡在「升级成功，正在重启」", url: "https://tvunetworks.slack.com/archives/C087EUM316Y/p1789114355045819" }
figma:
  file: 0054ib0nLmt27bC3QlGDl7
  nodes: []   # 本轮未出 mockup，见 §5
---

# Feature Design Record — 固件升级完成待重启（V4-2472）

> **本文件是这个场景的设计侧真源。** 仓库此前**完全没有**固件升级流程的任何设计规格，
> 这是第一份。文案串与判据在定调阶段就落这里，不要只留在 Jira 评论里。

**范围**：TM1000 V4 4K 触摸屏（Touch Screen），build 84055 起。
**产品 UI 语言**：设备语言单语（EN）。本文件的中文是注释层译文，**不进产品界面**。

## 1. 问题与根因

QA（Tao Yang）报：通过 SSH 手动升级后不执行重启命令，触摸屏一直停在「升级成功！正在重启...」。

Edward Wu 查出根因分两半，**两半都得修**：

| | 问题 | 说明 |
|---|---|---|
| ① | **文案误导** | 升级终态原先一律显示固定串「升级成功！正在重启...」，没用后端 `get_status` 的 `main_msg` 本来就有的区分——设备会自行重启时后端发 `...System is rebooting automatically.`，SSH / 后台升级完成后发的是 `Reboot, please.` |
| ② | **这屏关不掉** | 该屏没有任何按钮出口，状态轮询每 10 秒重新触发一次 ⇒ 只要没人重启就永远停在这屏，且关不掉 |

⚠️ **①② 是并列的两个问题，不是一个**。讨论里几次差点只盯着①（"把文案改对就行"），
但②不修的话：设备重启前老版本仍在运行，一台能用的设备被这屏占死。

## 2. 决策

**定调（owner 2026-09-14）：触摸屏不加重启入口，只做状态提示 + 一个关闭出口。**

| # | 决策 | 理由 |
|---|---|---|
| D1 | **不给重启按钮** | 进入这个状态的**唯一**路径是 SSH / 后台升级（后台升级 = 经 SSH 的非界面操作，owner 确认二者同路径）。操作的人在远程终端，那边已经提示要重启。触摸屏再给重启入口 = 第二个操作点，两边同时触发重启有风险 |
| D2 | **保留一个 `OK` 按钮**，只关闭、不执行任何动作；点过之后不再随轮询重弹 | 修 §1 的②。关闭按钮不带任何重启动作，**不构成 D1 所防的"两边同时操作"风险**——D1 否掉的是重启入口，不是所有按钮 |
| D3 | **文案改状态陈述，不用祈使句** | 见 §3 |
| D4 | **会自行重启的路径文案不变**，保持「正在重启」 | 与 Edward 现有判据（看后端原文含不含 `rebooting`）一致，本轮不动 |

### ⛔ 被否掉的两个方案，以及否掉的**射程**

| 方案 | 结论 | 注意射程 |
|---|---|---|
| Edward 原实现：`[稍后]` + `[重启]` 两个按钮 | **否**——只否 `[重启]` | `[稍后]` 的**行为**（点过不再重弹、不把刚装的版本写进"忽略此版本"列表）**保留**，只是按钮改叫 `OK`、语义从"稍后再说"变成"我知道了" |
| 严格对齐 V3：纯文案、无按钮 | **否** | V3 的做法不是设计过的结果。Edward 查证：V3 收尾函数与 V4 改前完全一样，V3 的"优化"只在状态轮询里放行了 idle 态，**效果 = 停在"升级完成，请重启"、同样没有出口** ⇒ V3 没修 §1 的② |

⚠️ **不要把 V3 当基准。** 这轮讨论起点就是 QA 的「V3 已经优化了」，但查下来 V3 只解决了①。
对齐 V3 = 复制一个只修一半的实现。

## 3. 文案

| 状态 | 提示文案（EN，产品 UI） | 中文对照（注释层） |
|---|---|---|
| 升级完成 · 待重启 | `Upgrade complete. The new version takes effect after reboot.` | 升级完成，重启后生效。 |
| 按钮 | `OK` | 确定 |

**为什么不用「请重启」/ `Please reboot`**（Edward 原实现的写法）：
祈使句是在对屏前的人下指令，但按 D1 的判断，**该执行重启的人不在屏前**。
状态陈述只报事实、不指派动作，与"不制造第二个操作点"自洽。

⚠️ **宽度未实测**。本轮没进 Figma，这条串**没有量过**是否单行放得下。
落 mockup 时必须按 `lcd-message-strings.md` §4.1 的双条件（宽 ≤480 **且** 高 = 单行）实测，
⛔ 不按字符数推算（该文件 §5.2 有两次推算误判的实证）。

## 4. 未闭合项

| # | 事 | 谁 | 状态 |
|---|---|---|---|
| O1 | Edward 确认是否接受本定调并改实现（原版是两个按钮） | Edward Wu | 已在 Jira 评论 `274519` 提出，**未回复** |
| O2 | 文案宽度实测 + 这屏的渲染形态确认（整屏接管？弹窗？本轮未见截图） | designer | 未做，见 §5 |
| O3 | 串登记进 `lcd-message-strings.md` | designer | **未做**，前置依赖 O1 + O2，见 §5 |
| O4 | 判定"完成待重启"用 `percent=="100"`（V4）还是 `main_msg 非空`（V3） | Edward ↔ QA | 纯技术判据，**不归设计**，Edward 已在评论 `274406` 抛给 Tao |

## 5. 为什么本轮没出 mockup，以及串为什么还没进文案总表

**没出 mockup**：本轮是 QA 直接 @ 设计问一个二选一的定调，交付层重量按需求大小匹配——
定调本身不需要图。真要出图也只是"一句话 + 一个 OK 按钮"，等 O1 有回复再决定值不值得画。

**串没进 `lcd-message-strings.md`**：那份文件的 §7 前提是**所有场景共用库 `Message` 组件**
（toast / 提示条）。本场景是**整屏升级状态页的终态**，不是 toast——Edward 描述的是"这一屏"、
带按钮、且被状态轮询驱动。形态没核实（O2）就塞进去，会给那份文件造一个违反自身前提的条目。

⇒ **O1 + O2 闭合后再按该文件 §8.1 的四段模板追加一节**；若确认不是 `Message` 组件，
则本文件继续作为这个场景的串真源，并在文案总表加一行指针而不是复制串。

## 6. 出处

- Jira：[V4-2472](https://tvunetworks.atlassian.net/browse/V4-2472)（parent [V4-1676](https://tvunetworks.atlassian.net/browse/V4-1676) RPS One Software 8.4）
- 定调评论：[`274519`](https://tvunetworks.atlassian.net/browse/V4-2472?focusedCommentId=274519)（Nancy Zeng，2026-09-14）
- Edward 根因 + 原实现：评论 `274264` · V3 取证：`274360` · V3 源码结论（更正推测）：`274406`
- QA 提问：评论 `274445`（Tao Yang）
- 开发实现：SVN r1722（为原两按钮版本，**本定调后需改**）
- V3 源码位置（Edward 提供）：`10.12.23.237:8088` asherguo 家目录 `tvu_new_gui`，`CMainWidget.cpp`

## 7. 路由

| 项 | 值 |
|---|---|
| Jira assignee | Edward Wu（V4 LCD / Touch Screen 开发） |
| Jira status | `Resolved`（**基于原两按钮实现**；若接受本定调需退回重做） |
| 提单人 / 复测 | Tao Yang（QA） |
