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.

235 lines
7.5 KiB

  1. <script setup lang="ts">
  2. import FtDialog from 'components/common/FTDialog/index.vue'
  3. import { ElMessageBox } from 'element-plus'
  4. import { FtMessage } from 'libs/message'
  5. import { sendControl } from 'libs/utils'
  6. import { useSystemStore } from 'stores/useSystemStore'
  7. import { ref } from 'vue'
  8. const emits = defineEmits(['ok', 'cancel'])
  9. const systemStore = useSystemStore() // 使用 systemStore
  10. const humidity = ref(systemStore.targetHumidity)
  11. const slideTemperature = ref(systemStore.targetSlideTemperature)
  12. const nozzleTemperature = ref(systemStore.targetNozzleTemperature)
  13. const slideStartRef = ref()
  14. const nozzleStartRef = ref()
  15. const dehumidifierStartRef = ref()
  16. const slideStart = () => {
  17. if (!systemStore.systemSensor.slideTemperature) {
  18. FtMessage.error('未检测到当前温度')
  19. return
  20. }
  21. if (!slideTemperature.value) {
  22. FtMessage.error('请输入目标温度')
  23. return
  24. }
  25. if (slideTemperature.value > 100 || slideTemperature.value < 0) {
  26. FtMessage.error('温度参数有误')
  27. return
  28. }
  29. if (slideTemperature.value <= systemStore.systemSensor.slideTemperature) {
  30. FtMessage.info('当前不需要加热')
  31. return
  32. }
  33. ElMessageBox.confirm('载玻台即将开始加热', '提示', {
  34. confirmButtonText: '确定',
  35. cancelButtonText: '取消',
  36. showCancelButton: true,
  37. showClose: false,
  38. })
  39. .then(async () => {
  40. slideStartRef.value.setLoading(true)
  41. const params = {
  42. cmdCode: 'slide_plat_heat_start',
  43. cmdId: '',
  44. params: {
  45. temperature: slideTemperature.value,
  46. },
  47. }
  48. await sendControl(params)
  49. systemStore.updateSlideTemperature(slideTemperature.value)
  50. slideStartRef.value.setLoading(false)
  51. })
  52. .catch(() => {
  53. FtMessage.error('取消加热')
  54. })
  55. }
  56. const nozzleStart = () => {
  57. if (!systemStore.systemSensor.nozzleTemperature) {
  58. FtMessage.error('未检测到当前温度')
  59. return
  60. }
  61. if (!nozzleTemperature.value) {
  62. FtMessage.error('请输入目标温度')
  63. return
  64. }
  65. if (nozzleTemperature.value > 100 || nozzleTemperature.value < 0) {
  66. FtMessage.error('温度参数有误')
  67. return
  68. }
  69. if (nozzleTemperature.value <= systemStore.systemSensor.nozzleTemperature) {
  70. FtMessage.info('当前不需要加热')
  71. return
  72. }
  73. ElMessageBox.confirm('即将开始加热', '提示', {
  74. confirmButtonText: '确定',
  75. cancelButtonText: '取消',
  76. showCancelButton: true,
  77. showClose: false,
  78. })
  79. .then(async () => {
  80. nozzleStartRef.value.setLoading(true)
  81. const params = {
  82. cmdCode: 'nozzle_heat_start',
  83. cmdId: '',
  84. params: {
  85. temperature: nozzleTemperature.value,
  86. },
  87. }
  88. await sendControl(params)
  89. systemStore.updateTargetNozzleTemperature(nozzleTemperature.value)
  90. nozzleStartRef.value.setLoading(false)
  91. })
  92. .catch(() => {
  93. FtMessage.error('取消加热')
  94. })
  95. }
  96. const dehumidifierStart = () => {
  97. if (!systemStore.systemSensor.humidity) {
  98. FtMessage.error('未检测到当前湿度')
  99. return
  100. }
  101. if (!humidity.value) {
  102. FtMessage.error('请输入目标湿度')
  103. return
  104. }
  105. if (humidity.value > 100 || humidity.value < 0) {
  106. FtMessage.error('湿度参数有误')
  107. return
  108. }
  109. if (humidity.value >= systemStore.systemSensor.humidity) {
  110. FtMessage.info('当前不需要除湿')
  111. return
  112. }
  113. ElMessageBox.confirm('即将开始除湿,请确认关闭注射泵门和玻片托盘出口门', '提示', {
  114. confirmButtonText: '确定',
  115. cancelButtonText: '取消',
  116. showCancelButton: true,
  117. showClose: false,
  118. })
  119. .then(async () => {
  120. dehumidifierStartRef.value.setLoading(true)
  121. const params = {
  122. cmdCode: 'dehumidifier_start',
  123. cmdId: '',
  124. params: {
  125. humidity: humidity.value,
  126. },
  127. }
  128. await sendControl(params)
  129. systemStore.updateTargetHumidity(humidity.value)
  130. dehumidifierStartRef.value.setLoading(false)
  131. })
  132. .catch(() => {
  133. FtMessage.error('取消除湿')
  134. })
  135. }
  136. const dehumidifierStop = async () => {
  137. const params = {
  138. cmdCode: 'dehumidifier_stop',
  139. cmdId: '',
  140. }
  141. await sendControl(params)
  142. }
  143. const slideStop = async () => {
  144. const params = {
  145. cmdCode: 'slide_plat_heat_stop',
  146. cmdId: '',
  147. }
  148. await sendControl(params)
  149. }
  150. const nozzleStop = async () => {
  151. const params = {
  152. cmdCode: 'nozzle_heat_stop',
  153. cmdId: '',
  154. }
  155. await sendControl(params)
  156. }
  157. const onClose = async () => {
  158. emits('cancel')
  159. }
  160. </script>
  161. <template>
  162. <FtDialog visible title="喷涂环境设置" width="70%">
  163. <div style="padding: 10px;">
  164. <div style="display: flex; align-items: center; margin: 10px 0;font-size: 15px;justify-content: center;">
  165. <div style="display: flex; align-items: center; width: 20%; margin-right: 30px">
  166. <span>当前湿度</span>
  167. <span class="num-text">{{ systemStore.systemSensor.humidity }}</span>
  168. <span>%RH</span>
  169. </div>
  170. <div style="display: flex; align-items: center; width: 30%; margin-right: 30px">
  171. <span>目标湿度</span>
  172. <el-input v-model="humidity" type="number" style="width: 100px; margin: 0 10px" />
  173. <span>%RH</span>
  174. </div>
  175. <ft-button ref="dehumidifierStartRef" type="primary" :click-handle="dehumidifierStart">
  176. 开始除湿
  177. </ft-button>
  178. <ft-button :click-handle="dehumidifierStop" :disabled="!systemStore.systemStatus.dehumidifierRunning">
  179. 停止除湿
  180. </ft-button>
  181. </div>
  182. <div style="display: flex; align-items: center; margin-top: 10px;font-size: 15px;justify-content: center;">
  183. <div style="display: flex; align-items: center; width:20%; margin-right: 30px">
  184. <span>载玻台温度</span>
  185. <span class="num-text">{{ systemStore.systemSensor.slideTemperature }}</span>
  186. <span></span>
  187. </div>
  188. <div style="display: flex; align-items: center; width: 30%; margin-right: 30px">
  189. <span>目标温度</span>
  190. <el-input v-model="slideTemperature" type="number" style="width: 100px; margin: 0 10px" />
  191. <span></span>
  192. </div>
  193. <ft-button ref="slideStartRef" type="primary" :click-handle="slideStart">
  194. 开始加热
  195. </ft-button>
  196. <ft-button :click-handle="slideStop" :disabled="!systemStore.systemStatus.slidePlatHeating">
  197. 停止加热
  198. </ft-button>
  199. </div>
  200. <div style="display: flex; align-items: center; margin-top: 10px;font-size: 15px;justify-content: center;">
  201. <div style="display: flex; align-items: center; width: 20%; margin-right: 30px">
  202. <span>喷头温度</span>
  203. <span class="num-text">{{ systemStore.systemSensor.nozzleTemperature }}</span>
  204. <span></span>
  205. </div>
  206. <div style="display: flex; align-items: center; width: 30%; margin-right: 30px">
  207. <span>目标温度</span>
  208. <el-input v-model="nozzleTemperature" type="number" style="width: 100px; margin: 0 10px" />
  209. <span></span>
  210. </div>
  211. <ft-button ref="nozzleStartRef" type="primary" :click-handle="nozzleStart">
  212. 开始加热
  213. </ft-button>
  214. <ft-button :click-handle="nozzleStop" :disabled="!systemStore.systemStatus.nozzleHeating">
  215. 停止加热
  216. </ft-button>
  217. </div>
  218. </div>
  219. <template #footer>
  220. <FtButton type="default" :click-handle="onClose">
  221. 关闭
  222. </FtButton>
  223. </template>
  224. </FtDialog>
  225. </template>
  226. <style scoped lang="scss">
  227. .num-text {
  228. color: var(--el-color-primary);
  229. font-weight: 900;
  230. font-size: 70px;
  231. }
  232. </style>