diff --git a/src/eventBus.ts b/src/eventBus.ts
index 8686e60..4fbfc65 100644
--- a/src/eventBus.ts
+++ b/src/eventBus.ts
@@ -17,8 +17,7 @@ export type ErrorModalData = {
export type ConsumeType = 'Plate' | 'LittleBuf' | 'BigBuf' | 'Tip'
type Events = {
initDevice: void,
- AppTubeSettingUpdateEvent: void,
- confirm: { type: ConsumeType; value: number; index: number }
+ socketClosed: number,
'show-error-modal': ErrorModalData
'show-stack-modal': ErrorModalData['stackInfo'] | null | undefined
}
diff --git a/src/pages/Index/Index.vue b/src/pages/Index/Index.vue
index 7201785..67daf05 100644
--- a/src/pages/Index/Index.vue
+++ b/src/pages/Index/Index.vue
@@ -232,8 +232,8 @@
@@ -252,13 +252,13 @@
([]);
@@ -361,7 +365,11 @@ const settingTubeStore = useSettingTestTubeStore()
const tubeRackStore = useTestTubeStore()
const emergencyStore = useEmergencyStore()
-const failMessage = ref('') // 存储动态生成的错误信息
+const failMessage = ref({
+ title: '检测失败',
+ message: '',
+}) // 存储动态生成的错误信息
+
const idCardInserted = ref(false) // id卡插入状态
//事件状态
const EventText = ref('闲置...')
@@ -407,6 +415,27 @@ const onConfirmReport = async () => {
}
}
+const handleSocketClose = (num: number) => {
+ if (num === 0) {
+ // 提示用户,连接断开,正尝试重新连接
+ deviceWaitingModelInfo.value = {
+ title: '连接断开,正在尝试重新连接',
+ message: '请不要有任何手动操作!',
+ }
+ showDeviceWaitingModal.value = true
+ } else if (num === 5) {
+ // 重试达到最大次数,重试,取消。
+ failMessage.value = {
+ title: '恢复连接失败',
+ message: '未能恢复连接,建议重启设备',
+ }
+ showFailModal.value = true
+ } else if (num === -1) {
+ // 从断开 到 恢复连接, 关闭弹框
+ showDeviceWaitingModal.value = false
+ }
+}
+
// 处理应用事件消息
const handleAppEvent = (data: AppEventMessage['data']) => {
console.log('🚀 ~ handleAppEvent ~ data:', data)
@@ -436,6 +465,15 @@ const onLogout = () => {
})
}
+const confirmFail = async () => {
+ showFailModal.value = false
+ if (failMessage.value.title.match('连接失败')) {
+ wsEvent.connect()
+ wsState.connect()
+ } else {
+ await startInit()
+ }
+}
//确认错误事件
const confirmError = async () => {
showErrorModal.value = false
@@ -514,6 +552,7 @@ const getBloodTypeList = async () => {
}
onMounted(() => {
eventBus.on('initDevice', showInitDeviceAlert)
+ eventBus.on('socketClosed', handleSocketClose)
wsEvent.subscribe('AppEvent', handleAppEvent)
wsEvent.connect()
@@ -570,6 +609,10 @@ onMounted(() => {
// };
const untilDeviceReady = async () => {
+ deviceWaitingModelInfo.value = {
+ title: '设备正在响应中',
+ message: '请不要有任何手动操作!',
+ }
showDeviceWaitingModal.value = true
const res = await getDeviceWorkState()
if (res.ecode === 'SUC') {
@@ -591,6 +634,10 @@ const startTest = async () => {
return
}
try {
+ deviceWaitingModelInfo.value = {
+ title: '设备正在响应中',
+ message: '请不要有任何手动操作!',
+ }
showDeviceWaitingModal.value = true
const res = await startWork()
showDeviceWaitingModal.value = false
@@ -606,6 +653,10 @@ const startTest = async () => {
// 暂停测试
const pauseTest = async () => {
+ deviceWaitingModelInfo.value = {
+ title: '设备正在响应中',
+ message: '请不要有任何手动操作!',
+ }
showDeviceWaitingModal.value = true
const res = await pauseWork()
showDeviceWaitingModal.value = false
@@ -618,6 +669,10 @@ const pauseTest = async () => {
// 停止测试时清除标记
const stopTest = async () => {
+ deviceWaitingModelInfo.value = {
+ title: '设备正在响应中',
+ message: '请不要有任何手动操作!',
+ }
showDeviceWaitingModal.value = true
const res = await stopWork()
showDeviceWaitingModal.value = false
@@ -629,6 +684,10 @@ const stopTest = async () => {
}
//继续测试
const continueTest = async () => {
+ deviceWaitingModelInfo.value = {
+ title: '设备正在响应中',
+ message: '请不要有任何手动操作!',
+ }
showDeviceWaitingModal.value = true
const res = await continueWork()
showDeviceWaitingModal.value = false
@@ -662,10 +721,13 @@ const pollingInitState = async () => {
showAlreadyModal.value = true
} else {
const infos = res.data.promopt.detailInfos
- failMessage.value =
- infos && infos.length > 0
- ? infos.map((d: any) => d.name).join('\n')
- : res.data.promopt.info
+ failMessage.value = {
+ title: '检测失败',
+ message:
+ infos && infos.length > 0
+ ? infos.map((d: any) => d.name).join('\n')
+ : res.data.promopt.info,
+ }
showFailModal.value = true // 显示失败弹窗
}
}
diff --git a/src/pages/Index/TestTube/TubeUserId.vue b/src/pages/Index/TestTube/TubeUserId.vue
index 87165d0..aa241c0 100644
--- a/src/pages/Index/TestTube/TubeUserId.vue
+++ b/src/pages/Index/TestTube/TubeUserId.vue
@@ -89,7 +89,6 @@ import { ref } from 'vue'
import { useRouter } from 'vue-router'
import * as R from 'ramda'
import { useTestTubeStore } from '../../../store'
-import { eventBus } from '../../../eventBus'
import SimpleKeyboard from '../../../components/SimpleKeyboard.vue'
import Tube from '../components/TestTube/Tube.vue'
import { updateTubeConfig } from '../../../services'
@@ -141,7 +140,6 @@ const confirmChange = async () => {
})
if (res.success) {
tubeStore.tubeRack.tubeSettings = settings
- eventBus.emit('AppTubeSettingUpdateEvent');
goBack()
} else {
eMessage.error('更新失败')
diff --git a/src/websocket/socket.ts b/src/websocket/socket.ts
index 804a4c5..2c2ab90 100644
--- a/src/websocket/socket.ts
+++ b/src/websocket/socket.ts
@@ -1,4 +1,7 @@
// src/websocket/socket.ts
+
+import { eventBus } from "@/eventBus"
+
// 基础消息接口
interface BaseMessage {
messageType: 'Report' // 消息类型
@@ -352,7 +355,7 @@ type MessageHandler = (data: T['data']) => void
class WebSocketClient {
private ws: WebSocket | null = null
private url: string
- private reconnectAttempts: number = 0
+ private reconnectAttempts: number = -1
private maxReconnectAttempts: number = 5
private reconnectInterval: number = 3000
@@ -432,8 +435,13 @@ class WebSocketClient {
// 连接建立时的处理
this.ws.onopen = () => {
+ if (this.reconnectAttempts !== -1) {
+ // 从断开连接 进入 恢复连接
+ this.reconnectAttempts = -1
+ eventBus.emit('socketClosed', -1)
+ }
console.log('WebSocket 连接已建立')
- this.reconnectAttempts = 0 // 重置重连次数
+ this.reconnectAttempts = -1 // 重置重连次数
}
// 接收消息的处理
@@ -450,6 +458,7 @@ class WebSocketClient {
// 连接关闭时的处理
this.ws.onclose = () => {
console.log('WebSocket 连接已关闭')
+ eventBus.emit('socketClosed', 0)
this.reconnect()
}
@@ -461,8 +470,13 @@ class WebSocketClient {
// 重连机制
private reconnect(): void {
+ if (this.reconnectAttempts === -1) {
+ this.reconnectAttempts = 0
+ }
if (this.reconnectAttempts >= this.maxReconnectAttempts) {
+ eventBus.emit('socketClosed', this.maxReconnectAttempts)
console.log('达到最大重连次数,停止重连')
+ this.reconnectAttempts = -1
return
}