|
|
@ -13,7 +13,7 @@ |
|
|
|
<span class="plate-temp-value"> |
|
|
|
<span style="font-size: 22px"> |
|
|
|
{{ deviceStore.sensorState?.incubateBoxTemperature || 0 }} |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
<!-- 光学模组 --> |
|
|
@ -21,9 +21,18 @@ |
|
|
|
<span style="font-weight: 600; font-size: 18px; display: block"> |
|
|
|
光学模组 |
|
|
|
</span> |
|
|
|
<div v-if="runningStore.optScanModuleState && runningStore.optScanModuleState!.state !== 'EMPTY'" class="scan-ji"> |
|
|
|
<div |
|
|
|
v-if=" |
|
|
|
runningStore.optScanModuleState && |
|
|
|
runningStore.optScanModuleState!.state !== 'EMPTY' |
|
|
|
" |
|
|
|
class="scan-ji" |
|
|
|
> |
|
|
|
<!--是急诊位时--> |
|
|
|
<div style="position: absolute;left:0px" v-if="runningStore.optScanModuleState!.isEmergency"> |
|
|
|
<div |
|
|
|
style="position: absolute; left: 0px" |
|
|
|
v-if="runningStore.optScanModuleState!.isEmergency" |
|
|
|
> |
|
|
|
<img |
|
|
|
src="@/assets/ji.png" |
|
|
|
alt="" |
|
|
@ -32,7 +41,10 @@ |
|
|
|
style="border-radius: 50%" |
|
|
|
/> |
|
|
|
</div> |
|
|
|
<span class="scan-men" :style="`background-color:${runningStore.optScanModuleState.projInfo.color}`"> |
|
|
|
<span |
|
|
|
class="scan-men" |
|
|
|
:style="`background-color:${runningStore.optScanModuleState.projInfo.color}`" |
|
|
|
> |
|
|
|
<img |
|
|
|
src="@/assets/men.png" |
|
|
|
alt="" |
|
|
@ -55,7 +67,7 @@ |
|
|
|
</span> |
|
|
|
</div> |
|
|
|
<div v-else class="scan-empty">空闲</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<SubTankItem |
|
|
|
v-for="(item, index) in runningStore.subTanks" |
|
|
|
:item="item" |
|
|
@ -70,30 +82,31 @@ |
|
|
|
<!-- 急诊按钮 --> |
|
|
|
<div |
|
|
|
class="emergency-button" |
|
|
|
:style="`background:${emergencyBackground}`" |
|
|
|
@click="!hasEmergencyPosition ? confirmEmergency():null" |
|
|
|
:style="`background:${emergencyStore.emergencyInfo.isEmergency ? '#c7c7c7' : 'auto'}`" |
|
|
|
@click=" |
|
|
|
!emergencyStore.emergencyInfo.isEmergency |
|
|
|
? confirmEmergency() |
|
|
|
: null |
|
|
|
" |
|
|
|
> |
|
|
|
<span>急诊</span> |
|
|
|
</div> |
|
|
|
<!-- 试管架区域 --> |
|
|
|
<div class="test-tube-rack-area"> |
|
|
|
<div class="tube-project-tab"> |
|
|
|
<tube-item |
|
|
|
:tube="emergencyTube" |
|
|
|
:showNum = "false" |
|
|
|
/> |
|
|
|
<tube-item :tube="emergencyStore.emergencyInfo" :showNum="false" /> |
|
|
|
</div> |
|
|
|
<div class="tube-items"> |
|
|
|
<!-- <SampleDisplay :samples="tubeHolderState.tubes" :selectedSamples="selectedSamples" |
|
|
|
@updateSelectedSamples="updateSelectedSamples" /> --> |
|
|
|
<div class="tube-container"> |
|
|
|
<tube-item |
|
|
|
<tube-item |
|
|
|
v-for="(tube, index) in runningStore.tubeHolderState?.tubes || |
|
|
|
[]" |
|
|
|
:key="index" |
|
|
|
:tube="tube" |
|
|
|
:tube="tube" |
|
|
|
:tubeNo="index + 1" |
|
|
|
/> |
|
|
|
/> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -121,7 +134,7 @@ |
|
|
|
></div> |
|
|
|
<div class="tip-text">{{ consumablesStore.tipCount }}/360</div> |
|
|
|
<span class="label">移液头</span> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<BigBufferDisplay |
|
|
|
:data="consumablesStore.consumableData.larBottleGroup" |
|
|
|
:width="160" |
|
|
@ -134,7 +147,9 @@ |
|
|
|
:class="{ isFull: deviceStore.sensorState.wasteBinFullFlag }" |
|
|
|
> |
|
|
|
<div class="waste-text">废料箱</div> |
|
|
|
<div class="full-state">{{ deviceStore.sensorState.wasteBinFullFlag ? '已满' : '未满' }}</div> |
|
|
|
<div class="full-state"> |
|
|
|
{{ deviceStore.sensorState.wasteBinFullFlag ? '已满' : '未满' }} |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
</div> |
|
|
@ -161,7 +176,7 @@ import { |
|
|
|
useConsumablesStore, |
|
|
|
useDeviceStore, |
|
|
|
useSettingTestTubeStore, |
|
|
|
useEmergencyStore |
|
|
|
useEmergencyStore, |
|
|
|
} from '@/store' |
|
|
|
import TankInfo from '../components/Running/TankInfo.vue' |
|
|
|
import { PlateDisplay, LittleBufferDisplay } from '../components' |
|
|
@ -174,18 +189,8 @@ const consumablesStore = useConsumablesStore() |
|
|
|
const runningStore = useRunningStore() |
|
|
|
const deviceStore = useDeviceStore() |
|
|
|
const settingTubeStore = useSettingTestTubeStore() |
|
|
|
const emergencyStore = useEmergencyStore();//从急诊页面添加的急诊数据 |
|
|
|
const emergencyStore = useEmergencyStore() //从急诊页面添加的急诊数据 |
|
|
|
const router = useRouter() |
|
|
|
// 急诊试管数据 |
|
|
|
const emergencyTube = ref(emergencyStore.emergencyInfo) |
|
|
|
console.log('emergencyTube---', emergencyTube) |
|
|
|
const hasEmergencyPosition = ref(emergencyStore.emergencyInfo.isEmergency) |
|
|
|
const emergencyBackground = computed(()=>{ |
|
|
|
if(hasEmergencyPosition){ |
|
|
|
return '#c7c7c7' |
|
|
|
} |
|
|
|
return '' |
|
|
|
}) |
|
|
|
|
|
|
|
//确认添加急诊 |
|
|
|
const confirmEmergency = () => { |
|
|
@ -203,8 +208,8 @@ const toggleSelectItem = (index: number) => { |
|
|
|
} |
|
|
|
|
|
|
|
// 计算填充样式 |
|
|
|
const getFillStyle = (item: any) => { |
|
|
|
const percentage = (item.tipNum / 120) * 100 |
|
|
|
const getFillStyle = (cnt: number) => { |
|
|
|
const percentage = (cnt / 360) * 100 |
|
|
|
return { |
|
|
|
background: `linear-gradient(to top, #bbd3fb ${percentage}%,#c9c9c9 ${percentage}%)`, |
|
|
|
} |
|
|
@ -276,11 +281,6 @@ watch( |
|
|
|
transition: all 0.3s ease; |
|
|
|
box-shadow: 0 4px 15px rgba(255, 107, 107, 0.3); |
|
|
|
|
|
|
|
&:hover { |
|
|
|
transform: translateY(-2px); |
|
|
|
box-shadow: 0 6px 20px rgba(255, 107, 107, 0.4); |
|
|
|
} |
|
|
|
|
|
|
|
span { |
|
|
|
font-size: 32px; |
|
|
|
color: #ffffff; |
|
|
@ -306,7 +306,7 @@ watch( |
|
|
|
content: ''; |
|
|
|
width: 3px; |
|
|
|
height: 120px; |
|
|
|
background: linear-gradient(to bottom, #e0341d, #fa4f0b); |
|
|
|
background: lightgray; |
|
|
|
position: absolute; |
|
|
|
right: -30px; |
|
|
|
} |
|
|
@ -351,11 +351,7 @@ watch( |
|
|
|
height: 100%; |
|
|
|
border-radius: 16px; |
|
|
|
transition: all 0.3s ease; |
|
|
|
background: linear-gradient( |
|
|
|
to top, |
|
|
|
rgba(92, 184, 92, 0.1), |
|
|
|
transparent |
|
|
|
); |
|
|
|
background: rgba(92, 184, 92, 0.2); |
|
|
|
} |
|
|
|
|
|
|
|
.tip-text { |
|
|
@ -368,10 +364,6 @@ watch( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
.buffer-grid { |
|
|
|
margin-top: -10px; |
|
|
|
} |
|
|
|
|
|
|
|
.waste-area { |
|
|
|
border-radius: 12px; |
|
|
|
display: flex; |
|
|
@ -395,14 +387,10 @@ watch( |
|
|
|
} |
|
|
|
.full-state { |
|
|
|
margin-top: 8px; |
|
|
|
color: #FFF; |
|
|
|
color: #fff; |
|
|
|
font-size: 20px; |
|
|
|
font-weight: bold; |
|
|
|
} |
|
|
|
|
|
|
|
&:hover { |
|
|
|
transform: translateY(-2px); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -533,27 +521,9 @@ watch( |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 添加动画 |
|
|
|
@keyframes pulse { |
|
|
|
0% { |
|
|
|
transform: scale(1); |
|
|
|
} |
|
|
|
|
|
|
|
50% { |
|
|
|
transform: scale(1.05); |
|
|
|
} |
|
|
|
|
|
|
|
100% { |
|
|
|
transform: scale(1); |
|
|
|
} |
|
|
|
} |
|
|
|
.red { |
|
|
|
background-color: rgb(223, 237, 248); |
|
|
|
} |
|
|
|
|
|
|
|
.tube-container { |
|
|
|
display: flex; |
|
|
|
flex-direction: row; |
|
|
|
flex-wrap: nowrap; |
|
|
|
justify-content: space-around; |
|
|
|
align-items: center; |
|
|
@ -563,7 +533,7 @@ watch( |
|
|
|
} |
|
|
|
.plate-temp { |
|
|
|
position: fixed; |
|
|
|
top: 120px; |
|
|
|
top: 140px; |
|
|
|
right: 30px; |
|
|
|
padding: 10px; |
|
|
|
background-color: rgb(209, 229, 255); |
|
|
|