var ble = require('../../services/ble') var api = require('../../utils/api') var i18n = require('../../i18n/index') var app = getApp() Page({ data: { connected: false, deviceName: '', battery: 0, subscription: null, subRemaining: 0, modeState: '空闲', bleState: 'disconnected', hasDevice: false, deviceInfo: null, loading: true }, onShow: function () { i18n.bind(this) this.checkState() this._onStatus = this.onBleStatus.bind(this) this._onBattery = this.onBleBattery.bind(this) ble.on('status', this._onStatus) ble.on('battery', this._onBattery) }, _cleanup: function () { if (this._onStatus) { ble.off('status', this._onStatus) this._onStatus = null } if (this._onBattery) { ble.off('battery', this._onBattery) this._onBattery = null } }, onHide: function () { this._cleanup() }, onUnload: function () { this._cleanup() }, checkState: function () { var self = this var token = wx.getStorageSync('token') if (!token) { wx.reLaunch({ url: '/pages/login/login' }) return } var isFirstLoad = self.data.loading self.setData({ connected: ble.isConnected() }) var p1 = api.getDevices().then(function (data) { var devices = data.devices || [] self.setData({ hasDevice: devices.length > 0 }) if (devices.length > 0) { app.globalData.currentDevice = devices[0] self.setData({ deviceName: devices[0].device_name || devices[0].device_id || '我的设备', deviceInfo: devices[0] }) } }).catch(function (err) { console.error('getDevices failed', err) }) var p2 = api.getSubscription().then(function (sub) { var remaining = sub.remaining_days || 0 self.setData({ subscription: sub, subRemaining: remaining, subRemainText: i18n.t('home.smartRemain', { days: remaining }) }) }).catch(function (err) { console.error('getSubscription failed', err) }) Promise.all([p1, p2]).then(function () { if (isFirstLoad) self.setData({ loading: false }) }) }, onBleStatus: function (status) { this.setData({ battery: status.battery || 0, modeState: ble.getModeStateName(status.mode_state), connected: true, bleState: 'connected' }) }, onBleBattery: function (info) { this.setData({ battery: info.battery, connected: true }) }, onConnectBle: function () { var self = this self.setData({ bleState: 'scanning' }) ble.startScan({ onFound: function () { self.setData({ bleState: 'connecting' }) }, onConnected: function () { self.setData({ connected: true, bleState: 'connected' }) ble.queryStatus().catch(function (err) { console.error('queryStatus failed', err) }) }, onError: function (err) { self.setData({ connected: false, bleState: 'error' }) wx.showToast({ title: err.msg || i18n.t('home.connectFailed'), icon: 'none' }) } }) }, onAddDevice: function () { wx.navigateTo({ url: '/pages/scan/scan' }) }, onManageDevice: function () { var self = this wx.showActionSheet({ itemList: [i18n.t('home.unbindAction')], success: function (res) { if (res.tapIndex === 0) { wx.showModal({ title: i18n.t('home.unbindConfirmTitle'), content: i18n.t('home.unbindConfirmText'), success: function (modalRes) { if (modalRes.confirm) { self.doUnbind() } } }) } } }) }, doUnbind: function () { var self = this wx.showLoading({ title: i18n.t('home.unbindLoading') }) ble.disconnect() api.unbindDevice().then(function () { wx.hideLoading() self.setData({ hasDevice: false, deviceName: '', deviceInfo: null, connected: false }) wx.showToast({ title: i18n.t('home.unbindDone'), icon: 'success' }) }).catch(function (err) { wx.hideLoading() wx.showToast({ title: err.message || i18n.t('home.unbindFailed'), icon: 'none' }) }) }, onStartTreatment: function () { if (!this.data.subscription || this.data.subscription.status !== 'active') { wx.navigateTo({ url: '/pages/subscribe-prompt/subscribe-prompt' }) return } wx.navigateTo({ url: '/pages/wear-check/wear-check' }) }, onViewSubscription: function () { wx.navigateTo({ url: '/pages/subscribe-plans/subscribe-plans' }) } })