diff --git a/app.json b/app.json index 7498852..27c2093 100644 --- a/app.json +++ b/app.json @@ -33,8 +33,8 @@ "style": "v2", "plugins": { "ppScale-plugin": { - "version": "1.2.19", - "provider": "wx0ffb48417ce6345c" + "version": "0.0.22", + "provider": "wx0826af4e4908f524" } }, "permission": { diff --git a/components/configureDevice_2/configureDevice_2.js b/components/configureDevice_2/configureDevice_2.js index 9ad3cbd..44c3d5f 100644 --- a/components/configureDevice_2/configureDevice_2.js +++ b/components/configureDevice_2/configureDevice_2.js @@ -66,6 +66,10 @@ Component({ content: "确定要初始化设备吗?将清除设备中的所有数据(用户信息、历史数据、配网数据、设置信息)。", success: (res) => { if (res.confirm) { + if (!app.globalData.ppScale.activeProtocol) { + wx.showToast({ title: "设备未连接,请重试", icon: "none" }); + return; + } wx.showLoading({ title: "正在初始化设备...", mask: true }); app.globalData.ppScale.activeProtocol.codeClearDeviceData("00", (status) => { wx.hideLoading(); @@ -190,18 +194,19 @@ Component({ } let rawList = deviceUserIds; - // 兼容对象数组和纯ID数组,统一转为字符串比对 + // SDK 返回的是 userID 数组,统一转为对象方便后续操作 let deviceIds = rawList.map(item => ({ - id: item, + userID: String(item), memberID: "" })); - let localIds = userList.map(user => user.userId); + // 本地列表的 userId 统一转字符串,与 SDK 侧类型对齐 + let localIds = userList.map(user => String(user.userId)); // 秤有、列表没有 → 需要从秤删除 - let needDeleteList = deviceIds.filter(d => !localIds.includes(d.userId)); - + let needDeleteList = deviceIds.filter(d => !localIds.includes(d.userID)); + // 秤没有、列表有 → 需要下发到秤 - let needSyncList = userList.filter(user => !deviceIds.some(d => d.userID == user.userId)); + let needSyncList = userList.filter(user => !deviceIds.some(d => d.userID === String(user.userId))); console.log("需删除", needDeleteList, "需下发", needSyncList); @@ -268,7 +273,7 @@ Component({ wx.showLoading({ title: "正在删除第" + (delIndex + 1) + "/" + needDeleteList.length + "个多余用户...", mask: true }); let item = needDeleteList[delIndex]; app.globalData.ppScale.activeProtocol.dataDeleteUser({ - userID: item.userId, + userID: item.userID, memberID: "" }, (status) => { if (status == 0) { diff --git a/components/configureDevice_3/configureDevice_3.js b/components/configureDevice_3/configureDevice_3.js index cbade93..81b96df 100644 --- a/components/configureDevice_3/configureDevice_3.js +++ b/components/configureDevice_3/configureDevice_3.js @@ -34,7 +34,7 @@ Component({ } activeProtocol.dataFindSurroundDevice((res) => { wx.hideLoading(); - this.setData({ wifiList: res }); + this.setData({ wifiList: Array.isArray(res) ? res : [] }); }); }, diff --git a/components/configureDevice_4/configureDevice_4.js b/components/configureDevice_4/configureDevice_4.js index d978f59..bece7c4 100644 --- a/components/configureDevice_4/configureDevice_4.js +++ b/components/configureDevice_4/configureDevice_4.js @@ -45,6 +45,9 @@ Component({ wx.showLoading({ title: '正在升级...', mask: true }); + // 重置完成标志位,防止超时与回调重复触发 + this._otaCompleted = false; + this.setData({ otaProgress: 0, otaStatus: 'upgrading', @@ -62,6 +65,9 @@ Component({ activeProtocol.codeOtaUpdate((res) => { console.log('OTA 升级回调:', res); + // 已完成(成功或失败)则忽略后续回调 + if (this._otaCompleted) return; + if (res && res.progress !== undefined) { this.setData({ otaProgress: res.progress, @@ -81,6 +87,8 @@ Component({ // OTA 升级成功处理 handleOtaSuccess() { + if (this._otaCompleted) return; + this._otaCompleted = true; wx.hideLoading(); this.setData({ otaProgress: 100, @@ -95,6 +103,8 @@ Component({ // OTA 升级失败处理 handleOtaFailed(msg) { + if (this._otaCompleted) return; + this._otaCompleted = true; wx.hideLoading(); const message = msg || '升级失败,设备即将重启'; this.setData({ diff --git a/pages/replaceNetwork/replaceNetwork.js b/pages/replaceNetwork/replaceNetwork.js index 40aae41..cac3ec9 100644 --- a/pages/replaceNetwork/replaceNetwork.js +++ b/pages/replaceNetwork/replaceNetwork.js @@ -15,9 +15,25 @@ Page({ } }, - // 存储回调函数的引用,以便在 detached 时取消监听 + // 存储回调函数的引用,以便在 onUnload 时取消监听 _connectStateWatcher: null, + // 存储页面级 bus 回调引用,用于精准 unsubscribe + _pageHandlers: { + devicesModel: null, + deviceConnect: null, + devicesList: null, + }, + + // 注销页面级 bus 订阅 + _unsubscribePageBus() { + const bus = app.globalData.ppScale.plugin.bus; + const h = this._pageHandlers; + if (h.devicesModel) { bus.unsubscribe('devicesModel', h.devicesModel); h.devicesModel = null; } + if (h.deviceConnect) { bus.unsubscribe('deviceConnect', h.deviceConnect); h.deviceConnect = null; } + if (h.devicesList) { bus.unsubscribe('devicesList', h.devicesList); h.devicesList = null; } + }, + onLoad(options) { // 一次性数据初始化 this.checkBluetoothPermissionAndInit(); @@ -43,13 +59,16 @@ Page({ // 重新注册 app 级别的全局 bus 订阅 app.registerBusListeners(); - // 页面级 bus 订阅 - app.globalData.ppScale.plugin.bus.subscribe("devicesModel", (res) => { + // 页面级 bus 订阅(先清理旧的,防止重复叠加) + this._unsubscribePageBus(); + + this._pageHandlers.devicesModel = (res) => { console.log("replaceNetwork ===》devicesModel", res); app.globalData.ppScale.device.mac = res.deviceMac; - }); + }; + app.globalData.ppScale.plugin.bus.subscribe("devicesModel", this._pageHandlers.devicesModel); - app.globalData.ppScale.plugin.bus.subscribe("deviceConnect", (res) => { + this._pageHandlers.deviceConnect = (res) => { console.log('replaceNetwork ===》deviceConnect', res); app.globalData.ppScale.plugin.ScaleAction.startDataProgress(true); @@ -73,7 +92,8 @@ Page({ } } }); - }); + }; + app.globalData.ppScale.plugin.bus.subscribe("deviceConnect", this._pageHandlers.deviceConnect); // 通过完整链路重新初始化蓝牙(权限检查 → 打开蓝牙 → 获取设备 → start) this.checkBluetoothPermissionAndInit(); @@ -203,13 +223,13 @@ Page({ }); app.globalData.ppScale.plugin.Blue.setDeviceSetting([seviceList]); app.globalData.ppScale.plugin.Blue.start(res.result[0].type, false); - app.globalData.ppScale.plugin.bus.subscribe("devicesList", (res_) => { + this._pageHandlers.devicesList = (res_) => { console.log("searchDevice ===> devicesList", res_); - + let fIndex = res_.findIndex(item => item.deviceId === res.result[0].deviceId); if (fIndex >= 0) { app.globalData.ppScale.plugin.Blue.stopBluetoothDevicesDiscovery(); - wx.showLoading({ + wx.showLoading({ title: "正在连接设备...", mask: true }); @@ -218,7 +238,8 @@ Page({ }) app.globalData.ppScale.plugin.Blue.createBLEConnection(res_[fIndex]); } - }); + }; + app.globalData.ppScale.plugin.bus.subscribe("devicesList", this._pageHandlers.devicesList); }) }, @@ -298,6 +319,8 @@ Page({ onHide() { console.log("replaceNetwork onHide"); this._stopKeepAlive(); + this._unsubscribePageBus(); + app.unregisterBusListeners(); app.resetReconnectCount(); app.setGlobalData('ppScale.device.connectState', null); app.globalData.ppScale.plugin.Blue.stop(); @@ -307,6 +330,8 @@ Page({ onUnload() { console.log("replaceNetwork onUnload"); this._stopKeepAlive(); + this._unsubscribePageBus(); + app.unregisterBusListeners(); app.resetReconnectCount(); app.setGlobalData('ppScale.device.connectState', null); app.globalData.ppScale.plugin.Blue.stop(); diff --git a/pages/searchDevice/searchDevice.js b/pages/searchDevice/searchDevice.js index 178e00f..b3bd417 100644 --- a/pages/searchDevice/searchDevice.js +++ b/pages/searchDevice/searchDevice.js @@ -47,10 +47,11 @@ Page({ if (scopeToRequest.length > 0) { try { - await wx.authorize({ - scope: scopeToRequest[0] - }); - this.checkBluetoothPermissionAndInit(); + // 逐个授权所有缺失的权限 + for (const scope of scopeToRequest) { + await wx.authorize({ scope }); + } + this.openBluetoothAdapter(); } catch (authErr) { if (this.data.isShowingModal) { return;