You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

204 lines
12 KiB

1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
  1. <template>
  2. <div class="h-full flex flex-col">
  3. <div class="border-b p-5 bg-white flex flex-row">
  4. <div>样本预处理</div>
  5. <div v-if="isActionExecuting" class="ml-1"><LoadingOutlined /></div>
  6. </div>
  7. <a-row class="h-0 grow">
  8. <a-col class="border-r" :span="16">
  9. <div class="p-5 border-t border-b">
  10. <a-row>
  11. <a-col class="p-1" :span="8"><a-input prefix="回零超时时间 : " v-model:value="serviceParams.MoveToZeroOvertime" /></a-col>
  12. <a-col class="p-1" :span="8"><a-input prefix="执行动作的超时时间 : " v-model:value="serviceParams.ActionOvertime" /></a-col>
  13. <a-col class="p-1" :span="8"><a-input prefix="高全血试管取试管位置 : " v-model:value="serviceParams.ZMotor_HighBloodTakeTubeHeight" /></a-col>
  14. <a-col class="p-1" :span="8"><a-input prefix="矮全血试管取试管位置 : " v-model:value="serviceParams.ZMotor_ShortBloodTakeTubeHeight" /></a-col>
  15. <a-col class="p-1" :span="8"><a-input prefix="高全血试管取帽位置 : " v-model:value="serviceParams.ZMotor_HighBloodTakeCapHeight" /></a-col>
  16. <a-col class="p-1" :span="8"><a-input prefix="矮全血试管取帽位置 : " v-model:value="serviceParams.ZMotor_ShortBloodTakeCapHeight" /></a-col>
  17. <a-col class="p-1" :span="8"><a-input prefix="高试管帽子判断位置 : " v-model:value="serviceParams.ZMotor_HighBloodCapJudgeHeight" /></a-col>
  18. <a-col class="p-1" :span="8"><a-input prefix="矮全血试管帽子判断位置 : " v-model:value="serviceParams.ZMotor_ShortBloodCapJudgeHeight" /></a-col>
  19. <a-col class="p-1" :span="8"><a-input prefix="摇匀位放置高度 : " v-model:value="serviceParams.ZMotor_placeShakeHeight" /></a-col>
  20. <a-col class="p-1" :span="8"><a-input prefix="水平移动电机待机位置 : " v-model:value="serviceParams.HorizontalMotor_standbyPos" /></a-col>
  21. <a-col class="p-1" :span="8"><a-input prefix="水平移动电机取帽位置 : " v-model:value="serviceParams.HorizontalMotor_takeCapPos" /></a-col>
  22. <a-col class="p-1" :span="8"><a-input prefix="水平移动电机放帽位置 : " v-model:value="serviceParams.HorizontalMotor_takePushCapPos" /></a-col>
  23. <a-col class="p-1" :span="8"><a-input prefix="抓手舵机待机位置 : " v-model:value="serviceParams.GripperServo_standbyPos" /></a-col>
  24. <a-col class="p-1" :span="8"><a-input prefix="抓手舵机取帽扭矩 : " v-model:value="serviceParams.GripperServo_takeCapTorque" /></a-col>
  25. <a-col class="p-1" :span="8"><a-input prefix="抓手舵机取试管位置 : " v-model:value="serviceParams.GripperServo_takeTubePos" /></a-col>
  26. <a-col class="p-1" :span="8"><a-input prefix="判断是否有帽子的位置阈值 : " v-model:value="serviceParams.GripperServo_hatDeterminesPosThres" /></a-col>
  27. <a-col class="p-1" :span="8"><a-input prefix="摇匀电机待机位置 : " v-model:value="serviceParams.ShakeMotor_standbyPos" /></a-col>
  28. <a-col class="p-1" :span="8"><a-input prefix="摇匀电机摇匀角度 : " v-model:value="serviceParams.ShakeMotor_shakeDegree" /></a-col>
  29. <a-col class="p-1" :span="8"><a-input prefix="试管夹紧电机待机位置 : " v-model:value="serviceParams.TubeClampMotor_standbyPos" /></a-col>
  30. <a-col class="p-1" :span="8"><a-input prefix="试管夹紧电机夹紧位置 : " v-model:value="serviceParams.TubeClampMotor_ClampPos" /></a-col>
  31. <a-col class="p-1" :span="8"><a-input prefix="气溶胶风扇控制参数 : " v-model:value="serviceParams.AerosolFanLevel" /></a-col>
  32. <a-col class="p-1" :span="8">
  33. <a-button class="mr-1" @click="actionServiceParamsReload">刷新</a-button>
  34. <a-button @click="actionServiceParamsSave">保存</a-button>
  35. </a-col>
  36. </a-row>
  37. </div>
  38. <div class="p-5">
  39. <a-button class="m-1" @click="actionQuickExec('enableModule',true)">使能</a-button>
  40. <a-button class="m-1" @click="actionQuickExec('enableModule',false)">失能</a-button>
  41. <a-button class="m-1" @click="actionQuickExec('moveToZero')">归零</a-button>
  42. <a-button class="m-1" @click="actionQuickExec('stop')">停止</a-button>
  43. <a-button class="m-1" @click="actionQuickExec('openTubeClip')">打开试管夹爪</a-button>
  44. <a-button class="m-1" @click="actionQuickExec('openAerosolFan')">打开气溶胶风扇</a-button>
  45. <a-button class="m-1" @click="actionQuickExec('closeAerosolFan')">关闭气溶胶风扇</a-button>
  46. <a-button class="m-1" @click="actionQuickExec('moduleResetWhenPowerOn')">设备初始化时复位</a-button>
  47. <a-button class="m-1" @click="actionQuickExec('moduleRuntimeReset')">设备运行时复位</a-button>
  48. <div class="mt-1">
  49. <a-input-group compact class="flex flex-row">
  50. <a-button @click="actionTakeTube">取试管</a-button>
  51. <a-select class="w-64" v-model:value="takeTubeParams[0]">
  52. <a-select-option value="HighBlood">试管类型 : 全血5ML</a-select-option>
  53. <a-select-option value="ShortBlood">试管类型 : 全血3ML</a-select-option>
  54. <a-select-option value="Mini">试管类型 : 迷你试管</a-select-option>
  55. <a-select-option value="MiniBlood">试管类型 : 阳普管</a-select-option>
  56. <a-select-option value="BulletTube1P5">试管类型 : 子弹头试管1.5mL</a-select-option>
  57. <a-select-option value="BulletTube0P5">试管类型 : 子弹头试管0.5mL</a-select-option>
  58. </a-select>
  59. <a-button @click="takeTubeParams[1] = !takeTubeParams[1]" :type="takeTubeParams[1] ? 'primary' : 'default'">检查试管帽</a-button>
  60. </a-input-group>
  61. </div>
  62. <div class="mt-1">
  63. <a-input-group compact class="flex flex-row">
  64. <a-button @click="actionShakeTube">摇匀试管</a-button>
  65. <a-select class="w-64" v-model:value="shakeTubeParams[0]">
  66. <a-select-option value="HighBlood">试管类型 : 全血5ML</a-select-option>
  67. <a-select-option value="ShortBlood">试管类型 : 全血3ML</a-select-option>
  68. <a-select-option value="Mini">试管类型 : 迷你试管</a-select-option>
  69. <a-select-option value="MiniBlood">试管类型 : 阳普管</a-select-option>
  70. <a-select-option value="BulletTube1P5">试管类型 : 子弹头试管1.5mL</a-select-option>
  71. <a-select-option value="BulletTube0P5">试管类型 : 子弹头试管0.5mL</a-select-option>
  72. </a-select>
  73. <a-input class="!w-24" prefix="次数 : " v-model:value="shakeTubeParams[1]" />
  74. <a-input class="!w-24" prefix="角度 : " v-model:value="shakeTubeParams[2]" />
  75. </a-input-group>
  76. </div>
  77. <div class="mt-1">
  78. <a-input-group compact class="flex flex-row">
  79. <a-button @click="actionTakeTubeCap">取试管帽</a-button>
  80. <a-select class="w-64" v-model:value="takeTubeCapParams[0]">
  81. <a-select-option value="HighBlood">试管类型 : 全血5ML</a-select-option>
  82. <a-select-option value="ShortBlood">试管类型 : 全血3ML</a-select-option>
  83. <a-select-option value="Mini">试管类型 : 迷你试管</a-select-option>
  84. <a-select-option value="MiniBlood">试管类型 : 阳普管</a-select-option>
  85. <a-select-option value="BulletTube1P5">试管类型 : 子弹头试管1.5mL</a-select-option>
  86. <a-select-option value="BulletTube0P5">试管类型 : 子弹头试管0.5mL</a-select-option>
  87. </a-select>
  88. </a-input-group>
  89. </div>
  90. <div class="mt-1">
  91. <a-input-group compact class="flex flex-row">
  92. <a-button @click="actionPushBackTubeCapAndTakeBakTube">盖试管帽并将试管移动回试管架中</a-button>
  93. <a-select class="w-64" v-model:value="pushBackTubeCapAndTakeBakTubeParams[0]">
  94. <a-select-option value="HighBlood">试管类型 : 全血5ML</a-select-option>
  95. <a-select-option value="ShortBlood">试管类型 : 全血3ML</a-select-option>
  96. <a-select-option value="Mini">试管类型 : 迷你试管</a-select-option>
  97. <a-select-option value="MiniBlood">试管类型 : 阳普管</a-select-option>
  98. <a-select-option value="BulletTube1P5">试管类型 : 子弹头试管1.5mL</a-select-option>
  99. <a-select-option value="BulletTube0P5">试管类型 : 子弹头试管0.5mL</a-select-option>
  100. </a-select>
  101. </a-input-group>
  102. </div>
  103. </div>
  104. </a-col>
  105. <a-col :span="8" class="p-5 h-full">
  106. <div class="border rounded p-5 whitespace-pre h-full overflow-y-auto bg-white"
  107. >{{ message }}</div>
  108. </a-col>
  109. </a-row>
  110. </div>
  111. </template>
  112. <script setup>
  113. import ApiClient from '@/utils/ApiClient';
  114. import { onMounted, ref } from 'vue';
  115. import { LoadingOutlined } from '@ant-design/icons-vue';
  116. const message = ref('');
  117. const serviceParams = ref({});
  118. const shakeTubeParams = ref(['ShortBlood', 3, 90]);
  119. const takeTubeParams = ref(['ShortBlood', false]);
  120. const takeTubeCapParams = ref(['ShortBlood']);
  121. const pushBackTubeCapAndTakeBakTubeParams = ref(['ShortBlood']);
  122. const isActionExecuting = ref(false);
  123. onMounted(actionServiceParamsReload);
  124. async function actionServiceParamsReload() {
  125. serviceParams.value = {};
  126. message.value = '';
  127. let client = ApiClient.getClient();
  128. try {
  129. let res = await client.call('sample-pre-process-module-ctrl/list-options');
  130. message.value = JSON.stringify(res, null, 2);
  131. for ( let item of res ) {
  132. serviceParams.value[item.key] = item.val;
  133. }
  134. } catch ( e ) {
  135. message.value = e.message
  136. }
  137. }
  138. async function actionServiceParamsSave() {
  139. message.value = '';
  140. let client = ApiClient.getClient();
  141. try {
  142. let options = [];
  143. for ( let key in serviceParams.value ) {
  144. options.push({name:key, value: serviceParams.value[key]});
  145. }
  146. let res = await client.call('sample-pre-process-module-ctrl/update-options', {options});
  147. message.value = JSON.stringify(res, null, 2);
  148. } catch ( e ) {
  149. message.value = e.message
  150. }
  151. }
  152. // execute service method
  153. async function executeServiceMethod( method, params=[]) {
  154. isActionExecuting.value = true;
  155. message.value = '';
  156. let client = ApiClient.getClient();
  157. try {
  158. let res = await client.call('sample-pre-process-module-ctrl/execute-service-method', {method,params});
  159. message.value = null === res ? 'OK' : JSON.stringify(res, null, 2);
  160. } catch ( e ) {
  161. message.value = e.message
  162. } finally {
  163. isActionExecuting.value = false;
  164. }
  165. }
  166. function actionQuickExec( action, ... params ) {
  167. executeServiceMethod(action, params);
  168. }
  169. function actionShakeTube() {
  170. executeServiceMethod('ShakeTube',[
  171. shakeTubeParams.value[0],
  172. shakeTubeParams.value[1] * 1,
  173. shakeTubeParams.value[2] * 1
  174. ])
  175. }
  176. function actionTakeTube() {
  177. executeServiceMethod('takeTube',[
  178. takeTubeParams.value[0],
  179. takeTubeParams.value[1]
  180. ])
  181. }
  182. function actionTakeTubeCap() {
  183. executeServiceMethod('takeTubeCap',[
  184. takeTubeCapParams.value[0]
  185. ]);
  186. }
  187. function actionPushBackTubeCapAndTakeBakTube() {
  188. executeServiceMethod('pushBackTubeCapAndTakeBakTube',[
  189. pushBackTubeCapAndTakeBakTubeParams.value[0]
  190. ]);
  191. }
  192. </script>