fix: improve install/uninstall stability + dreaming animations + scan fix flow

Dreaming page:
- Restore animated hero card (stars, moon, floating Z's, deep sky gradient)
- Glass-morphism stat cards inside hero
- runAction/toggleDreaming: friendly toast for unsupported RPCs instead of raw error

Install/Uninstall (config.rs):
- pre_install_cleanup: fix Windows process kill (wmic CommandLine match instead of useless WINDOWTITLE filter), kill standalone dir processes, wait 2s
- uninstall: wait 3s after gateway stop, wmic kill standalone processes, retry deletion with 3s delay
- upgrade source-switch: standalone cleanup with process kill + retry + wait
- gateway reinstall: wait 2s after stop before install

Scan fix flow (chat-debug.js):
- 5-step fix with progress toasts (pairing, doctor, gateway, wait, websocket)
- Gateway start polling (up to 15s) instead of fixed 5s wait
- WebSocket reconnect polling (up to 12s) instead of fixed 3s wait

Frontend (modal.js + about.js):
- setProgressLabels() for custom progress text per modal usage
- Uninstall modal shows "停止服务/卸载组件/清理文件" instead of "下载依赖"

i18n: 11 locales updated with fixStep* and uninstall progress keys
This commit is contained in:
晴天
2026-04-11 00:37:14 +08:00
parent cfd00f043e
commit 56039ce932
18 changed files with 822 additions and 788 deletions

View File

@@ -214,6 +214,7 @@ export function showUpgradeModal(title) {
let _onClose = null
let _finished = false
let _taskBar = null
let _progressLabels = null
// 重新打开弹窗(从任务状态栏点击时)
function reopenModal() {
@@ -275,13 +276,15 @@ export function showUpgradeModal(title) {
logBox.scrollTop = logBox.scrollHeight
},
getLogText() { return _logLines.join('\n') },
setProgressLabels(labels) { _progressLabels = labels },
setProgress(pct) {
fill.style.width = pct + '%'
const labels = _progressLabels || {}
let statusText
if (pct >= 100) statusText = t('common.completed')
else if (pct >= 75) statusText = t('common.installingProgress')
else if (pct >= 30) statusText = t('common.downloadingDependencies')
else statusText = t('common.preparing')
if (pct >= 100) statusText = labels.done || t('common.completed')
else if (pct >= 75) statusText = labels.installing || t('common.installingProgress')
else if (pct >= 30) statusText = labels.downloading || t('common.downloadingDependencies')
else statusText = labels.preparing || t('common.preparing')
text.textContent = statusText
updateTaskBar(statusText)
},