juhe.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. <template>
  2. <div class="system-edit-dic-container">
  3. <el-dialog title="设置聚合" v-model="isShowDialog" width="769px">
  4. <el-form :model="ruleForm" ref="formRef" :rules="rules" size="default" label-width="110px">
  5. <el-form-item label="分组节点" prop="GroupNodeKey">
  6. <el-select v-model="ruleForm.GroupNodeKey" filterable placeholder="请选择分组节点" class="w100">
  7. <el-option v-for="item in sourceData" :key="item.id" :label="item.name" :value="item.key">
  8. <span style="float: left">{{ item.name }}</span>
  9. <span style="float: right; font-size: 13px">{{ item.key }}</span>
  10. </el-option>
  11. </el-select>
  12. </el-form-item>
  13. <el-form-item label="时间窗口节点" prop="TimeNodeKey">
  14. <el-select v-model="ruleForm.TimeNodeKey" filterable placeholder="请选择时间窗口节点" class="w100">
  15. <el-option v-for="item in sourceData" :key="item.id" :label="item.name" :value="item.key">
  16. <span style="float: left">{{ item.name }}</span>
  17. <span style="float: right; font-size: 13px">{{ item.key }}</span>
  18. </el-option>
  19. </el-select>
  20. </el-form-item>
  21. <el-form-item label="时间值" prop="Duration">
  22. <el-input v-model="ruleForm.Duration" placeholder="请输入时间值" class="w-35" />
  23. <el-select v-model="ruleForm.TimeUnit" placeholder="请选择单位">
  24. <el-option v-for="item in unitData" :key="item.value" :label="item.label" :value="item.value" />
  25. </el-select>
  26. </el-form-item>
  27. </el-form>
  28. <template #footer>
  29. <span class="dialog-footer">
  30. <el-button @click="onCancel" size="default">取 消</el-button>
  31. <el-button type="primary" @click="onSubmit" size="default">设置</el-button>
  32. </span>
  33. </template>
  34. </el-dialog>
  35. </div>
  36. </template>
  37. <script lang="ts">
  38. import { reactive, toRefs, defineComponent, ref, unref } from 'vue';
  39. import api from '/@/api/datahub';
  40. import { ElMessage } from 'element-plus';
  41. interface RuleFormState {
  42. id?: number;
  43. GroupNodeKey: string;
  44. TimeNodeKey: string;
  45. Duration: string;
  46. TimeUnit: string;
  47. }
  48. interface DicState {
  49. isShowDialog: boolean;
  50. ruleForm: RuleFormState;
  51. rules: {};
  52. unitData:[];
  53. }
  54. export default defineComponent({
  55. name: 'Edit',
  56. setup(prop, { emit }) {
  57. const formRef = ref<HTMLElement | null>(null);
  58. const state = reactive<DicState>({
  59. isShowDialog: false,
  60. sourceData:[],
  61. unitData: [
  62. {
  63. label: '秒',
  64. value: 1,
  65. },
  66. {
  67. label: '分',
  68. value: 2,
  69. },
  70. {
  71. label: '时',
  72. value: 3,
  73. },
  74. {
  75. label: '天',
  76. value: 4,
  77. },
  78. ],
  79. ruleForm: {
  80. id: 0,
  81. GroupNodeKey: '',
  82. TimeNodeKey: '',
  83. Duration: '',
  84. TimeUnit: '',
  85. },
  86. rules: {
  87. GroupNodeKey: [{ required: true, message: '分组节点key不能为空', trigger: 'blur' }],
  88. TimeNodeKey: [{ required: true, message: '时间窗口节点key不能为空', trigger: 'blur' }],
  89. Duration: [{ required: true, message: '时间值不能为空', trigger: 'blur' }],
  90. TimeUnit: [{ required: true, message: '时间单位不能为空', trigger: 'blur' }],
  91. },
  92. });
  93. // 打开弹窗
  94. const openDialog = (row: RuleFormState | null) => {
  95. resetForm();
  96. if (row) {
  97. state.ruleForm.id=row.id;
  98. api.template.aggregate_from(row.id).then((res: any) => {
  99. api.node.getList({sourceId:res.id}).then((res: any) => {
  100. state.sourceData=res.list
  101. state.ruleForm.GroupNodeKey=row.groupNodeKey;
  102. state.ruleForm.TimeNodeKey=row.timeNodeKey;
  103. state.ruleForm.Duration=row.duration;
  104. state.ruleForm.TimeUnit=row.timeUnit;
  105. })
  106. });
  107. }
  108. state.isShowDialog = true;
  109. };
  110. const resetForm = () => {
  111. state.ruleForm = {
  112. id: 0,
  113. GroupNodeKey: '',
  114. TimeNodeKey: '',
  115. Duration: '',
  116. TimeUnit: '',
  117. };
  118. };
  119. // 关闭弹窗
  120. const closeDialog = () => {
  121. state.isShowDialog = false;
  122. };
  123. // 取消
  124. const onCancel = () => {
  125. closeDialog();
  126. };
  127. // 新增
  128. const onSubmit = () => {
  129. const formWrap = unref(formRef) as any;
  130. if (!formWrap) return;
  131. formWrap.validate((valid: boolean) => {
  132. if (valid) {
  133. api.template.aggregate(state.ruleForm).then(() => {
  134. ElMessage.success('设置成功');
  135. closeDialog(); // 关闭弹窗
  136. emit('typeList');
  137. });
  138. }
  139. });
  140. };
  141. return {
  142. openDialog,
  143. closeDialog,
  144. onCancel,
  145. onSubmit,
  146. formRef,
  147. ...toRefs(state),
  148. };
  149. },
  150. });
  151. </script>