fix: correct region mapping (swap left/right, swap middle/bottom) and auto-scan proceeds on timeout

Region name mapping corrected to match actual hardware IO positions:
- 0x01: 左区→右区, 0x02: 右区→左区
- 0x08: 下区→中区, 0x10: 中区→下区
Auto-scan no longer shows timeout error, proceeds to next step instead.
这个提交包含在:
Guoguo
2026-06-05 23:37:03 -07:00
父节点 4666050458
当前提交 44935c4bf3
修改 6 个文件,包含 16 行新增15 行删除
+2 -2
查看文件
@@ -73,7 +73,7 @@ import { exportCSV } from '../utils/export'
import { formatDate as formatDateUtil } from '../utils/format' import { formatDate as formatDateUtil } from '../utils/format'
var REGION_MAP = { var REGION_MAP = {
1: '区', 2: '区', 4: '上区', 8: '区', 16: '区', 32: '左上区', 64: '右上区' 1: '区', 2: '区', 4: '上区', 8: '区', 16: '区', 32: '左上区', 64: '右上区'
} }
export default { export default {
@@ -168,7 +168,7 @@ export default {
async onExport() { async onExport() {
try { try {
const data = await get('/api/v1/admin/records', { page: 1, page_size: 9999, keyword: this.keyword, user_id: this.filterUserId, date_from: this.dateFrom, date_to: this.dateTo }) const data = await get('/api/v1/admin/records', { page: 1, page_size: 9999, keyword: this.keyword, user_id: this.filterUserId, date_from: this.dateFrom, date_to: this.dateTo })
var REGION_MAP = { 1: '区', 2: '区', 4: '上区', 8: '区', 16: '区', 32: '左上区', 64: '右上区' } var REGION_MAP = { 1: '区', 2: '区', 4: '上区', 8: '区', 16: '区', 32: '左上区', 64: '右上区' }
const records = data.records || [] const records = data.records || []
exportCSV('records_' + new Date().toISOString().slice(0, 10) + '.csv', exportCSV('records_' + new Date().toISOString().slice(0, 10) + '.csv',
['记录ID', '用户', '设备编号', '使用模式', '使用区域', '使用时长(分钟)', '使用时间'], ['记录ID', '用户', '设备编号', '使用模式', '使用区域', '使用时长(分钟)', '使用时间'],
+3 -2
查看文件
@@ -54,8 +54,9 @@ Page({
setTimeout(function () { setTimeout(function () {
clearInterval(self._progressTimer) clearInterval(self._progressTimer)
if (!self.data.scanning) return if (!self.data.scanning) return
self.setData({ scanning: false, timeout: true }) self.setData({ scanning: false, scanProgress: 100 })
wx.showToast({ title: '扫描超时,请重试', icon: 'none' }) var names = ble.getRegionName(self.data.regions || 0x7F)
self.setData({ regionData: self.parseScanResults(names) })
}, 5000) }, 5000)
}, },
+1 -1
查看文件
@@ -20,7 +20,7 @@ Page({
}, },
_getRegionText: function (regionMask) { _getRegionText: function (regionMask) {
var REGION_MAP = {1:'区', 2:'区', 4:'上区', 8:'区', 16:'区', 32:'左上区', 64:'右上区'} var REGION_MAP = {1:'区', 2:'区', 4:'上区', 8:'区', 16:'区', 32:'左上区', 64:'右上区'}
if (regionMask === 0x7F) return '全区域' if (regionMask === 0x7F) return '全区域'
var names = [] var names = []
for (var bit in REGION_MAP) { for (var bit in REGION_MAP) {
@@ -3,11 +3,11 @@ Page({
data: { data: {
statusBarHeight: 44, statusBarHeight: 44,
regions: [ regions: [
{ name: '区', mask: 0x01, checked: true }, { name: '区', mask: 0x01, checked: true },
{ name: '区', mask: 0x02, checked: true }, { name: '区', mask: 0x02, checked: true },
{ name: '上区', mask: 0x04, checked: true }, { name: '上区', mask: 0x04, checked: true },
{ name: '区', mask: 0x08, checked: true }, { name: '区', mask: 0x08, checked: true },
{ name: '区', mask: 0x10, checked: true } { name: '区', mask: 0x10, checked: true }
], ],
selectedMode: 0, selectedMode: 0,
subExpired: false, subExpired: false,
@@ -27,10 +27,10 @@
<view class="face-map"> <view class="face-map">
<view class="face-region forehead {{regions[2].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="2">上区</view> <view class="face-region forehead {{regions[2].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="2">上区</view>
<view class="face-region left-cheek {{regions[0].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="0">左区</view> <view class="face-region left-cheek {{regions[1].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="1">左区</view>
<view class="face-region right-cheek {{regions[1].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="1">右区</view> <view class="face-region right-cheek {{regions[0].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="0">右区</view>
<view class="face-region nose {{regions[4].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="4">中区</view> <view class="face-region nose {{regions[3].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="3">中区</view>
<view class="face-region chin {{regions[3].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="3">下区</view> <view class="face-region chin {{regions[4].checked ? 'active' : ''}} {{selectedMode === 0 ? 'disabled' : ''}}" bindtap="onToggleRegion" data-idx="4">下区</view>
</view> </view>
<button class="btn-primary" bindtap="onStart" disabled="{{submitting}}" loading="{{submitting}}"> <button class="btn-primary" bindtap="onStart" disabled="{{submitting}}" loading="{{submitting}}">
+2 -2
查看文件
@@ -312,8 +312,8 @@ function parseException(payload) {
function getRegionName(mask) { function getRegionName(mask) {
var names = [] var names = []
var bits = [ var bits = [
[0x01, '区'], [0x02, '区'], [0x04, '上区'], [0x01, '区'], [0x02, '区'], [0x04, '上区'],
[0x08, '区'], [0x10, '区'], [0x20, '左上区'], [0x40, '右上区'] [0x08, '区'], [0x10, '区'], [0x20, '左上区'], [0x40, '右上区']
] ]
for (var i = 0; i < bits.length; i++) { for (var i = 0; i < bits.length; i++) {
if (mask & bits[i][0]) names.push(bits[i][1]) if (mask & bits[i][0]) names.push(bits[i][1])