fix(mini): address UI feedback and device status display

Correct battery colors, participant artwork, navigation icons, title layout, and map spacing.

Animate the binding countdown using the existing expiry, recover polling after transient failures, and show online and battery data on success. Keep current firmware messaging consistent with version availability.

Validation: WeChat mini-program build, 16 UI tests, and isolated developer-tool scenarios passed. Five pre-existing TypeScript errors remain; physical-device validation is pending.
This commit is contained in:
stu2not
2026-09-16 14:14:56 +08:00
parent a19e62af92
commit 7bcace0410
29 changed files with 321 additions and 102 deletions
@@ -1,21 +1,24 @@
import type { DeviceFirmwareStatus } from '@/services/device'
import { isFirmwareCurrent, isFirmwareUpdateInProgress } from '../../utils/firmware-status'
export function firmwareProgressView(status: DeviceFirmwareStatus | null, refreshError = false) {
const state = String(status?.update_status || '').toLowerCase()
const state = String(status?.update_status || '').trim().toLowerCase()
const complete = state === 'success' || state === 'completed'
const failed = state === 'failed'
const current = !complete && !isFirmwareUpdateInProgress(state) && isFirmwareCurrent(status)
const failed = state === 'failed' && !current
const value = Number(status?.progress)
const progress = complete ? 100 : Number.isFinite(value) ? Math.max(0, Math.min(100, value)) : 0
const hasProgress = complete || progress > 0
const target = status?.target_version
const version = target && !['unknown', 'updating'].includes(target) ? target : status?.latest_version
const title = complete ? '固件更新完成' : failed ? '固件更新失败' : '固件更新中'
const version = current ? status?.current_version : target && !['unknown', 'updating'].includes(target) ? target : status?.latest_version
const title = complete ? '固件更新完成' : current ? '当前已是最新版本' : failed ? '固件更新失败' : '固件更新中'
const message = complete ? '设备已完成更新,可以继续使用。'
: failed ? '更新未完成,请确认设备电量和网络后重试。'
: refreshError ? '暂时无法刷新进度,正在重试。你可以先关闭此窗口。'
: state === 'sent' ? '更新指令已发送,等待设备确认。'
: progress >= 100 ? '进度已达 100%,等待设备确认更新结果。'
: hasProgress ? '请保持设备电量充足,并连接网络。'
: '设备正在处理更新,等待进度上报。'
return { title, message, version, progress, percent: Math.floor(progress), hasProgress, complete, failed }
: current ? '当前设备已运行最新版本,无需更新。'
: failed ? '更新未完成,请确认设备电量和网络后重试。'
: refreshError ? '暂时无法刷新进度,正在重试。你可以先关闭此窗口。'
: state === 'sent' ? '更新指令已发送,等待设备确认。'
: progress >= 100 ? '进度已达 100%,等待设备确认更新结果。'
: hasProgress ? '请保持设备电量充足,并连接网络。'
: '设备正在处理更新,等待进度上报。'
return { title, message, version, progress, percent: Math.floor(progress), hasProgress, complete, failed, current }
}