liriming
3 天以前 1220f5ca98b10b735a47c37a81fbfc554b01e2fe
提交 | 用户 | 时间
ebc552 1 <template>
L 2   <Dialog v-model="dialogVisible" :title="dialogTitle" width="50%">
3     <el-form
4       ref="formRef"
5       v-loading="formLoading"
6       :model="formData"
7       :rules="formRules"
8       label-width="120px"
9     >
10       <el-row>
11         <el-col :span="12">
12           <el-form-item label="消息标题" prop="title">
13             <el-input v-model="formData.title" placeholder="请输入消息标题"/>
14           </el-form-item>
15         </el-col>
16         <el-col :span="12">
17           <el-form-item label="监控对象" prop="alarmObj">
18             <el-input v-model="formData.alarmObj" placeholder="请输入监控对象"/>
19           </el-form-item>
20         </el-col>
21       </el-row>
22       <el-row>
23         <el-col :span="12">
24           <el-form-item label="预测项" prop="itemId">
25             <el-select
26               v-model="formData.itemId"
27               filterable
28               @change="handleChange(formData.itemId)"
29               placeholder="请选择">
30               <el-option
31                 v-for="(item, index) in predictItemList"
32                 :key="index"
33                 :label="item.itemname"
34                 :value="item.id"/>
35             </el-select>
36           </el-form-item>
37         </el-col>
38         <el-col :span="12">
39           <el-form-item label="输出" prop="outId">
40             <el-select
41               v-model="formData.outId"
42               filterable
43               placeholder="请选择">
44               <el-option
45                 v-for="(item, index) in outPutList"
46                 :key="index"
47                 :label="item.tagname"
48                 :value="item.id"/>
49             </el-select>
50           </el-form-item>
51         </el-col>
52       </el-row>
53       <el-row>
54         <el-col :span="12">
55           <el-form-item label="比较长度" prop="compLength">
56             <el-input-number v-model="formData.compLength" :min="1" clearable controls-position="right" style="width: 100%"/>
57           </el-form-item>
58         </el-col>
59         <el-col :span="12">
60           <el-form-item label="单位" prop="unit">
61             <el-input v-model="formData.unit" placeholder="请输入单位"/>
62           </el-form-item>
63         </el-col>
64       </el-row>
65       <el-row>
66         <el-col :span="12">
67           <el-form-item label="上限" prop="upperLimit">
68             <el-input-number v-model="formData.upperLimit" :min="1" clearable controls-position="right" style="width: 100%"/>
69           </el-form-item>
70         </el-col>
71         <el-col :span="12">
72           <el-form-item label="下限" prop="lowerLimit">
73             <el-input-number v-model="formData.lowerLimit" :min="1" clearable controls-position="right" style="width: 100%"/>
74           </el-form-item>
75         </el-col>
76       </el-row>
77       <el-row>
78         <el-col :span="12">
79           <el-form-item label="转换系数" prop="coefficient">
80             <el-input-number v-model="formData.coefficient" :min="1" clearable controls-position="right" style="width: 100%"/>
81           </el-form-item>
82         </el-col>
83         <el-col :span="12">
84           <el-form-item label="调度方案" prop="scheduleId">
85             <el-input v-model="formData.scheduleId" placeholder="请输入调度方案"/>
86           </el-form-item>
87         </el-col>
88       </el-row>
89       <el-row>
90         <el-col :span="12">
91           <el-form-item label="是否启用" prop="isEnable">
92             <el-select v-model="formData.isEnable" placeholder="请选择">
93               <el-option
94                 v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
95                 :key="dict.value"
96                 :label="dict.label"
97                 :value="dict.value"
98               />
99             </el-select>
100           </el-form-item>
101         </el-col>
102       </el-row>
103     </el-form>
104     <template #footer>
105       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
106       <el-button @click="dialogVisible = false">取 消</el-button>
107     </template>
108   </Dialog>
109 </template>
110 <script lang="ts" setup>
111 import * as MmPredictAlarmConfig from '@/api/model/pre/alarm/config'
112 import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
113 import * as MmPredictItem from '@/api/model/pre/item'
114
115 defineOptions({name: 'DataMmPredictAlarmConfigForm'})
116
117 const {t} = useI18n() // 国际化
118 const message = useMessage() // 消息弹窗
119 const dialogVisible = ref(false) // 弹窗的是否展示
120 const dialogTitle = ref('') // 弹窗的标题
121 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
122 const formType = ref('') // 表单的类型:create - 新增;update - 修改
123 const predictItemList = ref([])
124 const outPutList = ref([])
125 const formData = ref({
126   id: undefined,
127   title: undefined,
128   alarmObj: undefined,
129   itemId: undefined,
130   itemName: undefined,
131   outId: undefined,
132   compLength: undefined,
133   upperLimit: undefined,
134   lowerLimit: undefined,
135   unit: undefined,
136   coefficient: undefined,
137   scheduleId: undefined,
138   isEnable: undefined,
139 })
140 const formRules = reactive({
141   title: [{required: true, message: '消息标题不能为空', trigger: 'blur'}],
142   alarmObj: [{required: true, message: '监控对象不能为空', trigger: 'blur'}],
143   itemId: [{required: true, message: '预测项ID不能为空', trigger: 'blur'}],
144   outId: [{required: true, message: '输出ID不能为空', trigger: 'blur'}],
145 })
146 const formRef = ref() // 表单 Ref
147
148 /** 打开弹窗 */
149 const open = async (type: string, id?: number) => {
150   dialogVisible.value = true
151   dialogTitle.value = t('action.' + type)
152   formType.value = type
153   resetForm()
154
155   // 获取normal列表
156   predictItemList.value = await MmPredictItem.getMmPredictItemList({
157     itemtypename: 'NormalItem'
158   })
159   // 修改时,设置数据
160   if (id) {
161     formLoading.value = true
162     try {
163       formData.value = await MmPredictAlarmConfig.getMmPredictAlarmConfig(id)
164       await handleChange(formData.value.itemId)
165     } finally {
166       formLoading.value = false
167     }
168   }
169
170 }
171 defineExpose({open}) // 提供 open 方法,用于打开弹窗
172
173 /** 提交表单 */
174 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
175 const submitForm = async () => {
176   // 校验表单
177   if (!formRef) return
178   const valid = await formRef.value.validate()
179   if (!valid) return
180   // 提交请求
181   formLoading.value = true
182   try {
183     const data = formData.value as unknown as MmPredictAlarmConfig.MmPredictAlarmConfigVO
184     if (formType.value === 'create') {
185       await MmPredictAlarmConfig.createMmPredictAlarmConfig(data)
186       message.success(t('common.createSuccess'))
187     } else {
188       await MmPredictAlarmConfig.updateMmPredictAlarmConfig(data)
189       message.success(t('common.updateSuccess'))
190     }
191     dialogVisible.value = false
192     // 发送操作成功的事件
193     emit('success')
194   } finally {
195     formLoading.value = false
196   }
197 }
198
199 async function handleChange(itemid) {
200   const queryParams = reactive({
201     itemid: itemid,
202   })
203   outPutList.value = await MmPredictItem.getMmItemOutputList(queryParams)
204 }
205 /** 重置表单 */
206 const resetForm = () => {
207   formData.value = {
208     id: undefined,
209     title: undefined,
210     alarmObj: undefined,
211     itemId: undefined,
212     outId: undefined,
213     compLength: 1,
214     upperLimit: 1000000,
215     lowerLimit: 1,
216     unit: undefined,
217     coefficient: 1,
218     scheduleId: undefined,
219     isEnable: undefined,
220   }
221   formRef.value?.resetFields()
222 }
223 </script>