fix(device): 修复设备连接与配网多场景问题,同名设备用 deviceId 区分

- 连接中关闭蓝牙立即结束 loading,不再卡到超时
- onShow 已连接时同步标记,重新搜索不误标已连接设备
- 连接中防重入,搜索中切后台重置状态
- 配网成功立即退出配网模式,密码必填且 8-16 位
- 配网失败重试定时器可清理
- 同名设备改用 deviceId 唯一标识并展示

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
17792275749
2026-08-21 09:35:18 +08:00
co-authored by Claude Opus 4.7
parent d6e59df4e9
commit db865748f2
6 changed files with 146 additions and 90 deletions
@@ -3,6 +3,7 @@ import { leFuService } from '../../lefu/index'
/** 连接状态事件的取消订阅句柄 */
let unsubDisconnected: (() => void) | null = null
let unsubDeviceConnect: (() => void) | null = null
let retryTimer: number | null = null
/** 渲染用的 WiFi 项(在 SSID 基础上追加连接状态) */
interface WifiItem {
@@ -33,6 +34,7 @@ Page({
onUnload() {
wx.hideLoading()
if (retryTimer !== null) { clearTimeout(retryTimer); retryTimer = null }
unsubDisconnected?.()
unsubDeviceConnect?.()
unsubDisconnected = null
@@ -125,11 +127,22 @@ Page({
if (!this._ensureConnected()) return
const { selectedSsid, selectWifiPWD } = this.data
if (!selectedSsid) return
const pwd = selectWifiPWD.trim()
if (!pwd) {
wx.showToast({ title: '请输入 Wi-Fi 密码', icon: 'none' })
return
}
if (pwd.length < 8 || pwd.length > 16) {
wx.showToast({ title: '密码长度需为 8-16 位', icon: 'none' })
return
}
this.setData({ status: 'configuring' })
wx.showLoading({ title: '正在配网...', mask: true })
try {
await leFuService.configWifi(selectedSsid, selectWifiPWD)
await leFuService.configWifi(selectedSsid, pwd)
wx.hideLoading()
// 配网成功:立即退出配网模式(跳转走 onHide,不触发 onUnload
leFuService.exitWifiConfig()
this.setData({
status: 'list',
wifiList: this.data.wifiList.map(item => ({ ...item, connected: item.ssid === selectedSsid })),
@@ -143,7 +156,9 @@ Page({
this.setData({ selectedSsid: '', selectWifiPWD: '' })
wx.showToast({ title: err?.message || '配网失败', icon: 'none' })
// 配网失败:延时 1.5s 后清空数据并重新获取 WiFi 列表
setTimeout(() => {
if (retryTimer !== null) { clearTimeout(retryTimer); retryTimer = null }
retryTimer = setTimeout(() => {
retryTimer = null
this.onStartSearch()
}, 1500)
}
@@ -16,6 +16,7 @@
<input
password="{{true}}"
value="{{selectWifiPWD}}"
maxlength="16"
bind:input="passwordInput"
placeholder="输入您的wi-fi密码"
placeholder-class="placeholderClass"/>
@@ -24,6 +25,7 @@
<input
password="{{false}}"
value="{{selectWifiPWD}}"
maxlength="16"
bind:input="passwordInput"
placeholder="输入您的wi-fi密码"
placeholder-class="placeholderClass"/>