消毒机设备
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.

171 lines
4.7 KiB

2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
2 weeks ago
  1. <script lang="ts" setup>
  2. import { formulaNameMap } from 'libs/constant'
  3. import { inject, onMounted, ref, watchEffect } from 'vue'
  4. import { convertValuesToInt, convertValuesToString } from '@/libs/utils'
  5. import { useFormulaStore } from '@/stores/formulaStore'
  6. const formulaStore = useFormulaStore()
  7. /**
  8. * 获取当前表单数据将值转换为字符串格式
  9. * @returns {Record<string, string>} 转换后的表单数据
  10. */
  11. const getFormData = () => {
  12. return convertValuesToString(formData.value, 'name')
  13. }
  14. /**
  15. * 注册孙子组件方法的注入函数
  16. */
  17. const registerGrandsonMethods = inject<(methods: any) => void>('registerGrandsonMethods', () => {})
  18. onMounted(() => {
  19. formulaStore.initFormulaList()
  20. registerGrandsonMethods && registerGrandsonMethods({ getFormData })
  21. })
  22. /**
  23. * 当前表单数据
  24. * - home: 当前选中的配方 或者默认配方
  25. */
  26. const formData = ref<Record<string, any>>({})
  27. /**
  28. * 标签单位映射表用于显示各参数的单位
  29. */
  30. const labelUnitMap: Record<string, any> = formulaStore.labelUnitMap
  31. /**
  32. * 监听事件
  33. */
  34. watchEffect(() => {
  35. formData.value
  36. = formulaStore.selectedFormulaInfo !== null
  37. ? convertValuesToInt(formulaStore.selectedFormulaInfo as Record<string, any>)
  38. : convertValuesToInt(formulaStore.defaultFormulaInfo as Record<string, any>)
  39. })
  40. /**
  41. * 配方配置列表
  42. */
  43. const formulaConfigList = formulaStore.formulaConfigList
  44. const size = 'default'
  45. </script>
  46. <template>
  47. <div class="formula-form">
  48. <el-form :model="formData" disabled label-width="auto" label-position="right" :size="size" inline>
  49. <el-form-item label="配方名称" style="width: 93%">
  50. <ft-input v-model="formData.name" name="name" placeholder="默认" />
  51. </el-form-item>
  52. <el-form-item
  53. v-for="item in formulaConfigList.filter(data => data.is_visible_in_rt_page)"
  54. :key="item.setting_id"
  55. :label="formulaNameMap[item.setting_id]"
  56. style="width: 50%"
  57. :prop="item.setting_id"
  58. >
  59. <template v-if="item.val_type === 'int'">
  60. <ft-input
  61. v-model.number="formData[item.setting_id]"
  62. style="width: 80%"
  63. :name="item.setting_id"
  64. :controls="false"
  65. >
  66. <template v-if="labelUnitMap[item.setting_id]" #append>
  67. {{ labelUnitMap[item.setting_id] }}
  68. </template>
  69. </ft-input>
  70. </template>
  71. <template v-if="item.val_type === 'float'">
  72. <ft-input
  73. v-model.number="formData[item.setting_id]"
  74. style="width: 80%"
  75. :name="item.setting_id"
  76. :controls="false"
  77. >
  78. <template v-if="labelUnitMap[item.setting_id]" #append>
  79. {{ labelUnitMap[item.setting_id] }}
  80. </template>
  81. </ft-input>
  82. </template>
  83. <template v-else-if="item.val_type === 'enum'">
  84. <el-select v-model="formData[item.setting_id]" style="width: 80%" placeholder="请选择" readonly>
  85. <el-option v-for="log in item.enums" :key="log" :label="log" :value="log" />
  86. </el-select>
  87. </template>
  88. <template v-else-if="item.val_type === 'boolean'">
  89. <el-radio-group v-model="formData[item.setting_id]">
  90. <el-radio :label="true">
  91. </el-radio>
  92. <el-radio :label="false">
  93. </el-radio>
  94. </el-radio-group>
  95. </template>
  96. </el-form-item>
  97. </el-form>
  98. </div>
  99. </template>
  100. <style lang="scss" scoped>
  101. .formula-form {
  102. font-size: 20px !important;
  103. padding: 5px;
  104. padding-left: 15px;
  105. align-items: center;
  106. .default-btn {
  107. margin-top: 1rem;
  108. }
  109. .config-btn {
  110. height: 3rem;
  111. width: 8rem;
  112. }
  113. }
  114. .formula-form-item {
  115. display: grid;
  116. grid-template-columns: 1fr 1fr;
  117. }
  118. .formData-input-config {
  119. width: 10vw;
  120. }
  121. :deep(.el-input__inner) {
  122. text-align: left;
  123. height: 40px;
  124. }
  125. :deep(.el-form-item) {
  126. margin-right: 0;
  127. align-items: center;
  128. }
  129. :deep(.el-select) {
  130. height: 42px;
  131. }
  132. :deep(.el-select__wrapper) {
  133. height: 42px;
  134. }
  135. :deep(.el-input-group__append) {
  136. font-size: 12px;
  137. padding: 0 1vw;
  138. }
  139. /* 进入动画的初始状态 */
  140. .slide-right-enter-from {
  141. transform: translateX(100%);
  142. }
  143. /* 进入动画的结束状态(也可以理解为激活状态) */
  144. .slide-right-enter-to {
  145. transform: translateX(0);
  146. }
  147. /* 进入动画的过渡曲线等 */
  148. .slide-right-enter-active {
  149. transition: transform 0.3s ease-in-out;
  150. }
  151. /* 离开动画的初始状态(激活状态) */
  152. .slide-right-leave-from {
  153. transform: translateX(0);
  154. }
  155. /* 离开动画的结束状态 */
  156. .slide-right-leave-to {
  157. transform: translateX(100%);
  158. }
  159. /* 离开动画的过渡曲线等 */
  160. .slide-right-leave-active {
  161. transition: transform 0.3s ease-in-out;
  162. }
  163. </style>