dataChange.vue 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <template>
  2. <div class="data-change-form">
  3. <div class="form-title">数据自变</div>
  4. <el-form :model="formData" label-width="100px" class="form-container" size="small">
  5. <!-- 变化方式和数据格式行 -->
  6. <el-row :gutter="20">
  7. <el-col :span="8">
  8. <el-form-item label="变化方式:">
  9. <el-select v-model="formData.changeMethod" placeholder="请选择">
  10. <el-option label="自增" value="increment"></el-option>
  11. <el-option label="自减" value="decrement"></el-option>
  12. </el-select>
  13. </el-form-item>
  14. </el-col>
  15. <el-col :span="8">
  16. <el-form-item label="数据格式:">
  17. <el-select v-model="formData.dataFormat" placeholder="请选择">
  18. <el-option label="时间" value="time"></el-option>
  19. <el-option label="日期" value="number"></el-option>
  20. </el-select>
  21. </el-form-item>
  22. </el-col>
  23. <el-col :span="8">
  24. <el-form-item>
  25. <el-button type="primary" @click="showSelectEle">选择元素</el-button>
  26. </el-form-item>
  27. </el-col>
  28. </el-row>
  29. <!-- 协同元素行 -->
  30. <el-row :gutter="20">
  31. <el-col :span="24">
  32. <el-form-item label="协同元素:">
  33. <el-input
  34. v-model="formData.coordinationElement"
  35. placeholder="请选择参数(非必填)"
  36. clearable
  37. @focus="setFocusedField('coordinationElement')"
  38. @blur="clearFocusedField"
  39. ></el-input>
  40. </el-form-item>
  41. </el-col>
  42. </el-row>
  43. <!-- 频率设置行 -->
  44. <el-row :gutter="1" class="frequency-row">
  45. <el-col :span="12">
  46. <el-form-item label="频率:">
  47. <el-input v-model="formData.frequency" placeholder="输入自增频率" clearable></el-input>
  48. </el-form-item>
  49. </el-col>
  50. <el-col :span="12">
  51. <el-form-item label-width="0px" >
  52. <el-select v-model="formData.frequencyUnit" placeholder="单位" clearable style="width: 120px;">
  53. <el-option label="年" value="second"></el-option>
  54. <el-option label="月" value="minute"></el-option>
  55. <el-option label="日" value="hour"></el-option>
  56. <el-option label="时" value="day"></el-option>
  57. <el-option label="分" value="month"></el-option>
  58. <el-option label="秒" value="year"></el-option>
  59. </el-select>
  60. </el-form-item>
  61. </el-col>
  62. </el-row>
  63. <!-- 停止条件行 -->
  64. <el-row :gutter="10" class="stop-condition-row">
  65. <el-col :span="9">
  66. <el-form-item label="停止条件:">
  67. <el-input
  68. v-model="formData.stopConditionParam"
  69. placeholder="请选择参数(非必填)"
  70. clearable
  71. @focus="setFocusedField('stopConditionParam')"
  72. @blur="clearFocusedField"
  73. ></el-input>
  74. </el-form-item>
  75. </el-col>
  76. <el-col :span="4">
  77. <el-form-item>
  78. <el-select
  79. v-model="formData.stopConditionOperator"
  80. placeholder="请选择"
  81. clearable
  82. >
  83. <el-option label="=" value="equal"></el-option>
  84. <el-option label=">" value="greater"></el-option>
  85. <el-option label="<" value="less"></el-option>
  86. <el-option label="≥" value="greaterEqual"></el-option>
  87. <el-option label="≤" value="lessEqual"></el-option>
  88. <el-option label="≠" value="≠"></el-option>
  89. </el-select>
  90. </el-form-item>
  91. </el-col>
  92. <el-col :span="8">
  93. <el-form-item>
  94. <el-input
  95. v-model="formData.stopConditionValue"
  96. placeholder="请选择/输入参数值"
  97. clearable
  98. @focus="setFocusedField('stopConditionValue')"
  99. @blur="clearFocusedField"
  100. ></el-input>
  101. </el-form-item>
  102. </el-col>
  103. </el-row>
  104. </el-form>
  105. </div>
  106. </template>
  107. <script>
  108. export default {
  109. name: "DatasChange",
  110. props: {
  111. formulainfo: {
  112. type: Object,
  113. default: function () {
  114. return {};
  115. }
  116. },
  117. curele: {
  118. type: Object,
  119. default: function () {
  120. return {};
  121. }
  122. },
  123. },
  124. data() {
  125. return {
  126. value1: true,
  127. focusedField: null, // 记录当前聚焦的字段
  128. formData: {
  129. changeMethod: '',
  130. dataFormat: 'time',
  131. coordinationElement: '',
  132. frequency: '',
  133. frequencyUnit: '',
  134. stopConditionParam: '',
  135. stopConditionOperator: 'equal',
  136. stopConditionValue: ''
  137. }
  138. };
  139. },
  140. mounted() {
  141. // 从props初始化表单数据
  142. if (this.formulainfo) {
  143. this.formData = { ...this.formData, ...this.formulainfo };
  144. }
  145. },
  146. methods: {
  147. showSelectEle() {
  148. this.$set(this.formulainfo, 'showSelectEle', !this.formulainfo.showSelectEle);
  149. this.$emit('select-element');
  150. },
  151. setELe(ele) {
  152. console.log(ele, 'ele');
  153. // 当有元素被选择且有聚焦的字段时,填充对应的值
  154. if (ele && ele.eName && this.focusedField) {
  155. this.$set(this.formData, this.focusedField, ele.eName);
  156. console.log(this.formData,'this.formData');
  157. // 可以选择在填充后取消聚焦状态
  158. this.focusedField = null;
  159. }
  160. },
  161. // 设置当前聚焦的字段
  162. setFocusedField(fieldName) {
  163. this.focusedField = fieldName;
  164. },
  165. // 清除聚焦状态
  166. clearFocusedField() {
  167. // 可以保留聚焦状态直到下一次操作,或立即清除
  168. // this.focusedField = null;
  169. }
  170. }
  171. };
  172. </script>
  173. <style scoped lang="scss">
  174. .data-change-form {
  175. background-color: #fff;
  176. border-radius: 4px;
  177. padding: 20px;
  178. }
  179. .form-title {
  180. font-size: 16px;
  181. font-weight: bold;
  182. margin-bottom: 5px;
  183. color: #333;
  184. }
  185. .form-container {
  186. width: 100%;
  187. }
  188. ::v-deep .el-row {
  189. margin-bottom: 5px;
  190. }
  191. ::v-deep .el-form-item {
  192. margin-bottom: 5px;
  193. // 确保输入框占满列宽
  194. ::v-deep .el-input,
  195. ::v-deep .el-select {
  196. width: 100%;
  197. }
  198. }
  199. // 停止条件行特殊样式
  200. .stop-condition-row {
  201. margin-top: 10px;
  202. }
  203. // 调整小屏幕显示
  204. @media screen and (max-width: 768px) {
  205. ::v-deep .el-col {
  206. margin-bottom: 5px;
  207. }
  208. }
  209. .stop-condition-row {
  210. margin-top: 10px;
  211. ::v-deep .el-col {
  212. padding-left: 5px !important;
  213. padding-right: 5px !important;
  214. }
  215. ::v-deep .el-form-item__content {
  216. width: 100% !important;
  217. }
  218. }
  219. .frequency-row {
  220. ::v-deep .el-col {
  221. padding-left: 0 !important;
  222. padding-right: 0 !important;
  223. }
  224. // 调整两个输入框之间的间距
  225. ::v-deep .el-col:last-child {
  226. padding-left: 5px !important;
  227. }
  228. }
  229. </style>