Browse Source

监听试管更新事件

feature/user-0111
zhangjiming 7 months ago
parent
commit
2a0b0f814c
  1. 4
      src/eventBus.ts
  2. 34
      src/pages/Index/Index.vue
  3. 33
      src/pages/Index/Regular/TestTube.vue
  4. 2
      src/pages/Index/TestTube/TubeUserId.vue
  5. 5
      src/pages/Index/components/TestTube/TestTubeRack.vue
  6. 2
      src/pages/Index/components/TestTube/Tube.vue

4
src/eventBus.ts

@ -16,11 +16,11 @@ export type ErrorModalData = {
export type ConsumeType = 'Plate' | 'LittleBuf' | 'BigBuf' | 'Tip'
type Events = {
initDevice: void
initDevice: void,
AppTubeSettingUpdateEvent: void,
confirm: { type: ConsumeType; value: number; index: number }
'show-error-modal': ErrorModalData
'show-stack-modal': ErrorModalData['stackInfo'] | null | undefined
// 其他事件类型
}
export const eventBus = mitt<Events>()

34
src/pages/Index/Index.vue

@ -102,8 +102,9 @@ const failItems = ref<CheckItem[]>([]);
const consumableStore = useConsumablesStore();
//
const user = ref<User>(JSON.parse(sessionStorage.getItem('token') || '{}') as unknown as User)
const isTesting = ref(false); //
const isPaused = ref(false); //
const isTesting = ref(false); //
const isPaused = ref(false); //
const username = ref<string>(user.value.account)
const failMessage = ref(''); //
const idCardInserted = ref(false) // id
@ -145,6 +146,7 @@ const handleAppEvent = (data: AppEventMessage['data']) => {
EventText.value = "id卡已拔出"
} else if (data.typeName === 'AppTubeholderSettingUpdateEvent') {
EventText.value = "试管架配置更新"
eventBus.emit('AppTubeSettingUpdateEvent');
} else if (data.typeName === "DoA8kStepActionEvent") {
EventText.value = data.actionStepName!
} else {
@ -194,6 +196,11 @@ const generateErrorMessages = (data: CheckItem[]): string[] => {
//
const startTest = async () => {
const res = await getInitState()
if (res.ecode === 'SUC' && !res.data.deviceInited) {
eventBus.emit('initDevice')
return
}
try {
const res = await startWork();
if (res.success) {
@ -203,12 +210,6 @@ const startTest = async () => {
console.error('开始测试失败:', error);
isTesting.value = false;
}
const isCheck = sessionStorage.getItem('testStarted');
if (!isCheck) {
isTesting.value = false;
await startInit()
}
};
//
@ -238,7 +239,6 @@ const continueTest = async () => {
};
const handleConfirm = async () => {
showModal.value = false; //
await startInit()
};
@ -257,7 +257,7 @@ const pollingInitState = async () => {
showLoadingModal.value = false;
if (res.data.passed) {
console.log("初始化成功")
// sessionStorage.setItem('testStarted', "true");
sessionStorage.setItem('deviceResetFinished', "true");
showAlreadyModal.value = true;
}
else {
@ -269,7 +269,6 @@ const pollingInitState = async () => {
}
}
// const checkIfResetCompleted = async () => {
// if (showFailModal.value) {
// showFailModal.value = false;
@ -283,7 +282,7 @@ const pollingInitState = async () => {
// //
// if (initState.data.passed) {
// console.log("")
// sessionStorage.setItem('testStarted', "true");
// sessionStorage.setItem('deviceResetFinished', "true");
// showLoadingModal.value = false;
// showAlreadyModal.value = true;
// } else {
@ -301,7 +300,7 @@ const pollingInitState = async () => {
// console.log("")
// showLoadingModal.value = false; // LoadingModal
// showAlreadyModal.value = true; //
// sessionStorage.setItem('testStarted', "true");
// sessionStorage.setItem('deviceResetFinished', "true");
// }
// }
// }
@ -323,14 +322,13 @@ const handleAlreadyConfirm = () => {
};
onMounted(() => {
openTest();
checkInit();
});
//
const openTest = () => {
const hasExecuted = sessionStorage.getItem('testStarted');
// openTest
if (!hasExecuted) {
const checkInit = () => {
const hasExecutedReset = sessionStorage.getItem('deviceResetFinished');
if (hasExecutedReset === "false") {
showModal.value = true;
}
};

33
src/pages/Index/Regular/TestTube.vue

@ -64,7 +64,7 @@
</template>
<script setup>
import { ref, onMounted, nextTick, computed, onActivated } from 'vue'
import { ref, onMounted, onBeforeUnmount, nextTick, computed, onActivated } from 'vue'
import * as R from 'ramda'
import { useRouter } from 'vue-router'
import TestTubeRack from '../Components/TestTube/TestTubeRack.vue'
@ -76,8 +76,7 @@ import {
getBloodTypes,
updateTubeActivationStatus,
} from '../../../services/Index/testTube'
// import type { DataItem, TubeSetting } from '../../../types/Index/index'
// import { ConsumableGroupBase } from '../../../websocket/socket'
import { eventBus } from '../../../eventBus';
import {
useConsumablesStore,
useTestTubeStore,
@ -88,7 +87,7 @@ import { ElMessage } from 'element-plus'
const router = useRouter()
const testTubeStore = useTestTubeStore()
// const settingTestTubeStore = useSettingTestTubeStore()
const consumables = useConsumablesStore()
const tubeRacks = ref([]) //<DataItem[]>
@ -98,19 +97,19 @@ const loading = ref(false) // 控制加载状态
const selectedProjIds = ref([]) // number[]
const selectedBloodTypeKey = ref('WHOLE_BLOOD')
//
const onTubeSettingUpdate = () => {
getTubeData()
}
onMounted(() => {
eventBus.on('AppTubeSettingUpdateEvent', onTubeSettingUpdate)
getTubeData()
getBloodTypeData()
})
onBeforeUnmount(() => {
eventBus.off('AppTubeSettingUpdateEvent', onTubeSettingUpdate)
});
onActivated(() => {
// console.log('TestTube activated')
})
const onClickTubeItem = (rackIdx, tubeIdx) => {
console.log(rackIdx, tubeIdx)
}
const isProjElemActive = (proj) => {
return selectedProjIds.value.includes(proj.projId)
}
@ -208,13 +207,21 @@ const getBloodTypeData = async () => {
}
}
const mockData = (data) => {
// if (data.length > 0) {
// data[0].tubeSettings.splice(0, 2)
// }
return data
}
//
const getTubeData = async () => {
loading.value = true
const res = await getTestTube()
if (res.success) {
tubeRacks.value = res.data
tubeRacks.value = mockData(res.data)
console.log(tubeRacks.value)
} else {
ElMessage({

2
src/pages/Index/TestTube/TubeUserId.vue

@ -91,6 +91,7 @@ import { computed, onActivated, ref, watch } from 'vue'
import { useRouter } from 'vue-router'
import * as R from 'ramda'
import { useTestTubeStore, useConsumablesStore } from '../../../store'
import { eventBus } from '../../../eventBus'
import SimpleKeyboard from '../../../components/SimpleKeyboard.vue'
import Tube from '../Components/TestTube/Tube.vue'
import { updateTubeConfig } from '../../../services'
@ -159,6 +160,7 @@ const confirmChange = async () => {
})
if (res.success) {
tubeStore.tubeRack.tubeSettings = settings
eventBus.emit('AppTubeSettingUpdateEvent');
goBack()
} else {
ElMessage.error('更新失败')

5
src/pages/Index/components/TestTube/TestTubeRack.vue

@ -64,7 +64,7 @@ const onClickTubeItem = (idx) => {
}
.tube-rack-state {
align-self: stretch;
width: 100px;
width: 90px;
display: flex;
align-items: center;
justify-content: center;
@ -83,7 +83,8 @@ const onClickTubeItem = (idx) => {
.tube-list {
flex: 1 1 auto;
display: flex;
justify-content: space-around;
justify-content: start;
column-gap: 16px;
}
}
@op-bar-height: 68px;

2
src/pages/Index/components/TestTube/Tube.vue

@ -1,6 +1,6 @@
<template>
<div class="tube-item" @click="$emit('clickTubeItem', index)">
<span v-if="!!showNum" class="order">{{ index + 1 }}</span>
<span v-if="!!showNum" class="order">{{ tube.tubeIndex + 1 }}</span>
<div class="tube-circle" v-if="tube.projId.length === 0">
<span class="add-symbol">+</span>
</div>

Loading…
Cancel
Save