|
|
@ -11,84 +11,20 @@ |
|
|
|
<operation-tube-rack-temperature :tube-rack-slots="tubeRackSlots"/> |
|
|
|
</a-col> |
|
|
|
</a-row> |
|
|
|
|
|
|
|
|
|
|
|
<div class="p-1"> |
|
|
|
<div class="flex flex-row justify-evenly bg-white rounded-2xl p-5"> |
|
|
|
<div v-for="acidBucket in acidBuckets" :key="acidBucket.index"> |
|
|
|
<div class="w-full relative"> |
|
|
|
<div class="h-full w-full text-center"> |
|
|
|
<img class="w-1/2" src="../../../assets/icon/bucket-full.svg" /> |
|
|
|
</div> |
|
|
|
<div class="h-full w-full text-center absolute top-0 overflow-hidden" :style="{height:`${100-acidBucket.volume/acidBucket.maxVolume*100}%`}"> |
|
|
|
<img class="w-1/2" src="../../../assets/icon/bucket-empty.svg" /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
<div class="mx-2 p-2 mt-3 rounded-2xl text-center" style="background:#D2DFEF;color:#8799AB;"> |
|
|
|
<span class="inline-block p-1 rounded-2xl mr-1" style="background:#DCE8F7;">{{acidBucket.volume}}</span> |
|
|
|
<span class="inline-block py-1">{{acidBucket.maxVolume}}</span> |
|
|
|
</div> |
|
|
|
<div class="text-center mt-1">{{acidBucket.acidName}}</div> |
|
|
|
</div> |
|
|
|
<div class="p-1"> |
|
|
|
<operation-acid-buckets /> |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
|
|
|
|
<!-- 取出样品 --> |
|
|
|
<a-modal v-model:visible="sampleTakeout.enable" title="取出样本" @ok="actionSampleTakeOutOk" @cancel="actionSampleTakeOutCancel" ok-text="确认" cancel-text="取消"> |
|
|
|
<a-form :label-col="{span:4}" :wrapper-col="{span:20}" label-align="left" class="py-5"> |
|
|
|
<a-form-item label="位置"> |
|
|
|
<a-radio-group v-model:value="sampleTakeout.slotIndex" button-style="solid"> |
|
|
|
<a-radio-button value="0">A-1</a-radio-button> |
|
|
|
<a-radio-button value="1">A-2</a-radio-button> |
|
|
|
<a-radio-button value="2">A-3</a-radio-button> |
|
|
|
<a-radio-button value="3">A-4</a-radio-button> |
|
|
|
<a-radio-button value="4">A-5</a-radio-button> |
|
|
|
</a-radio-group> |
|
|
|
</a-form-item> |
|
|
|
</a-form> |
|
|
|
</a-modal> |
|
|
|
|
|
|
|
<!-- 执行预设 --> |
|
|
|
<a-modal v-model:visible="presetSetup.enable" title="执行预设" @ok="actionPresetSetupOk" @cancel="actionPresetSetupCancel" ok-text="确认" cancel-text="取消"> |
|
|
|
<a-form :label-col="{span:4}" :wrapper-col="{span:20}" label-align="left" class="py-5"> |
|
|
|
<a-form-item label="位置"> |
|
|
|
<a-radio-group v-model:value="presetSetup.slotIndex" button-style="solid"> |
|
|
|
<a-radio-button value="0">A-1</a-radio-button> |
|
|
|
<a-radio-button value="1">A-2</a-radio-button> |
|
|
|
<a-radio-button value="2">A-3</a-radio-button> |
|
|
|
<a-radio-button value="3">A-4</a-radio-button> |
|
|
|
<a-radio-button value="4">A-5</a-radio-button> |
|
|
|
</a-radio-group> |
|
|
|
</a-form-item> |
|
|
|
<a-form-item label="预设"> |
|
|
|
<a-select v-model:value="presetSetup.id"> |
|
|
|
<a-select-option v-for="preset in presetList" :key="preset.id" :value="preset.id">{{ preset.name }}</a-select-option> |
|
|
|
</a-select> |
|
|
|
</a-form-item> |
|
|
|
</a-form> |
|
|
|
</a-modal> |
|
|
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
</template> |
|
|
|
<script setup> |
|
|
|
import { onMounted, ref, onUnmounted } from 'vue'; |
|
|
|
import ApiClient from '@/utils/ApiClient.js'; |
|
|
|
import OperationCamera from './OperationCamera.vue'; |
|
|
|
import OperationSampleAdd from './OperationSampleAdd.vue'; |
|
|
|
import OperationSampleTakeShot from './OperationSampleTakeShot.vue'; |
|
|
|
import OperationTubeRacks from './OperationTubeRacks.vue'; |
|
|
|
import OperationTubeRackTemperature from './OperationTubeRackTemperature.vue'; |
|
|
|
/** @var {Object} */ |
|
|
|
const sampleTakeout = ref({enable:false,slotIndex:0}); |
|
|
|
/** @var {Object} */ |
|
|
|
const presetSetup = ref({enable:false,slotIndex:0,id:null}); |
|
|
|
import OperationAcidBuckets from './OperationAcidBuckets.vue'; |
|
|
|
/** @var {Array} */ |
|
|
|
const tubeRackSlots = ref([]); |
|
|
|
/** @var {Array} */ |
|
|
|
const acidBuckets = ref([]); |
|
|
|
/** @var {Array} */ |
|
|
|
const presetList = ref([]); |
|
|
|
/** @var {Number} */ |
|
|
|
let refreshTimer = null; |
|
|
|
// mounted |
|
|
@ -103,7 +39,6 @@ function mounted() { |
|
|
|
|
|
|
|
// unmounted |
|
|
|
function unmounted() { |
|
|
|
debugger; |
|
|
|
clearTimeout(refreshTimer); |
|
|
|
} |
|
|
|
|
|
|
@ -112,54 +47,6 @@ async function refreshResource() { |
|
|
|
let client = ApiClient.getClient(); |
|
|
|
let response = await client.resourceDataGet('HeatingTubeRackSlot'); |
|
|
|
tubeRackSlots.value = structuredClone(response); |
|
|
|
|
|
|
|
response = await client.resourceDataGet('Acid'); |
|
|
|
acidBuckets.value = structuredClone(response); |
|
|
|
let acidTypeMap = {hydrochloric:'盐酸',nitric:'硝酸',sulfuric:'硫酸',hydrofluoric:'氢氟酸',perchloric:'高氯酸',hydrobromic:'液溴',phosphoric:'磷酸',tartaric:'酒石酸'}; |
|
|
|
for ( let acidBucket of acidBuckets.value ) { |
|
|
|
acidBucket.acidName = acidTypeMap[acidBucket.acidType]; |
|
|
|
} |
|
|
|
refreshTimer = setTimeout(refreshResource,1000); |
|
|
|
} |
|
|
|
|
|
|
|
// 样本取出 |
|
|
|
async function actionSampleTakeOut() { |
|
|
|
sampleTakeout.value.enable = true; |
|
|
|
} |
|
|
|
|
|
|
|
// 样本取出确认 |
|
|
|
async function actionSampleTakeOutOk() { |
|
|
|
sampleTakeout.value.enable = false; |
|
|
|
let client = ApiClient.getClient(); |
|
|
|
await client.taskAppend('SampleTakeOut',{slotIndex:sampleTakeout.value.slotIndex*1}); |
|
|
|
} |
|
|
|
|
|
|
|
// 样本取出取消 |
|
|
|
async function actionSampleTakeOutCancel() { |
|
|
|
sampleTakeout.value.enable = false; |
|
|
|
} |
|
|
|
|
|
|
|
// 预设执行 |
|
|
|
async function actionPresetSetup() { |
|
|
|
presetSetup.value.enable = true; |
|
|
|
presetSetup.value.id = null; |
|
|
|
let client = ApiClient.getClient(); |
|
|
|
let response = await client.digestionPresetList(); |
|
|
|
presetList.value = structuredClone(response); |
|
|
|
} |
|
|
|
|
|
|
|
// 预设执行确认 |
|
|
|
async function actionPresetSetupOk() { |
|
|
|
presetSetup.value.enable = false; |
|
|
|
let client = ApiClient.getClient(); |
|
|
|
await client.taskAppend('Digestion',{ |
|
|
|
slotIndex : presetSetup.value.slotIndex * 1, |
|
|
|
id : presetSetup.value.id * 1 |
|
|
|
}); |
|
|
|
} |
|
|
|
|
|
|
|
// 预设执行取消 |
|
|
|
async function actionPresetSetupCancel() { |
|
|
|
presetSetup.value.enable = false; |
|
|
|
refreshTimer = setTimeout(refreshResource, 5000); |
|
|
|
} |
|
|
|
</script> |