|
|
@ -2,13 +2,19 @@ |
|
|
|
<div> |
|
|
|
<div class="title">添加溶液</div> |
|
|
|
<!--选择试管区--> |
|
|
|
<section> |
|
|
|
<section class="main"> |
|
|
|
<div class="liquid_tube"> |
|
|
|
<div class="select_tube_title"> |
|
|
|
请选择加液试管 |
|
|
|
</div> |
|
|
|
<div class="select_tube"> |
|
|
|
<div class="inner-circle" v-for="(tubeItem, index) in tubeList" :key="index" :style="{'background': tubeItem.color}" @click="onChooseTube(tubeItem, index)"></div> |
|
|
|
<div |
|
|
|
class="inner-circle" |
|
|
|
v-for="(tubeItem, index) in tubeList" |
|
|
|
:key="index" |
|
|
|
:style="{'border': `2px solid ${tubeItem.color}`,'background':tubeItem.selectedBackgroudColor || tubeItem.backgroudColor}" |
|
|
|
@click="onChooseTube(tubeItem, index)"> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="tube_num">已选择{{ selectedTubeList.length }}个试管</div> |
|
|
|
</div> |
|
|
@ -44,11 +50,11 @@ |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<div class="liquid_queue"> |
|
|
|
<!-- <div class="liquid_queue"> |
|
|
|
<van-tag style="height: 2.5rem; border-radius: 10px;margin-left: 10px;" v-for="item in tubeQueue" closeable size="medium" type="primary" @close="delQueueSolution(item)"> |
|
|
|
{{ item.name }}添加{{ item.solutionNum }}ml |
|
|
|
{{ item.tubeCode }} : {{ item.name }}添加{{ item.volume }}ml |
|
|
|
</van-tag> |
|
|
|
</div> |
|
|
|
</div> --> |
|
|
|
</section> |
|
|
|
<footer class="liquid_button"> |
|
|
|
<van-button class="btn" @click="onConfirm" type="primary">确认添加</van-button> |
|
|
@ -65,16 +71,25 @@ |
|
|
|
const solutionList = ref([]) |
|
|
|
const selectedTubeList = ref([]) |
|
|
|
const tubeQueue = ref([]) |
|
|
|
const selectedColor = '#4F85FB' |
|
|
|
const selectedColor = 'red';//'#189952' |
|
|
|
const emptyColor = '#FFFFFF' |
|
|
|
const tubeList = ref([]) |
|
|
|
const selectedBackgroundColor = '#1989FA'//'#189952' |
|
|
|
|
|
|
|
const props = defineProps({ |
|
|
|
currentSelectedTube:{ |
|
|
|
type:Object, |
|
|
|
default:()=>{} |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
const onConfirm = () => { |
|
|
|
//发送指令给设备进行加液 |
|
|
|
emits('onAddSolution', tubeQueue.value) |
|
|
|
onCancel() |
|
|
|
} |
|
|
|
|
|
|
|
console.log('props.currentSelectedTube---', props.currentSelectedTube) |
|
|
|
onMounted(()=>{ |
|
|
|
//获取配置的酸液 |
|
|
|
const containerList = settingStore.containerConf; |
|
|
@ -88,7 +103,11 @@ |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
tubeBaseConfig(); |
|
|
|
if(!props.currentSelectedTube || !props.currentSelectedTube.tubeList){ |
|
|
|
tubeBaseConfig(); |
|
|
|
}else{ |
|
|
|
tubeList.value = props.currentSelectedTube.tubeList |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
function tubeBaseConfig(){ |
|
|
@ -104,16 +123,17 @@ |
|
|
|
const onChooseTube = (tubeItem, index) => { |
|
|
|
if(!tubeItem.id)return |
|
|
|
//试管编码 |
|
|
|
tubeItem.tubeNum = index + 1 |
|
|
|
tubeItem.tubeCode = index + 1 |
|
|
|
//切换选中状态 |
|
|
|
if(tubeItem.isSelected){//取消 |
|
|
|
if(tubeItem.isSelectedByLiquid){//取消 |
|
|
|
tubeItem.color = emptyColor |
|
|
|
selectedTubeList.value = selectedTubeList.value.filter(item => item.id != tubeItem.id) |
|
|
|
// solutionList.value = selectedTubeList.value.filter(item => item.id != tubeItem.id) |
|
|
|
}else{//选中 |
|
|
|
tubeItem.color = selectedColor |
|
|
|
selectedTubeList.value.push(tubeItem) |
|
|
|
// solutionList.value.push(tubeItem) |
|
|
|
} |
|
|
|
tubeItem.isSelected = !tubeItem.isSelected; |
|
|
|
tubeItem.isSelectedByLiquid = !tubeItem.isSelectedByLiquid; |
|
|
|
console.log('') |
|
|
|
} |
|
|
|
|
|
|
|
const onCancel = () => { |
|
|
@ -122,25 +142,53 @@ |
|
|
|
|
|
|
|
//删除队列中 试管需要加的溶液 |
|
|
|
const delQueueSolution = (data) => { |
|
|
|
tubeQueue.value = tubeQueue.value.filter(item => (data.tubeId != item.tubeId || data.solutionId != item.solutionId) ) |
|
|
|
tubeList.value.forEach((item) => { |
|
|
|
if(item.id == data.id){ |
|
|
|
item.solutionIds = item.solutionIds.filter(e => e!=data.solutionId) |
|
|
|
item.backgroudColor= item.solutionIds && item.solutionIds.length ? selectedBackgroundColor : item.backgroudColor ? item.backgroudColor : '' |
|
|
|
item.selectedBackgroudColor= '' |
|
|
|
} |
|
|
|
}) |
|
|
|
|
|
|
|
tubeQueue.value = tubeQueue.value.filter(item => data.optId != item.optId ) |
|
|
|
} |
|
|
|
|
|
|
|
//溶液添加到试管 |
|
|
|
const onSolutionToTube = ({solutionId, name, solutionNum})=> { |
|
|
|
if(!solutionNum)return; |
|
|
|
//当前试管 |
|
|
|
selectedTubeList.value.forEach((item) => { |
|
|
|
tubeQueue.value.push({ |
|
|
|
id:item.id, |
|
|
|
solutionId, |
|
|
|
volume:solutionNum, |
|
|
|
name, |
|
|
|
tubeNum: item.tubeNum |
|
|
|
}) |
|
|
|
console.log('tubeList---', tubeList) |
|
|
|
tubeList.value.forEach((item) => { |
|
|
|
if(item.isSelectedByLiquid){ |
|
|
|
const tubeId = generateRandomNumber() |
|
|
|
//试管可以加多种液solutionId |
|
|
|
if(item.solutionIds){ |
|
|
|
item.solutionIds.push(solutionId) |
|
|
|
}else{ |
|
|
|
item.solutionIds = [solutionId] |
|
|
|
} |
|
|
|
item.selectedBackgroudColor= selectedBackgroundColor |
|
|
|
tubeQueue.value.push({ |
|
|
|
id: item.id,//item.id,//试管ID |
|
|
|
optId:tubeId, |
|
|
|
solutionId, |
|
|
|
volume:solutionNum, |
|
|
|
name, |
|
|
|
tubeCode: item.tubeCode, |
|
|
|
backgroudColor:item.backgroudColor |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
const generateRandomNumber = () => { |
|
|
|
// 生成一个 0 到 99999 之间的随机数 |
|
|
|
const randomNumber = Math.floor(Math.random() * 100000); |
|
|
|
|
|
|
|
// 确保生成的随机数是 5 位数,如果不足 5 位则在前面补零 |
|
|
|
return String(randomNumber).padStart(5, '0'); |
|
|
|
} |
|
|
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
|
|
@use "@/assets/style/mixin.scss" as *; |
|
|
@ -153,9 +201,14 @@ |
|
|
|
color: #323233; |
|
|
|
} |
|
|
|
|
|
|
|
.main{ |
|
|
|
display: flex; |
|
|
|
height: 45rem; |
|
|
|
} |
|
|
|
|
|
|
|
.liquid_tube{ |
|
|
|
height: 16.25rem; |
|
|
|
display: flex; |
|
|
|
width: 2080px; |
|
|
|
.select_tube_title{ |
|
|
|
color: #323233; |
|
|
|
font-size: 1.125rem; |
|
|
@ -181,6 +234,7 @@ |
|
|
|
width: 3rem; |
|
|
|
height: 3rem; |
|
|
|
background-color: rgb(212, 212, 212); |
|
|
|
border: 2px solid rgb(212, 212, 212); |
|
|
|
} |
|
|
|
} |
|
|
|
.tube_num{ |
|
|
@ -195,12 +249,12 @@ |
|
|
|
height: 22rem; |
|
|
|
flex-wrap: wrap; |
|
|
|
display: flex; |
|
|
|
margin-top:1rem; |
|
|
|
.liquid_area{ |
|
|
|
height: 9.375rem; |
|
|
|
width: 15rem; |
|
|
|
border: 2px solid #275EFB; |
|
|
|
margin-left: 2.25rem; |
|
|
|
margin-top: 1rem; |
|
|
|
background: rgb(243 251 255); |
|
|
|
border-radius: 20px; |
|
|
|
display: flex; |
|
|
@ -256,7 +310,6 @@ |
|
|
|
.liquid_field{ |
|
|
|
width: 6.625rem; |
|
|
|
display: flex; |
|
|
|
border: 1px solid; |
|
|
|
border-radius: 10px; |
|
|
|
border: 1px solid #E4E5F1; |
|
|
|
font-size: .7rem; |
|
|
@ -285,10 +338,8 @@ |
|
|
|
align-items: center; |
|
|
|
} |
|
|
|
.liquid_button{ |
|
|
|
width: 100%; |
|
|
|
margin-left: 35%; |
|
|
|
height: 6.25rem; |
|
|
|
margin-top: 1.5rem; |
|
|
|
.btn{ |
|
|
|
width:13.75rem; |
|
|
|
height: 2.875rem; |
|
|
|