日期:2026-09-26
适用范围:miniprogram/utils/mpUpdate.js、miniprogram/pages/workbench/workbench.vue
前置:docs/superpowers/specs/2026-09-26-mp-weixin-force-update-design.md
决策:展示微信发版号 + UpdateManager 状态文案(已是最新 / 有新版本…)
showCancel: false 强制重启策略package.json 的 version 冒充微信发版号| 字段 | 来源 | 说明 |
|---|---|---|
version |
uni.getAccountInfoSync().miniProgram.version |
仅正式版有值;开发/体验常为空 |
envVersion |
同上 .envVersion |
release / trial / develop |
| 是否有更新 | UpdateManager.onCheckForUpdate → hasUpdate |
正式版 CDN 结果;有延迟 |
| 下载就绪 | onUpdateReady |
已有强制弹窗,行上文案同步为「待重启」 |
| 失败 | onUpdateFailed |
已有失败弹窗 |
| status | 行内文案片段 | 触发 |
|---|---|---|
unsupported |
开发版/体验版 · 无正式更新流 |
envVersion !== 'release' |
checking |
检查中… |
用户点击或主动检查开始 |
latest |
已是最新 |
hasUpdate === false |
downloading |
有新版本(下载中) |
hasUpdate === true 且尚未 ready |
ready |
有新版本,点此重启 |
onUpdateReady |
failed |
更新失败 |
onUpdateFailed |
idle |
(正式版初始可显示「点此检查更新」) | 尚未收到 check 回调 |
展示行格式(正式版):
版本 {version} · 正式版 · {状态文案}
版本为空时用 —。
onShow:刷新 account 信息,并调用 checkMpUpdate()(沿用 30s 防抖)。checkMpUpdate({ force: true, fromUser: true })ready:直接再次拉起强制重启弹窗 / applyUpdateunsupported:toast 说明开发/体验无正式更新流latest:toast「已是最新」downloading:toast「发现新版本,正在下载」onUpdateReady:仍强制 Modal「立即重启」;状态置 ready。mpUpdate.js)getMpAccountInfo() → { version, envVersion, envLabel, isRelease }getMpUpdateSnapshot() → { status, ...account }subscribeMpUpdate(listener) → unsubscribecheckMpUpdate(options?) — 扩展现有导出;App.vue 调用方式兼容(无参)pages/workbench/workbench.vue:标题「山峡化工工作台」正下方展示版本行(绿色 Header 内)。downloading / ready / failed):大麦黄底条 + 加粗文案;ready 另显「立即更新」按钮样式并轻微脉冲,便于点按。app-env-badge;不落在 pages/mine/mine.vue。getUpdateManager 立刻重复拉 CDN;force 主要绕过本地 30s 入口防抖并刷新 UI 状态。版本 x.x.x · 正式版 · …。