var ble = require('../../services/ble') var i18n = require('../../i18n/index') Page({ data: { statusBarHeight: 44, regions: [ { name: '', mask: 0x01, checked: true }, { name: '', mask: 0x02, checked: true }, { name: '', mask: 0x04, checked: true }, { name: '', mask: 0x08, checked: true }, { name: '', mask: 0x10, checked: true } ], selectedMode: 0, subExpired: false, subDays: 6, fixedDurationMs: 600000, submitting: false, error: '' }, onBack: function () { wx.navigateBack({ fail: function () { wx.reLaunch({ url: '/pages/index/index' }) } }) }, onManual: function () { wx.navigateTo({ url: '/pages/manual-treatment/manual-treatment' }) }, onLoad: function () { var app = getApp() this.setData({ statusBarHeight: app.globalData.statusBarHeight }) i18n.bind(this) // 顺序对应 data.regions 掩码 0x01..0x10 = IO1..IO5 = 右/左/上/中/下(实测) var regionKeys = ['right', 'left', 'top', 'middle', 'bottom'] var regions = this.data.regions regions.forEach(function (r, i) { r.name = i18n.t('common.regions.' + regionKeys[i]) }) this.setData({ regions: regions, subDaysText: i18n.t('setup.remainDays', { days: this.data.subDays }) }) this.checkSubscription() }, checkSubscription: function () { var http = require('../../utils/request') var self = this http.get('/api/v1/subscription').then(function (sub) { self.setData({ subExpired: sub.status !== 'active', subDays: sub.remaining_days || 0, subDaysText: i18n.t('setup.remainDays', { days: sub.remaining_days || 0 }) }) }).catch(function () {}) }, onToggleRegion: function (e) { if (this.data.selectedMode === 0) return var idx = e.currentTarget.dataset.idx var regions = this.data.regions regions[idx].checked = !regions[idx].checked this.setData({ regions: regions }) }, onSelectMode: function (e) { var mode = parseInt(e.currentTarget.dataset.value) if (mode === 1 && this.data.subExpired) { wx.navigateTo({ url: '/pages/subscribe-prompt/subscribe-prompt' }) return } var data = { selectedMode: mode } if (mode === 0) { var regions = this.data.regions regions.forEach(function (r) { r.checked = true }) data.regions = regions } this.setData(data) }, onStart: function () { var self = this var mask = 0 self.data.regions.forEach(function (r) { if (r.checked) mask |= r.mask }) if (mask === 0) { wx.showToast({ title: i18n.t('setup.noRegion'), icon: 'none' }) return } self.setData({ submitting: true, error: '' }) if (self.data.selectedMode === 1) { self.setData({ submitting: false }) wx.navigateTo({ url: '/pages/auto-scan/auto-scan?regions=' + mask }) return } ble.setParams({ region_mask: mask, wavelength: 2, brightness: 204, // 治疗亮度统一 80%(果果 2026-07-28 定案) duration_ms: self.data.fixedDurationMs, mode: self.data.selectedMode, control: 0x02 }).then(function () { return ble.startTreatment(mask) }).then(function () { self.setData({ submitting: false }) wx.redirectTo({ url: '/pages/treating/treating?regions=' + mask + '&wavelength=2' + '&duration=' + self.data.fixedDurationMs + '&mode=' + self.data.selectedMode }) }).catch(function (err) { self.setData({ submitting: false, error: err.error_msg || i18n.t('setup.startFailed') }) }) }, })