Browse Source

Refactor Operation.vue and remove OperationSampleTakeShot.vue

master
sige 1 year ago
parent
commit
f9fbb7c85a
  1. 121
      src/web/src/pages/main/contents/Operation.vue
  2. 45
      src/web/src/pages/main/contents/OperationSampleTakeShot.vue
  3. 5
      src/web/src/utils/ApiClient.js

121
src/web/src/pages/main/contents/Operation.vue

@ -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>

45
src/web/src/pages/main/contents/OperationSampleTakeShot.vue

@ -1,45 +0,0 @@
<template>
<a-button class="ml-1" @click="actionSampleTakeShot"><eye-outlined /></a-button>
<!-- 取出位置弹框 -->
<a-modal v-if="enable" v-model:open="enable" title="观察样本" @ok="actionOk" @cancel="actionCancel" 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="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>
</template>
<script setup>
import ApiClient from '@/utils/ApiClient';
import { ref } from 'vue';
/** @var {Boolean} */
const enable = ref(false);
/** @var {Number} */
const slotIndex = ref(0);
//
function actionSampleTakeShot() {
enable.value = true;
}
//
async function actionOk() {
enable.value = false;
let client = ApiClient.getClient();
await client.taskAppend('SampleMoveToLiquidPlate',{
slotIndex : slotIndex.value * 1,
});
}
//
function actionCancel() {
enable.value = false;
}
</script>

5
src/web/src/utils/ApiClient.js

@ -97,6 +97,11 @@ export default class ApiClient {
});
}
// task execution get
async taskExecutionGet( taskUuid ) {
return await this.call('task/execution-get', {id:taskUuid});
}
// task action execute
async taskActionExecute(id, action, params={}) {
return await this.call('task/task-action-execute',{id,action, params});

Loading…
Cancel
Save