pre
潘志宝
2024-09-25 6e7f226b03fb059971b76d875671e2b662f29f1f
提交 | 用户 | 时间
7462da 1 <template>
L 2   <Dialog v-model="dialogVisible" :title="dialogTitle" width="50%">
3     <el-form
4       ref="formRef"
5       v-loading="formLoading"
cd9f11 6       :model="dataForm"
7462da 7       :rules="formRules"
L 8       label-width="120px"
9     >
cd9f11 10       <el-divider content-position="left">基本信息</el-divider>
7462da 11       <el-row>
L 12         <el-col :span="12">
2caade 13           <el-form-item label="预测项名">
83f63a 14             <el-input v-model="dataForm.mmPredictItem.itemname" placeholder="预测项名"/>
7462da 15           </el-form-item>
L 16         </el-col>
17         <el-col :span="12">
2caade 18           <el-form-item label="编号">
83f63a 19             <el-input v-model="dataForm.mmPredictItem.itemno" placeholder="编号" maxlength="50"/>
7462da 20           </el-form-item>
L 21         </el-col>
22       </el-row>
23       <el-row>
24         <el-col :span="12">
2caade 25           <el-form-item label="类型">
L 26             <el-select
27               v-model="dataForm.mmPredictItem.itemtypeid" @change="changeItemtype"
28               placeholder="请选择">
cd9f11 29               <el-option
L 30                 v-for="item in itemTypeList"
31                 :key="item.id"
32                 :label="item.itemtypename"
33                 :value="item.id"/>
34             </el-select>
7462da 35           </el-form-item>
L 36         </el-col>
37         <el-col :span="12">
2caade 38           <el-form-item label="粒度">
L 39             <el-input
40               v-model="dataForm.mmPredictItem.granularity" placeholder="粒度"
41               maxlength="5"/>
7462da 42           </el-form-item>
L 43         </el-col>
44       </el-row>
45       <el-row>
46         <el-col :span="12">
2caade 47           <el-form-item label="是否检查">
cd9f11 48             <el-select v-model="dataForm.mmPredictItem.workchecked" placeholder="请选择">
L 49               <el-option
50                 v-for="item in isList"
51                 :key="item.code"
52                 :label="item.name"
53                 :value="item.code"/>
54             </el-select>
7462da 55           </el-form-item>
L 56         </el-col>
57         <el-col :span="12">
2caade 58           <el-form-item label="是否启用">
cd9f11 59             <el-select v-model="dataForm.dmModuleItem.status" placeholder="请选择">
L 60               <el-option
61                 v-for="item in isList"
62                 :key="item.code"
63                 :label="item.name"
64                 :value="item.code"/>
65             </el-select>
7462da 66           </el-form-item>
L 67         </el-col>
68       </el-row>
69       <el-row>
70         <el-col :span="12">
2caade 71           <el-form-item label="管网">
cd9f11 72             <el-select v-model="dataForm.dmModuleItem.moduleid" placeholder="请选择">
L 73               <el-option
74                 v-for="item in moduleList"
75                 :key="item.id"
76                 :label="item.modulename"
77                 :value="item.id"/>
78             </el-select>
7462da 79           </el-form-item>
L 80         </el-col>
81         <el-col :span="12">
2caade 82           <el-form-item label="类别">
83f63a 83             <el-input v-model="dataForm.dmModuleItem.categoryid" placeholder="类别" maxlength="64"/>
7462da 84           </el-form-item>
L 85         </el-col>
86       </el-row>
87       <el-row>
88         <el-col :span="12">
2caade 89           <el-form-item label="排序">
83f63a 90             <el-input v-model="dataForm.dmModuleItem.itemorder" placeholder="排序" maxlength="36"/>
7462da 91           </el-form-item>
L 92         </el-col>
93         <el-col :span="12">
2caade 94           <el-form-item label="数据点">
cd9f11 95             <el-select
L 96               v-model="dataForm.mmItemOutput.pointid"
97               filterable
98               @change="changeOutputPoint"
99               placeholder="请选择">
100               <el-option
101                 v-for="item in pointList"
102                 :key="item.id"
103                 :label="item.pointname"
104                 :value="item.id"/>
105             </el-select>
7462da 106           </el-form-item>
L 107         </el-col>
108       </el-row>
b39d0b 109       <!--      <el-row>
L 110               <el-col :span="12">
111                 <el-form-item label="保存点位">
112                   <el-select v-model="dataForm.mmPredictItem.saveindex" placeholder="请选择">
113                     <el-option
114                       v-for="item in saveIndexList"
115                       :key="item.code"
116                       :label="item.name"
117                       :value="item.code"/>
118                   </el-select>
119                 </el-form-item>
120               </el-col>
121             </el-row>-->
cd9f11 122       <el-row v-if="dataForm.itemtypename === 'MergeItem'">
7462da 123         <el-col :span="12">
2caade 124           <el-form-item label="预测长度">
L 125             <el-input
126               v-model="dataForm.mmPredictItem.predictlength" placeholder="预测长度"
127               maxlength="5"/>
7462da 128           </el-form-item>
L 129         </el-col>
130       </el-row>
cd9f11 131       <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">模型信息
L 132       </el-divider>
133       <el-row v-if="dataForm.itemtypename === 'NormalItem'">
134         <el-col :span="24">
2caade 135           <el-form-item label="模型名称">
L 136             <el-input
137               v-model="dataForm.mmPredictModel.modelname" placeholder="模型名称"
138               maxlength="50"/>
cd9f11 139           </el-form-item>
L 140         </el-col>
7462da 141         <el-col :span="12">
2caade 142           <el-form-item label="编号" v-if="!!dataForm.id">
L 143             <el-input
144               v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="32"
145               disabled/>
7462da 146           </el-form-item>
L 147         </el-col>
148       </el-row>
cd9f11 149       <el-row v-if="dataForm.itemtypename === 'NormalItem'">
L 150         <el-col :span="12">
2caade 151           <el-form-item label="上传模型">
cd9f11 152             <el-upload
L 153               class="upload-demo"
154               :limit="1"
155               :file-list="fileList"
156               :before-upload="beforeUpload"
157               :on-success="uploadModelSuccess"
158               :on-error="uploadModelError"
159               :action="uploadModelUrl">
160               <el-button size="small" type="primary" @click="setReplaceModelOnly(0)">点击上传
161               </el-button>
2caade 162               <el-button
L 163                 size="small" type="primary" @click="setReplaceModelOnly(1)"
164                 v-if="!!dataForm.id">只替换模型
cd9f11 165               </el-button>
L 166             </el-upload>
167           </el-form-item>
168         </el-col>
169         <el-col :span="12">
2caade 170           <el-form-item label="结果">
cd9f11 171             <el-select v-model="dataForm.mmPredictModel.resultstrid" placeholder="请选择">
L 172               <el-option
173                 v-for="item in resultstridList"
174                 :key="item.id"
175                 :label="item.resultstr"
176                 :value="item.id"/>
177             </el-select>
178           </el-form-item>
179         </el-col>
180       </el-row>
181       <el-row v-if="dataForm.itemtypename === 'NormalItem'">
182         <el-col :span="24">
2caade 183           <el-form-item label="路径">
L 184             <el-input
185               v-model="dataForm.mmPredictModel.modelpath" placeholder="路径" maxlength="32"
186               disabled/>
cd9f11 187           </el-form-item>
L 188         </el-col>
189       </el-row>
190       <el-row v-if="dataForm.itemtypename === 'NormalItem'">
191         <el-col :span="24">
2caade 192           <el-form-item label="类名">
L 193             <el-input
194               v-model="dataForm.mmPredictModel.classname" placeholder="类名" maxlength="32"
195               disabled/>
cd9f11 196           </el-form-item>
L 197         </el-col>
198       </el-row>
199       <el-row v-if="dataForm.itemtypename === 'NormalItem'">
200         <el-col :span="12">
2caade 201           <el-form-item label="方法名">
L 202             <el-input
203               v-model="dataForm.mmPredictModel.methodname" placeholder="方法名"
204               maxlength="32" disabled/>
cd9f11 205           </el-form-item>
L 206         </el-col>
207         <el-col :span="12">
2caade 208           <el-form-item label="参数">
L 209             <el-input
210               v-model="dataForm.mmPredictModel.modelparamstructure" placeholder="参数"
211               maxlength="32" disabled/>
cd9f11 212           </el-form-item>
L 213         </el-col>
214       </el-row>
215       <el-table
216         v-if="dataForm.itemtypename === 'NormalItem'"
217         :data="dataForm.mmModelArithSettingsList"
218         border
219         style="width: 100%; margin-top: 5px;">
220         <el-table-column prop="key" label="键" align="center"/>
221         <el-table-column prop="name" label="名称" align="center"/>
222         <el-table-column prop="valuetype" label="类型" align="center"/>
223         <el-table-column prop="" label="值" align="center">
224           <template #default="scope">
83f63a 225             <el-input v-model="scope.row.value" maxlength="256" style="width:100%;height:100%"/>
cd9f11 226           </template>
L 227         </el-table-column>
228       </el-table>
229
230       <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">输入参数
231       </el-divider>
232       <el-table
2caade 233         v-if="dataForm.itemtypename === 'NormalItem'"
cd9f11 234         :data="dataForm.mmModelParamList"
L 235         border
236         style="width: 100%; margin-top: 5px;">
237         <el-table-column prop="modelparamportorder" label="端口" width="60" align="center"/>
238         <el-table-column prop="modelparamorder" label="序号" width="60" align="center"/>
239         <el-table-column prop="" label="类型" width="200" align="center">
240           <template #default="scope">
2caade 241             <el-select
L 242               v-model="scope.row.modelparamtype"
243               @change="changeModelparamtype(value, scope.row)" placeholder="请选择">
cd9f11 244               <el-option
L 245                 v-for="item in dataForm.modelparamtypeList"
246                 :key="item"
247                 :label="item"
248                 :value="item"/>
249             </el-select>
250           </template>
251         </el-table-column>
252         <el-table-column prop="" label="参数名称" align="center">
253           <template #default="scope">
254             <el-select
255               v-model="scope.row.modelparamid"
256               filterable
257               @change="changeModelparam(scope.row)"
258               placeholder="请选择">
259               <el-option
260                 v-for="(item, index) in modelparamListMap[scope.row.modelparamtype]"
261                 :key="index"
262                 :label="item.name"
263                 :value="item.id"/>
264             </el-select>
265           </template>
266         </el-table-column>
267         <el-table-column prop="" label="参数长度" width="120" align="center">
268           <template #default="scope">
2caade 269             <el-input
L 270               v-model="scope.row.datalength" maxlength="50"
271               style="width:100%;height:100%"/>
cd9f11 272           </template>
L 273         </el-table-column>
2caade 274         <el-table-column prop="" label="操作" width="140" align="center">
cd9f11 275           <template #default="scope">
L 276             <el-button
277               @click="addRow(scope.$index, dataForm.mmModelParamList)"
278               type="text"
279               size="small">
280               添加
281             </el-button>
282             <el-button
283               @click="deleteRow(scope.$index, dataForm.mmModelParamList)"
284               type="text"
285               size="small">
286               删除
287             </el-button>
288           </template>
289         </el-table-column>
290       </el-table>
291       <el-divider content-position="left" v-if="dataForm.itemtypename === 'MergeItem'">表达式
292       </el-divider>
293       <el-table
2caade 294         v-if="dataForm.itemtypename === 'MergeItem'"
cd9f11 295         :data="expressionList"
L 296         border
297         style="width: 100%; margin-top: 5px;">
298         <el-table-column
299           prop=""
300           label="预测项"
301           align="center">
302           <template #default="scope">
303             <el-select
304               v-model="scope.row.point"
305               filterable
306               placeholder="请选择">
307               <el-option
308                 v-for="(item, index) in predictItemList"
309                 :key="index"
310                 :label="item.name"
311                 :value="item.code"/>
312             </el-select>
313           </template>
314         </el-table-column>
315         <el-table-column
316           prop="point"
317           label="编号"
318           align="center"/>
319         <el-table-column
320           prop=""
321           label="运算符"
322           align="center">
323           <template #default="scope">
324             <el-select v-model="scope.row.operator" placeholder="请选择">
325               <el-option
326                 v-for="item in operatorList"
327                 :key="item"
328                 :label="item"
329                 :value="item"/>
330             </el-select>
331           </template>
332         </el-table-column>
333         <el-table-column
334           prop=""
335           label="操作"
2caade 336           width="140"
cd9f11 337           align="center">
L 338           <template #default="scope">
339             <el-button
340               @click="addExpressionRow(scope.$index, expressionList)"
341               type="text"
342               size="small">
343               添加
344             </el-button>
345             <el-button
346               @click="deleteExpressionRow(scope.$index, expressionList)"
347               type="text"
348               size="small">
349               删除
350             </el-button>
351           </template>
352         </el-table-column>
353       </el-table>
7462da 354     </el-form>
L 355     <template #footer>
356       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
357       <el-button @click="dialogVisible = false">取 消</el-button>
358     </template>
359   </Dialog>
360 </template>
361 <script lang="ts" setup>
362 import * as MmPredictItem from '@/api/model/pre/predict'
cd9f11 363 import * as MmItemType from '@/api/model/pre/item'
L 364 import * as DmModule from '@/api/model/pre/dm'
365 import * as MmResultTable from '@/api/model/pre/result'
366 import * as DaPoint from '@/api/data/da/point'
367 import * as ScheduleModelApi from '@/api/model/sche/model'
7462da 368
L 369 defineOptions({name: 'DataMmPredictItemForm'})
370
371 const {t} = useI18n() // 国际化
372 const message = useMessage() // 消息弹窗
373 const dialogVisible = ref(false) // 弹窗的是否展示
cd9f11 374 const pointLoading = ref(false) // 弹窗的是否展示
7462da 375 const dialogTitle = ref('') // 弹窗的标题
L 376 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
377 const formType = ref('') // 表单的类型:create - 新增;update - 修改
cd9f11 378 const uploadModelUrl = ''
L 379 const itemTypeList = ref([])
380 const itemTypeMap = ref({})
381 const moduleList = ref([])
382 const resulttableList = ref([])
383 const resultstridList = ref([])
2caade 384 const pointNoList = ref([])
cd9f11 385 const pointList = ref([])
L 386 const pointMap = ref({})
2caade 387 const predictList = ref([])
cd9f11 388 const predictItemList = ref([])
L 389 const modelparamList = ref([])
390 const modelparamListMap = ref([])
391 const modelparamMap = ref({})
392 const expressionList = ref([])
393 const fileList = ref([])
394 const operatorList = ['+', '-']
395 const replaceModelOnly = ref(0)
396 const queryParams = reactive({
397   pageNo: 1,
398   pageSize: 10,
399   pointNo: undefined,
400   pointName: undefined,
401 })
402 const isList = ref([
403   {
404     code: 0,
405     name: '否'
406   },
407   {
408     code: 1,
409     name: '是'
410   }])
2caade 411 /*const saveIndexList = ref([
cd9f11 412   {
L 413     code: '2',
414     name: 'T+2'
415   },
416   {
417     code: '30',
418     name: 'T+30'
419   },
420   {
421     code: 'n',
422     name: 'T+n'
2caade 423   }])*/
cd9f11 424 const dataForm = ref({
2caade 425   id: undefined,
L 426   itemtypename: undefined,
cd9f11 427   mmPredictItem: {
2caade 428     id: undefined,
L 429     itemno: undefined,
430     itemname: undefined,
431     caltypeid: undefined,
432     itemtypeid: undefined,
433     predictlength: undefined,
434     granularity: undefined,
435     status: undefined,
436     isfuse: undefined,
437     predictphase: undefined,
438     workchecked: '',
439     unittransfactor: undefined,
440     saveindex: undefined
cd9f11 441   },
L 442   dmModuleItem: {
2caade 443     id: undefined,
L 444     moduleid: undefined,
445     itemid: undefined,
446     itemorder: undefined,
447     status: undefined,
448     categoryid: undefined
cd9f11 449   },
L 450   mmItemOutput: {
2caade 451     id: undefined,
L 452     itemid: undefined,
453     pointid: undefined,
454     resulttableid: undefined,
455     tagname: undefined,
456     outputorder: undefined
cd9f11 457   },
L 458   mmPredictModel: {
2caade 459     id: undefined,
L 460     modelno: undefined,
461     modelname: undefined,
462     itemid: undefined,
463     arithid: undefined,
464     trainsamplength: undefined,
465     predictsamplength: undefined,
466     isonlinetrain: undefined,
467     modelpath: undefined,
468     isnormal: undefined,
469     normalmax: undefined,
470     normalmin: undefined,
471     status: undefined,
472     classname: undefined,
473     methodname: undefined,
474     modelparamstructure: undefined,
475     resultstrid: undefined,
476     settingmap: undefined
cd9f11 477   },
L 478   mmPredictMergeItem: {
2caade 479     id: undefined,
L 480     itemid: undefined,
481     expression: undefined,
482     num: undefined
cd9f11 483   },
L 484   modelparamtypeList: ['DATAPOINT', 'PREDICTITEM', 'DAYWORKPROCESSPLAN', 'MONTHWORKPROCESSPLAN', 'ST_PLAN_NQ', 'ST_PLAN_BQ', 'ST_PLAN_NQ_HI', 'ST_PLAN_BQ_HI'],
485   mmModelArithSettingsList: [],
486   mmModelParamList: []
7462da 487 })
L 488 const formRules = reactive({
cd9f11 489   // itemno: [{required: true, message: '编号不能为空', trigger: 'blur'}],
L 490   // itemname: [{required: true, message: '预测项名不能为空', trigger: 'blur'}],
7462da 491 })
L 492 const formRef = ref() // 表单 Ref
493
494 /** 打开弹窗 */
2caade 495 const open = async (type: string, id?: number, itemtypename?: string) => {
7462da 496   dialogVisible.value = true
L 497   dialogTitle.value = t('action.' + type)
498   formType.value = type
2caade 499   dataForm.value.itemtypename = itemtypename || 'NormalItem'
L 500   console.info(dataForm.value.itemtypename)
501   // resetForm()
502   resetFields(dataForm.value)
83f63a 503   setDefaultFields()
2caade 504   getItemTypeList()
L 505   getModuleList()
83f63a 506   getPointList()
2caade 507   getModelparamList()
L 508   getResulttableList()
509   getResultstridList()
7462da 510   // 修改时,设置数据
L 511   if (id) {
512     formLoading.value = true
513     try {
2caade 514       debugger
83f63a 515       getInfo(id)
7462da 516     } finally {
L 517       formLoading.value = false
518     }
519   }
520 }
521 defineExpose({open}) // 提供 open 方法,用于打开弹窗
522
523 /** 提交表单 */
524 const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
525 const submitForm = async () => {
526   // 校验表单
527   if (!formRef) return
528   const valid = await formRef.value.validate()
529   if (!valid) return
530   // 提交请求
531   formLoading.value = true
532   try {
cd9f11 533     const data = dataForm.value as unknown as MmPredictItem.MmPredictItemVO
b39d0b 534     debugger
L 535     if (expressionList.value && expressionList.value.length > 0) {
536       let expression = ''
537       for (let i = 0; i < expressionList.value.length; i++) {
538         let value = expressionList.value[i]
539         expression = expression + value.point + (i === (expressionList.value.length - 1) ? '' : value.operator)
540       }
541       dataForm.value.mmPredictMergeItem.expression = expression
542     } else {
543       dataForm.value.mmPredictMergeItem.expression = ''
544     }
545     if (dataForm.value.mmModelArithSettingsList) {
546       for (let item of dataForm.value.mmModelArithSettingsList) {
547         if (item.key === 'lenpredict') {
548           dataForm.value.mmPredictItem.predictlength = item.value
549         }
550       }
551     }
7462da 552     if (formType.value === 'create') {
L 553       await MmPredictItem.createMmPredictItem(data)
554       message.success(t('common.createSuccess'))
555     } else {
556       await MmPredictItem.updateMmPredictItem(data)
557       message.success(t('common.updateSuccess'))
558     }
559     dialogVisible.value = false
560     // 发送操作成功的事件
561     emit('success')
562   } finally {
563     formLoading.value = false
564   }
565 }
83f63a 566
2caade 567 const resetFields = (obj) => {
L 568   for (let key in obj) {
569     if (key === 'itemtypename') {
570       continue
571     }
572     if (obj[key] instanceof Array) {
573       obj[key] = []
574     } else if (obj[key] instanceof Object) {
575       resetFields(obj[key])
576     } else {
577       obj[key] = ''
578     }
579   }
580 }
581
582 const getInfo = async (id) => {
583   dataForm.value = await MmPredictItem.getMmPredictItem(id)
83f63a 584   expressionList.value = []
2caade 585   if (dataForm.value.mmPredictMergeItem && dataForm.value.mmPredictMergeItem.expression) {
L 586     let expression = dataForm.value.mmPredictMergeItem.expression
83f63a 587     do {
L 588       let indexPlus = expression.indexOf('+')
589       let indexSub = expression.indexOf('-')
590       if (indexPlus !== -1 || indexSub !== -1) {
591         let endIndex = (indexSub == -1 || (indexPlus < indexSub && indexPlus !== -1)) ? indexPlus : indexSub
592         expressionList.value.push({
593           point: expression.substring(0, endIndex),
2caade 594           operator: expression.substring(endIndex, 1)
83f63a 595         })
L 596         expression = expression.substring(endIndex + 1)
597       } else {
598         expressionList.value.push({
599           point: expression,
600           operator: ''
601         })
602         expression = ''
603       }
604     } while (expression && expression.length > 0)
605   }
606 }
607
608 function setReplaceModelOnly(value) {
cd9f11 609   replaceModelOnly.value = value
L 610 }
83f63a 611
L 612 function beforeUpload(file) {
cd9f11 613   let fileName = file.name
L 614   let first = fileName.lastIndexOf('.')
615   let nameLength = fileName.length
616   let fileSuffix = fileName.substring(first + 1, nameLength)
617   if (fileSuffix !== 'miail') {
618     message.error('只能上传miail类型文件')
619     return
620   }
621 }
83f63a 622
L 623 function uploadModelSuccess(response, file, fileList) {
cd9f11 624   if (response.code === 0) {
L 625     message.success(t('上传成功'))
626     dataForm.value.mmModelArithSettingsList = []
627     if (!replaceModelOnly) {
628       dataForm.value.mmModelParamList = []
629     }
630     dataForm.value.mmPredictModel.modelpath = ''
631     dataForm.value.mmPredictModel.modelparamstructure = ''
632     if (response.data.loadFieldSetList && response.data.loadFieldSetList[0].propertyList) {
83f63a 633       response.data.loadFieldSetList[0].propertyList.forEach(function (value) {
cd9f11 634         if (value.key !== 'data1') {
L 635           dataForm.value.mmModelArithSettingsList.push({
636             key: value.key,
637             name: value.name,
638             valuetype: value.valueType,
639             value: value.value
640           })
641         }
2caade 642       })
cd9f11 643     }
L 644     dataForm.value.mmPredictModel.classname = response.data.className
645     dataForm.value.mmPredictModel.methodname = response.data.methodName
646     if (response.data.paramPathList) {
647       dataForm.value.mmPredictModel.modelpath = response.data.paramPathList[0]
648     }
649     if (response.data.paramsArray) {
650       dataForm.value.mmPredictModel.modelparamstructure = response.data.paramsArray.join(',')
651     }
652     if (response.data.paramsCount && !replaceModelOnly) {
653       for (let i = 0; i < response.data.paramsCount; i++) {
654         dataForm.value.mmModelParamList.push({
655           modelparamportorder: (i + 1),
656           modelparamorder: (i + 1),
657           modelparamtype: '',
658           modelparamid: '',
659           modelparamname: '',
660           datalength: 0
661         })
662       }
663     }
664     if (response.data.settingConfigMap && response.data.settingConfigMap.settingMap) {
665       dataForm.value.mmPredictModel.settingmap = JSON.stringify(response.data.settingConfigMap.settingMap)
666     }
667   } else {
668     message.error('上传失败!' + response.msg)
669     return
670   }
671   fileList = []
672 }
83f63a 673
L 674 function uploadModelError(file, err, fileList) {
cd9f11 675 }
83f63a 676
L 677 function changeModelparam(row) {
cd9f11 678   row.modelparamname = modelparamMap[row.modelparamid]
L 679 }
83f63a 680
L 681 function changeItemtype(value) {
cd9f11 682   dataForm.value.itemtypename = itemTypeMap[value]
2caade 683   console.info(dataForm.value.itemtypename)
cd9f11 684 }
83f63a 685
L 686 function changeModelparamtype(value, row) {
cd9f11 687   row.modelparamid = ''
L 688 }
83f63a 689
L 690 function changeOutputPoint(value) {
cd9f11 691   dataForm.value.mmItemOutput.tagname = pointMap[value]
L 692 }
83f63a 693
L 694 function deleteExpressionRow(index, rows) {
cd9f11 695   rows.splice(index, 1)
L 696 }
83f63a 697
L 698 function addExpressionRow(index, rows) {
cd9f11 699   let row = JSON.parse(JSON.stringify(rows[index]))
L 700   rows.splice(index, 0, row)
701 }
83f63a 702
L 703 function deleteRow(index: string, rows) {
cd9f11 704   if (!rows || rows.length === 1) {
L 705     message.error('不能全部删除!')
706     return
707   }
708   rows.splice(index, 1)
709   orderRow(rows)
710 }
83f63a 711
L 712 function addRow(index: string, rows) {
cd9f11 713   let row = JSON.parse(JSON.stringify(rows[index]))
L 714   rows.splice(index, 0, row)
715   orderRow(rows)
716 }
7462da 717
83f63a 718 function orderRow(rows) {
cd9f11 719   let modelparamorder = 0
L 720   let modelparamportorder = 0
721   rows.forEach(function (value) {
722     if (value.modelparamportorder !== modelparamportorder) {
723       modelparamportorder = value.modelparamportorder
724       modelparamorder = 1
725     }
726     value.modelparamorder = modelparamorder
727     modelparamorder++
728   })
729 }
83f63a 730
cd9f11 731 // 获取预测项类型列表
2caade 732 const getItemTypeList = async () => {
cd9f11 733   itemTypeList.value = []
2caade 734   itemTypeList.value = await MmItemType.getItemTypeList()
83f63a 735   itemTypeList.value.forEach(function (value) {
cd9f11 736     itemTypeMap[value.id] = value.itemtypename
L 737   })
738   if (!dataForm.value.id) {
2caade 739     dataForm.value.mmPredictItem.itemtypeid = itemTypeList.value[0].id
cd9f11 740   }
L 741 }
83f63a 742
cd9f11 743 // 获取管网列表
2caade 744 const getModuleList = async () => {
cd9f11 745   moduleList.value = []
2caade 746   moduleList.value = await DmModule.getModuleList()
cd9f11 747 }
L 748
2caade 749 const getResulttableList = async () => {
cd9f11 750   resulttableList.value = []
2caade 751   resulttableList.value = await MmResultTable.getResulttableList()
cd9f11 752 }
83f63a 753
2caade 754 const getResultstridList = async () => {
cd9f11 755   resultstridList.value = []
2caade 756   resultstridList.value = await MmResultTable.getResultstridList()
cd9f11 757 }
83f63a 758
2caade 759 const getPointList = async () => {
cd9f11 760   pointLoading.value = true
2caade 761   pointNoList.value = await DaPoint.getPointList(queryParams)
L 762   if (pointNoList.value.length > 0) {
763     pointNoList.value.forEach(function (value) {
83f63a 764       pointList.value.push(value)
L 765       pointMap[value.id] = value.pointname
766     })
767   }
cd9f11 768 }
83f63a 769
2caade 770 const getModelparamList = async () => {
cd9f11 771   modelparamListMap.value = []
L 772   modelparamList.value = []
773   predictItemList.value = []
2caade 774   pointNoList.value = await DaPoint.getPointList(queryParams)
cd9f11 775   let paramList = []
2caade 776   if (pointNoList.value.length > 0) {
L 777     pointNoList.value.forEach(function (value) {
83f63a 778       paramList.push({
L 779         id: value.id,
780         code: value.pointno,
781         name: value.pointname,
782         type: 'DATAPOINT'
783       })
784       modelparamMap[value.id] = value.pointname
cd9f11 785     })
83f63a 786     modelparamListMap['DATAPOINT'] = paramList;
L 787   }
cd9f11 788
2caade 789   predictList.value = await MmPredictItem.getMmPredictItemList()
cd9f11 790   paramList = []
2caade 791   if (predictList.value.length > 0) {
L 792     predictList.value.forEach(function (value) {
83f63a 793       paramList.push({
cd9f11 794         id: value.id,
L 795         code: value.itemno,
83f63a 796         name: value.itemname,
L 797         type: 'PREDICTITEM'
cd9f11 798       })
83f63a 799       if (value.id !== dataForm.value.id) {
2caade 800         predictItemList.value.push({
83f63a 801           id: value.id,
L 802           code: value.itemno,
803           name: value.itemname
804         })
805       }
806       modelparamMap[value.id] = value.itemname
807     })
808     modelparamListMap['PREDICTITEM'] = paramList;
809   }
cd9f11 810
2caade 811   /*const dayParams = {
cd9f11 812     'processType': '日计划'
L 813   }
2caade 814   let dayScheduleRes = await ScheduleModelApi.getScheduleWorkPrecessList(dayParams)
cd9f11 815   paramList = []
83f63a 816   if (dayScheduleRes !== null) {
L 817     dayScheduleRes.forEach(function (value) {
818       paramList.push({
819         id: value.id,
820         code: value.code,
821         name: value.aliasName,
822         type: 'DAYWORKPROCESSPLAN'
823       })
824       modelparamMap[value.id] = value.aliasName
cd9f11 825     })
83f63a 826     modelparamListMap['DAYWORKPROCESSPLAN'] = paramList;
L 827   }
cd9f11 828
L 829   const monthParams = {
830     'processType': '月计划'
831   }
2caade 832   let monthScheduleRes = await ScheduleModelApi.getScheduleWorkPrecessList(monthParams)
cd9f11 833   paramList = []
83f63a 834   if (monthScheduleRes !== null) {
L 835     monthScheduleRes.forEach(function (value) {
836       paramList.push({
837         id: value.id,
838         code: value.code,
839         name: value.aliasName,
840         type: 'MONTHWORKPROCESSPLAN'
841       })
842       modelparamMap[value.id] = value.aliasName
cd9f11 843     })
83f63a 844     modelparamListMap['MONTHWORKPROCESSPLAN'] = paramList;
2caade 845   }*/
cd9f11 846 }
83f63a 847
2caade 848 const setDefaultFields = () => {
83f63a 849   dataForm.value.mmPredictItem.workchecked = 0
L 850   dataForm.value.mmPredictItem.status = 1
851   dataForm.value.mmPredictItem.isfuse = 0
852   dataForm.value.mmPredictItem.predictphase = 0
853   dataForm.value.mmPredictItem.unittransfactor = 1
854   dataForm.value.mmPredictItem.saveindex = '2'
855   dataForm.value.dmModuleItem.status = 1
856   dataForm.value.mmPredictModel.trainsamplength = 60
857   dataForm.value.mmPredictModel.isonlinetrain = 0
858   dataForm.value.mmPredictModel.status = 1
859   dataForm.value.mmItemOutput.outputorder = 1
860   dataForm.value.mmItemOutput.resulttableid = '3cc2b483-3a01-40f7-a419-0c260210d8eb'
861   expressionList.value = [{
862     point: '',
863     operator: ''
864   }]
865   fileList.value = []
866 }
867
7462da 868 /** 重置表单 */
2caade 869 /*const resetForm = () => {
cd9f11 870   dataForm.value = {
L 871     mmModelArithSettingsList: [],
872     mmModelParamList: [],
873     modelparamtypeList: [],
874     id: '',
875     itemtypename: '',
876     mmPredictItem: {
877       id: '',
878       itemno: '',
879       itemname: '',
880       caltypeid: '',
881       itemtypeid: '',
882       predictlength: '',
883       granularity: '',
884       status: '',
885       isfuse: '',
886       predictphase: '',
2caade 887       workchecked: '',
cd9f11 888       unittransfactor: '',
L 889       saveindex: ''
890     },
891     dmModuleItem: {
892       id: '',
893       moduleid: '',
894       itemid: '',
895       itemorder: '',
896       status: 1,
897       categoryid: ''
898     },
899     mmItemOutput: {
900       id: '',
901       itemid: '',
902       pointid: '',
903       resulttableid: '3cc2b483-3a01-40f7-a419-0c260210d8eb',
904       tagname: '',
905       outputorder: 1
906     },
907     mmPredictModel: {
908       id: '',
909       modelno: '',
910       modelname: '',
911       itemid: '',
912       arithid: '',
913       trainsamplength: '',
914       predictsamplength: '',
915       isonlinetrain: '',
916       modelpath: '',
917       isnormal: '',
918       normalmax: '',
919       normalmin: '',
920       status: 1,
921       classname: '',
922       methodname: '',
923       modelparamstructure: '',
924       resultstrid: '',
925       settingmap: ''
926     },
927     mmPredictMergeItem: {
928       id: '',
929       itemid: '',
930       expression: '',
931       num: ''
932     }
7462da 933   }
L 934   formRef.value?.resetFields()
2caade 935 }*/
cd9f11 936
L 937 onMounted(() => {
938   init()
939 })
940
83f63a 941 function init() {
cd9f11 942 }
7462da 943 </script>