liriming
10 天以前 a484d883e1265f683dbf742b30799ca1324f5bd0
提交 | 用户 | 时间
d6fd1a 1 <template>
L 2   <Dialog v-model="dialogVisible" :title="dialogTitle" width="65%">
3     <el-form
4       ref="formRef"
5       v-loading="formLoading"
6       :model="dataForm"
7       :rules="formRules"
8       label-width="120px"
9     >
10       <el-row>
11         <el-col :span="12">
12           <el-form-item label="调度模型" prop="scheduleModelId">
13             <el-select v-model="dataForm.scheduleModelId" clearable placeholder="请选择调度模型">
14               <el-option
15                 v-for="item in scheduleModelList"
16                 :key="item.id"
17                 :label="item.modelName"
18                 :value="item.id"
19               />
20             </el-select>
21           </el-form-item>
22         </el-col>
23         <el-col :span="12">
24           <el-form-item label="状态" prop="status">
25             <el-select
26               v-model="dataForm.status"
27               placeholder="请选择"
28               clearable
29               style="width: 100%">
30               <el-option
a484d8 31                 v-for="dict in getIntDictOptions(DICT_TYPE.MODEL_STATUS)"
d6fd1a 32                 :key="dict.value"
L 33                 :label="dict.label"
34                 :value="dict.value"
35               />
36             </el-select>
37           </el-form-item>
38         </el-col>
39       </el-row>
40       <el-row>
41         <el-col :span="24">
42           <el-form-item label="备注" prop="remark">
43             <el-input v-model="dataForm.remark" placeholder="请输入备注"/>
44           </el-form-item>
45         </el-col>
46       </el-row>
47       <el-divider content-position="left">配置</el-divider>
48       <el-button
49         @click="addAdjustConfigDet()"
50         type="primary"
51         size="small">
52         添加
53       </el-button>
54       <el-table
55         :data="dataForm.adjustConfigDetList"
56         border
57         style="width: 100%; margin-top: 5px;">
58         <el-table-column prop="sort" label="执行顺序" align="center" width="90px"/>
59         <el-table-column label="预测项类型" align="center" width="220px">
60           <template #default="scope">
a484d8 61             <el-select v-model="scope.row.itemTypeId" placeholder="请选择" clearable @change="changeitemTypeId(scope.row)">
d6fd1a 62               <el-option
a484d8 63                 v-for="item in itemTypeList"
L 64                 :key="item.id"
65                 :label="item.itemtypename"
66                 :value="item.id"/>
d6fd1a 67             </el-select>
L 68           </template>
69         </el-table-column>
70         <el-table-column label="预测项名" align="center" width="300px">
71           <template #default="scope">
a484d8 72             <el-select
L 73               v-model="scope.row.predictItemId"
74               placeholder="请选择"
75               clearable>
d6fd1a 76               <el-option
a484d8 77                 v-for="item in predictItemList"
L 78                 :key="item.id"
79                 :label="item.itemname"
d6fd1a 80                 :value="item.id"/>
L 81             </el-select>
82           </template>
83         </el-table-column>
84         <el-table-column label="输出KEY" align="center">
85           <template #default="scope">
86             <el-input v-model="scope.row.outKey" placeholder="输出KEY"/>
87           </template>
88         </el-table-column>
89         <el-table-column label="输出名称" align="center">
90           <template #default="scope">
91             <el-input v-model="scope.row.outName" placeholder="输出名称"/>
92           </template>
93         </el-table-column>
94         <el-table-column label="参数排序" align="center" width="105px">
95           <template #default="scope">
96             <el-input v-model="scope.row.modelParamOrder" placeholder="参数排序"/>
97           </template>
98         </el-table-column>
99         <el-table-column label="输入排序" align="center" width="105px">
100           <template #default="scope">
101             <el-input v-model="scope.row.modelParamPortOrder" placeholder="输入排序"/>
102           </template>
103         </el-table-column>
104         <el-table-column prop="" label="操作" align="center" width="100px">
105           <template #default="scope">
106             <el-button
107               @click="deleteAdjustConfigDet(scope.$index, dataForm.adjustConfigDetList)"
108               type="text"
109               size="small">
110               删除
111             </el-button>
112           </template>
113         </el-table-column>
114       </el-table>
115     </el-form>
116     <template #footer>
117       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
118       <el-button @click="dialogVisible = false">取 消</el-button>
119     </template>
120   </Dialog>
121 </template>
122 <script lang="ts" setup>
123 import * as AdjustConfigApi from '@/api/model/sche/adjust'
124 import * as MmItemType from "@/api/model/pre/type";
a484d8 125 import * as MmPredictItem from "@/api/model/pre/item";
d6fd1a 126 import * as ScheduleModelApi from "@/api/model/sche/model";
a484d8 127 import {DICT_TYPE, getIntDictOptions} from "@/utils/dict";
d6fd1a 128
L 129 defineOptions({name: 'AdjustConfigForm'})
130
131 const {t} = useI18n() // 国际化
132 const message = useMessage() // 消息弹窗
133 const dialogVisible = ref(false) // 弹窗的是否展示
134 const dialogTitle = ref('') // 弹窗的标题
135 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
136 const formType = ref('') // 表单的类型:create - 新增;update - 修改
137 const itemTypeList = ref([])
a484d8 138 const predictItemList = ref([])
d6fd1a 139 const scheduleModelList = ref([] as ScheduleModelApi.ScheduleModelVO[])
L 140 const modelparamListMap = ref({})
141 const dataForm = ref({
142   id: undefined,
143   scheduleModelId: undefined,
144   status: undefined,
145   remark: undefined,
146   adjustConfigDetList: [],
147 })
148 const formRules = reactive({
149   scheduleModelId: [{required: true, message: '调度模型不能为空', trigger: 'blur'}],
150   status: [{required: true, message: '状态不能为空', trigger: 'blur'}],
a484d8 151 })
L 152 const queryParams = reactive({
153   itemtypeid: undefined,
d6fd1a 154 })
L 155 const formRef = ref() // 表单 Ref
156
157 /** 打开弹窗 */
158 const open = async (type: string, id?: number) => {
159   dialogVisible.value = true
160   dialogTitle.value = t('action.' + type)
161   formType.value = type
162   resetForm()
163   // 修改时,设置数据
164   if (id) {
165     formLoading.value = true
166     try {
167       dataForm.value = await AdjustConfigApi.getAdjustConfig(id)
168     } finally {
169       formLoading.value = false
170     }
171   }
172   // 加载调度模型列表
173   scheduleModelList.value = await ScheduleModelApi.getScheduleModelList()
174   // 加载参数列表
175   modelparamListMap.value = await ScheduleModelApi.getModelParamList()
176   // 获取预测项类型列表
177   itemTypeList.value = await MmItemType.getItemTypeList()
a484d8 178
L 179   predictItemList.value = await MmPredictItem.getMmPredictItemList(queryParams)
d6fd1a 180 }
L 181
182 defineExpose({open}) // 提供 open 方法,用于打开弹窗
183
184 /** 提交表单 */
185 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
186 const submitForm = async () => {
187   // 校验表单
188   if (!formRef) return
189   const valid = await formRef.value.validate()
190   if (!valid) return
191   // 提交请求
192   formLoading.value = true
193   try {
194     const data = dataForm.value as unknown as AdjustConfigApi.AdjustConfigVO
195     if (formType.value === 'create') {
196       await AdjustConfigApi.createAdjustConfig(data)
197       message.success(t('common.createSuccess'))
198     } else {
199       await AdjustConfigApi.updateAdjustConfig(data)
200       message.success(t('common.updateSuccess'))
201     }
202     dialogVisible.value = false
203     // 发送操作成功的事件
204     emit('success')
205   } finally {
206     formLoading.value = false
207   }
208 }
209
210 function changeitemTypeId(row) {
211   row.predictItemId = ''
a484d8 212   getInfo(row.itemTypeId)
L 213 }
214
215 const getInfo = async (itemTypeId) => {
216   queryParams.itemtypeid = itemTypeId
217   predictItemList.value = await MmPredictItem.getMmPredictItemList(queryParams)
d6fd1a 218 }
L 219
220 function addAdjustConfigDet() {
221   if (!dataForm.value.adjustConfigDetList) {
222     dataForm.value.adjustConfigDetList = []
223   }
224   dataForm.value.adjustConfigDetList.push({})
225   orderDet(dataForm.value.adjustConfigDetList)
226 }
227
228 function deleteAdjustConfigDet(index: string, rows) {
229   if (!rows || rows.length === 1) {
230     message.error('不能全部删除!')
231     return
232   }
233   rows.splice(index, 1)
234   orderDet(rows)
235 }
236
237 function orderDet(list) {
238   list.sort((a, b) => a.sort - b.sort);
239   let sort = 1
240   list.forEach(function (value) {
241     value.sort = sort
242     sort++
243   })
244 }
245
246 /** 重置表单 */
247 const resetForm = () => {
248   dataForm.value = {
249     id: undefined,
250     scheduleModelId: undefined,
251     status: undefined,
252     remark: undefined,
253     adjustConfigDetList: [],
254   }
255   formRef.value?.resetFields()
256
257 }
258 </script>