|
|
@ -40,49 +40,46 @@ font-size: 22px; |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
<!-- 光学模组 --> |
|
|
|
<div style=" |
|
|
|
<div |
|
|
|
style=" |
|
|
|
position: fixed; |
|
|
|
top: 650px;right:10px; |
|
|
|
padding: 8px 5px; |
|
|
|
background-color:rgb(223, 237, 248); |
|
|
|
border-radius: 5px; |
|
|
|
"> |
|
|
|
<span style="font-weight: 600;font-size: 18px;display: block;"> |
|
|
|
<span style="font-weight: 600;font-size: 18px;display: block;"> |
|
|
|
光学模组 |
|
|
|
</span> |
|
|
|
<div style="display: flex;"> |
|
|
|
<img src="@/assets/ji.png" alt="" width="20" height="20" style="border-radius: 50%;"> |
|
|
|
|
|
|
|
<span style="display: inline-block; background-color:rgb(120, 206, 86);border-radius:5px;height:100px;padding: 5px;display: flex;flex-direction: column;justify-content: space-around;align-items:center;"> |
|
|
|
<img src="@/assets/men.png" alt="" width="20" height="20" style="border-radius: 50%;"> |
|
|
|
|
|
|
|
<span> |
|
|
|
xxx |
|
|
|
</span> |
|
|
|
<span style=" |
|
|
|
font-size: 14px; |
|
|
|
"> |
|
|
|
xxxx |
|
|
|
</span> |
|
|
|
<span style=" |
|
|
|
font-size: 16px; |
|
|
|
font-weight: 600; |
|
|
|
"> |
|
|
|
xxxxxxx |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
<div v-if="hasEmergencyPosition" style="display: flex;"> |
|
|
|
<img src="@/assets/ji.png" alt="" width="20" height="20" style="border-radius: 50%;"> |
|
|
|
<span style="display: inline-block; background-color:rgb(120, 206, 86);border-radius:5px;height:100px;padding: 5px;display: flex;flex-direction: column;justify-content: space-around;align-items:center;"> |
|
|
|
<img src="@/assets/men.png" alt="" width="20" height="20" style="border-radius: 50%;"> |
|
|
|
<span> |
|
|
|
xxx |
|
|
|
</span> |
|
|
|
<span style="font-size: 14px;">xxxx</span> |
|
|
|
<span style="font-size: 16px;font-weight: 600;">xxxxxxx</span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
<div v-else style="background-color: #ccc; height: 120px;border-radius: 5px;display: flex;justify-content: center;align-items: center;"> |
|
|
|
空闲 |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div v-for="index in 20" :key="index" class="rectangular-item" :style="getRotationStyle(index, index)" > |
|
|
|
{{ |
|
|
|
index+1 |
|
|
|
}} |
|
|
|
<div>空</div> |
|
|
|
</div> |
|
|
|
<!-- 外圈的矩形元素 --> |
|
|
|
<div v-for="(item, index) in incubationPlates" :key="item.sampleId" class="rectangular-item" |
|
|
|
<div v-for="(item, index) in incubationPlates" :key="item.sampleId" class="rectangular-item" |
|
|
|
:style="[getRotationStyle(item, index), getItemStyle(item)]" |
|
|
|
@click="!item.isPlaceholder && toggleSelectItem(item,index)"> |
|
|
|
<template v-if="item.isPlaceholder"> |
|
|
|
<!-- 占位符 --> |
|
|
|
<span class="placeholder-text">空位</span> |
|
|
|
</template> |
|
|
|
<template v-else> |
|
|
|
<!-- 正常数据 --> |
|
|
|
<span v-if="item.state == 'RESERVED'" class=""> |
|
|
|
<img src="@/assets/being booked.png" alt="" width="20" height="20" style="border-radius: 50%;"> |
|
|
|
</span> |
|
|
@ -98,16 +95,19 @@ font-weight: 600; |
|
|
|
<span class="time">{{ getRemainingTime(item) }}</span> |
|
|
|
</template> |
|
|
|
<div v-show="currentIndex == index" :style="`margin-top:${item.pos=='EMERGENCY'?'20px':'50px'}`" class="quan">{{ index +1 }}</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="consumables-container"> |
|
|
|
<!-- 第一行 --> |
|
|
|
<div class="row-first"> |
|
|
|
<!-- 急诊按钮 --> |
|
|
|
<div class="emergency-button" @click="showEmergencyAlert = !showEmergencyAlert"> |
|
|
|
<span>急诊</span> |
|
|
|
</div> |
|
|
|
<div |
|
|
|
class="emergency-button" |
|
|
|
:class="{ disabled: hasEmergencyPosition }" |
|
|
|
@click="!hasEmergencyPosition && (showEmergencyAlert =!showEmergencyAlert)" |
|
|
|
> |
|
|
|
<span>急诊</span> |
|
|
|
</div> |
|
|
|
<!-- 试管架区域 --> |
|
|
|
<div class="test-tube-rack-area"> |
|
|
|
<div class="tube-project-tab"> |
|
|
@ -195,7 +195,7 @@ font-weight: 600; |
|
|
|
import { ref, onMounted, onUnmounted, watch, onActivated, onDeactivated } from 'vue' |
|
|
|
import { useRouter, useRoute } from 'vue-router' |
|
|
|
import { useTestTubeStore, useConsumablesStore } from '../../../store' |
|
|
|
import { getBloodTypeLabel, processTubeSettings } from '../Utils' |
|
|
|
import { getBloodTypeLabel, processTubeSettings } from '../utils' |
|
|
|
import { |
|
|
|
SampleDisplay, |
|
|
|
PlateDisplay, |
|
|
@ -633,7 +633,7 @@ const handleIncubationPlateStateMessage = (data: IncubationPlateStateMessage['da |
|
|
|
startIncubatedTime: 1612347378, |
|
|
|
incubatedTimeSec: 2050, |
|
|
|
errors: [] |
|
|
|
} |
|
|
|
} |
|
|
|
] |
|
|
|
} |
|
|
|
|
|
|
@ -650,11 +650,16 @@ const fetchTubeRackState = async () => { |
|
|
|
console.error('请求试管架状态接口出错:', err) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const hasEmergencyPosition = ref(false) |
|
|
|
// 页面加载时获取试管架状态 |
|
|
|
onMounted(() => { |
|
|
|
fetchTubeRackState() |
|
|
|
setInterval(fetchTubeRackState, 10000) // 每隔指定时间更新状态 |
|
|
|
const route = useRoute() |
|
|
|
const param = route.query.hasEmergencyPosition |
|
|
|
if (param === 'true') { |
|
|
|
hasEmergencyPosition.value = true |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
onMounted(() => { |
|
|
|