소스 검색

Merge branch 'refs/heads/dev' into jiapu_aijiuyi

jiapu 3 달 전
부모
커밋
4fa0640225

+ 2 - 2
code/ajyApp/pages/device/detail/detail.nvue

@@ -13,8 +13,8 @@
 			<view class="connect-status">
 				<view class="status-dot" :style="{backgroundColor: connected ? '#389588' : '#CCCCCC'}"></view>
 				<text class="status-text">{{connected ? '已连接' : '未连接'}}</text>
-				<text class="connect-btn" v-if="!connected && !connecting" @click="connectDevice">连接设备</text>
-				<text class="connect-btn" v-if="connecting">连接中...</text>
+			<!-- 	<text class="connect-btn" v-if="!connected && !connecting" @click="connectDevice">连接设备</text>
+				<text class="connect-btn" v-if="connecting">连接中...</text> -->
 			</view>
 
 			<text class="txt">通用设置</text>

+ 2 - 2
code/ajyApp/pages/device/deviceInfo/deviceInfo.nvue

@@ -231,7 +231,7 @@
 					</view>
 				</view>
 				<view class="modeItem" @click="changeMode(3)">
-					<text class="modeItemTxt">专家模式</text>
+					<text class="modeItemTxt">延年圣手模式</text>
 					<view class="checkboxCustom">
 						<view v-if="modeType == 3" class="checkboxCircle"></view>
 					</view>
@@ -339,7 +339,7 @@ export default {
 			deviceName: '',
 			rssi: '',
 			isShowDrawer2: false,
-			modelist: ['无艾灸模式', '专业模式', '自定义模式', '专家模式'],
+			modelist: ['无艾灸模式', '专业模式', '自定义模式', '延年圣手模式'],
 			currentUserName: ''
 		}
 	},

+ 5 - 1
code/ajyApp/pages/device/search/search.nvue

@@ -61,7 +61,8 @@ export default {
 	},
 	data() {
 		return {
-			statusBarHeight: 44
+			statusBarHeight: 44,
+			btModalShowing: false
 		}
 	},
 	computed: {
@@ -110,12 +111,15 @@ export default {
 						}
 					})
 				} else if (msg === 'BLE_ADAPTER_OFF' || msg === 'BLE_ADAPTER_OFF') {
+					if (this.btModalShowing) return
+					this.btModalShowing = true
 					uni.showModal({
 						title: '蓝牙未开启',
 						content: '请先开启手机蓝牙,才能搜索和连接艾灸椅设备',
 						confirmText: '去设置',
 						cancelText: '取消',
 						success: r => {
+							this.btModalShowing = false
 							if (r.confirm) openBluetoothSettings()
 						}
 					})

+ 22 - 6
code/ajyApp/stores/ble.js

@@ -51,6 +51,7 @@ function _getShared() {
 			onDeviceFound: null,     // 当前扫描的设备发现回调
 			scanStartHistory: [],    // 近期 startDiscovery 调用时间戳,用于检测 Android 限流
 			intentionalDisconnect: false, // 标记主动断开,防止系统回调误触发重连
+			_connectedBeforeScan: false, // 标记扫描前是否处于已连接状态
 			parser: null,
 			config: { ...DEFAULT_CONFIG }
 		}
@@ -137,10 +138,23 @@ export const useBleStore = defineStore('ble', {
 		// ============== 内部状态管理 ==============
 		_setState(s) {
 			if (this.bleState === s) return
+			const prevState = this.bleState
 			this.bleState = s
-			this.linked = (s === BLE_STATE.READY_COMM)
+			// 进入扫描状态时,如果当前有活跃连接,不应丢失 linked 状态
+			if (s === BLE_STATE.SCANNING && prevState === BLE_STATE.READY_COMM) {
+				_S()._connectedBeforeScan = true
+				// linked 保持 true,仅更新 searching
+			} else if (s === BLE_STATE.READY && _S()._connectedBeforeScan && this.device) {
+				// 扫描结束恢复连接状态:物理连接仍存活
+				_S()._connectedBeforeScan = false
+				this.bleState = BLE_STATE.READY_COMM
+				this.linked = true
+			} else {
+				_S()._connectedBeforeScan = false
+				this.linked = (s === BLE_STATE.READY_COMM)
+			}
 			this.searching = (s === BLE_STATE.SCANNING)
-			logger.info(`[instanceId=${_instanceId()}] state ->`, s)
+			logger.info(`[instanceId=${_instanceId()}] state ->`, s, this.linked ? '(linked)' : '')
 		},
 
 		// ============== 初始化 / 释放 ==============
@@ -398,6 +412,8 @@ export const useBleStore = defineStore('ble', {
 			this.searching = false
 			this.scanThrottled = false
 			if (this.bleState === BLE_STATE.SCANNING) {
+				// _setState(READY) 内部会检测 _connectedBeforeScan,
+				// 若扫描前有连接则自动恢复为 READY_COMM
 				this._setState(BLE_STATE.READY)
 			}
 		},
@@ -761,10 +777,9 @@ export const useBleStore = defineStore('ble', {
 		 */
 		_showBleOffPrompt(message) {
 			const s = _S()
-			// 防抖:5秒内不重复弹窗
-			const now = Date.now()
-			if (s._lastBleOffPromptTime && now - s._lastBleOffPromptTime < 5000) return
-			s._lastBleOffPromptTime = now
+			// 弹窗正在显示中,不重复弹出
+			if (s._bleOffPromptShowing) return
+			s._bleOffPromptShowing = true
 
 			uni.showModal({
 				title: '蓝牙未开启',
@@ -772,6 +787,7 @@ export const useBleStore = defineStore('ble', {
 				confirmText: '去设置',
 				cancelText: '取消',
 				success: (res) => {
+					s._bleOffPromptShowing = false
 					if (res.confirm) {
 						// #ifdef APP-PLUS
 						const platform = uni.getSystemInfoSync().platform