From 83f63aed9767c3a5a9999e71f70680c0079349e6 Mon Sep 17 00:00:00 2001
From: liriming <1343021927@qq.com>
Date: 星期二, 24 九月 2024 10:13:14 +0800
Subject: [PATCH] 预测模型页面修改

---
 src/views/model/pre/predict/MmPredictItemForm.vue |  853 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 769 insertions(+), 84 deletions(-)

diff --git a/src/views/model/pre/predict/MmPredictItemForm.vue b/src/views/model/pre/predict/MmPredictItemForm.vue
index 9117ab0..fbc3506 100644
--- a/src/views/model/pre/predict/MmPredictItemForm.vue
+++ b/src/views/model/pre/predict/MmPredictItemForm.vue
@@ -3,101 +3,341 @@
     <el-form
       ref="formRef"
       v-loading="formLoading"
-      :model="formData"
+      :model="dataForm"
       :rules="formRules"
       label-width="120px"
     >
+      <el-divider content-position="left">基本信息</el-divider>
       <el-row>
-        <el-col :span="12">
-          <el-form-item label="编号" prop="itemno">
-            <el-input v-model="formData.itemno" placeholder="请输入编号"/>
-          </el-form-item>
-        </el-col>
         <el-col :span="12">
           <el-form-item label="预测项名" prop="itemname">
-            <el-input v-model="formData.itemname" placeholder="请输入预测项名"/>
+            <el-input v-model="dataForm.mmPredictItem.itemname" placeholder="预测项名"/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="编号" prop="itemno">
+            <el-input v-model="dataForm.mmPredictItem.itemno" placeholder="编号" maxlength="50"/>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
-          <el-form-item label="类型ID" prop="itemtypeid">
-            <el-input v-model="formData.itemtypeid" placeholder="请输入类型ID"/>
+          <el-form-item label="类型" prop="itemtypeid">
+            <el-select v-model="dataForm.mmPredictItem.itemtypeid" @change="changeItemtype"
+                       placeholder="请选择">
+              <el-option
+                v-for="item in itemTypeList"
+                :key="item.id"
+                :label="item.itemtypename"
+                :value="item.id"/>
+            </el-select>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
-          <el-form-item label="类型名称" prop="itemtypename">
-            <el-input v-model="formData.itemtypename" placeholder="请输入类型名称"/>
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <el-row>
         <el-col :span="12">
           <el-form-item label="粒度" prop="granularity">
-            <el-input v-model="formData.granularity" placeholder="请输入粒度"/>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="是否融合" prop="isfuse">
-            <el-input v-model="formData.isfuse" placeholder="请输入是否融合"/>
+            <el-input v-model="dataForm.mmPredictItem.granularity" placeholder="粒度"
+                      maxlength="5"/>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="是否检查" prop="workchecked">
-            <el-input v-model="formData.workchecked" placeholder="请输入是否检查"/>
+            <el-select v-model="dataForm.mmPredictItem.workchecked" placeholder="请选择">
+              <el-option
+                v-for="item in isList"
+                :key="item.code"
+                :label="item.name"
+                :value="item.code"/>
+            </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="模块ID" prop="moduleid">
-            <el-input v-model="formData.moduleid" placeholder="请输入模块ID"/>
+          <el-form-item label="是否启用" prop="status">
+            <el-select v-model="dataForm.dmModuleItem.status" placeholder="请选择">
+              <el-option
+                v-for="item in isList"
+                :key="item.code"
+                :label="item.name"
+                :value="item.code"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="12">
+          <el-form-item label="管网" prop="moduleid">
+            <el-select v-model="dataForm.dmModuleItem.moduleid" placeholder="请选择">
+              <el-option
+                v-for="item in moduleList"
+                :key="item.id"
+                :label="item.modulename"
+                :value="item.id"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="类别" prop="categoryid">
+            <el-input v-model="dataForm.dmModuleItem.categoryid" placeholder="类别" maxlength="64"/>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
           <el-form-item label="排序" prop="itemorder">
-            <el-input v-model="formData.itemorder" placeholder="请输入排序"/>
+            <el-input v-model="dataForm.dmModuleItem.itemorder" placeholder="排序" maxlength="36"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="是否启用" prop="status">
-            <el-input v-model="formData.status" placeholder="请输入是否启用"/>
+          <el-form-item label="数据点" prop="pointid">
+            <el-select
+              v-model="dataForm.mmItemOutput.pointid"
+              filterable
+              @change="changeOutputPoint"
+              placeholder="请选择">
+              <el-option
+                v-for="item in pointList"
+                :key="item.id"
+                :label="item.pointname"
+                :value="item.id"/>
+            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
-          <el-form-item label="类别ID" prop="categoryid">
-            <el-input v-model="formData.categoryid" placeholder="请输入类别ID"/>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="数据点ID" prop="pointid">
-            <el-input v-model="formData.pointid" placeholder="请输入数据点ID"/>
+          <el-form-item label="保存点位" prop="saveindex">
+            <el-select v-model="dataForm.mmPredictItem.saveindex" placeholder="请选择">
+              <el-option
+                v-for="item in saveIndexList"
+                :key="item.code"
+                :label="item.name"
+                :value="item.code"/>
+            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row>
+      <el-row v-if="dataForm.itemtypename === 'MergeItem'">
         <el-col :span="12">
-          <el-form-item label="数据点名称" prop="tagname">
-            <el-input v-model="formData.tagname" placeholder="请输入数据点名称"/>
-          </el-form-item>
-        </el-col>
-        <el-col :span="12">
-          <el-form-item label="存放表ID" prop="resulttableid">
-            <el-input v-model="formData.resulttableid" placeholder="请输入存放表ID"/>
+          <el-form-item label="预测长度" prop="predictlength">
+            <el-input v-model="dataForm.mmPredictItem.predictlength" placeholder="预测长度"
+                      maxlength="5"/>
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row>
+      <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">模型信息
+      </el-divider>
+      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+        <el-col :span="24">
+          <el-form-item label="模型名称" prop="modelname">
+            <el-input v-model="dataForm.mmPredictModel.modelname" placeholder="模型名称"
+                      maxlength="50"/>
+          </el-form-item>
+        </el-col>
         <el-col :span="12">
-          <el-form-item label="存放表" prop="tablename">
-            <el-input v-model="formData.tablename" placeholder="请输入存放表"/>
+          <el-form-item label="编号" prop="modelno" v-if="!!dataForm.id">
+            <el-input v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="32"
+                      disabled/>
           </el-form-item>
         </el-col>
       </el-row>
+      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+        <el-col :span="12">
+          <el-form-item label="上传模型" prop="itemorder">
+            <el-upload
+              class="upload-demo"
+              :limit="1"
+              :file-list="fileList"
+              :before-upload="beforeUpload"
+              :on-success="uploadModelSuccess"
+              :on-error="uploadModelError"
+              :action="uploadModelUrl">
+              <el-button size="small" type="primary" @click="setReplaceModelOnly(0)">点击上传
+              </el-button>
+              <el-button size="small" type="primary" @click="setReplaceModelOnly(1)"
+                         v-if="!!dataForm.id">只替换模型
+              </el-button>
+            </el-upload>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="结果" prop="resultstrid">
+            <el-select v-model="dataForm.mmPredictModel.resultstrid" placeholder="请选择">
+              <el-option
+                v-for="item in resultstridList"
+                :key="item.id"
+                :label="item.resultstr"
+                :value="item.id"/>
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+        <el-col :span="24">
+          <el-form-item label="路径" prop="modelpath">
+            <el-input v-model="dataForm.mmPredictModel.modelpath" placeholder="路径" maxlength="32"
+                      disabled/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+        <el-col :span="24">
+          <el-form-item label="类名" prop="classname">
+            <el-input v-model="dataForm.mmPredictModel.classname" placeholder="类名" maxlength="32"
+                      disabled/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+        <el-col :span="12">
+          <el-form-item label="方法名" prop="methodname">
+            <el-input v-model="dataForm.mmPredictModel.methodname" placeholder="方法名"
+                      maxlength="32" disabled/>
+          </el-form-item>
+        </el-col>
+        <el-col :span="12">
+          <el-form-item label="参数" prop="modelparamstructure">
+            <el-input v-model="dataForm.mmPredictModel.modelparamstructure" placeholder="参数"
+                      maxlength="32" disabled/>
+          </el-form-item>
+        </el-col>
+      </el-row>
+
+      <el-table
+        v-if="dataForm.itemtypename === 'NormalItem'"
+        :data="dataForm.mmModelArithSettingsList"
+        border
+        style="width: 100%; margin-top: 5px;">
+        <el-table-column prop="key" label="键" align="center"/>
+        <el-table-column prop="name" label="名称" align="center"/>
+        <el-table-column prop="valuetype" label="类型" align="center"/>
+        <el-table-column prop="" label="值" align="center">
+          <template #default="scope">
+            <el-input v-model="scope.row.value" maxlength="256" style="width:100%;height:100%"/>
+          </template>
+        </el-table-column>
+      </el-table>
+
+      <el-divider content-position="left" v-if="dataForm.itemtypename === 'NormalItem'">输入参数
+      </el-divider>
+      <el-table
+        :data="dataForm.mmModelParamList"
+        border
+        style="width: 100%; margin-top: 5px;">
+        <el-table-column prop="modelparamportorder" label="端口" width="60" align="center"/>
+        <el-table-column prop="modelparamorder" label="序号" width="60" align="center"/>
+        <el-table-column prop="" label="类型" width="200" align="center">
+          <template #default="scope">
+            <el-select v-model="scope.row.modelparamtype"
+                       @change="changeModelparamtype(value, scope.row)" placeholder="请选择">
+              <el-option
+                v-for="item in dataForm.modelparamtypeList"
+                :key="item"
+                :label="item"
+                :value="item"/>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="" label="参数名称" align="center">
+          <template #default="scope">
+            <el-select
+              v-model="scope.row.modelparamid"
+              filterable
+              @change="changeModelparam(scope.row)"
+              placeholder="请选择">
+              <el-option
+                v-for="(item, index) in modelparamListMap[scope.row.modelparamtype]"
+                :key="index"
+                :label="item.name"
+                :value="item.id"/>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="" label="参数长度" width="120" align="center">
+          <template #default="scope">
+            <el-input v-model="scope.row.datalength" maxlength="50"
+                      style="width:100%;hight:100%"/>
+          </template>
+        </el-table-column>
+        <el-table-column prop="" label="操作" width="100" align="center">
+          <template #default="scope">
+            <el-button
+              @click="addRow(scope.$index, dataForm.mmModelParamList)"
+              type="text"
+              size="small">
+              添加
+            </el-button>
+            <el-button
+              @click="deleteRow(scope.$index, dataForm.mmModelParamList)"
+              type="text"
+              size="small">
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-divider content-position="left" v-if="dataForm.itemtypename === 'MergeItem'">表达式
+      </el-divider>
+      <el-table
+        :data="expressionList"
+        border
+        style="width: 100%; margin-top: 5px;">
+        <el-table-column
+          prop=""
+          label="预测项"
+          align="center">
+          <template #default="scope">
+            <el-select
+              v-model="scope.row.point"
+              filterable
+              placeholder="请选择">
+              <el-option
+                v-for="(item, index) in predictItemList"
+                :key="index"
+                :label="item.name"
+                :value="item.code"/>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop="point"
+          label="编号"
+          align="center"/>
+        <el-table-column
+          prop=""
+          label="运算符"
+          align="center">
+          <template #default="scope">
+            <el-select v-model="scope.row.operator" placeholder="请选择">
+              <el-option
+                v-for="item in operatorList"
+                :key="item"
+                :label="item"
+                :value="item"/>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column
+          prop=""
+          label="操作"
+          width="100"
+          align="center">
+          <template #default="scope">
+            <el-button
+              @click="addExpressionRow(scope.$index, expressionList)"
+              type="text"
+              size="small">
+              添加
+            </el-button>
+            <el-button
+              @click="deleteExpressionRow(scope.$index, expressionList)"
+              type="text"
+              size="small">
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
     </el-form>
     <template #footer>
       <el-button :disabled="formLoading" type="primary" @click="submitForm">确 定</el-button>
@@ -107,36 +347,132 @@
 </template>
 <script lang="ts" setup>
 import * as MmPredictItem from '@/api/model/pre/predict'
+import * as MmItemType from '@/api/model/pre/item'
+import * as DmModule from '@/api/model/pre/dm'
+import * as MmResultTable from '@/api/model/pre/result'
+import * as DaPoint from '@/api/data/da/point'
+import * as ScheduleModelApi from '@/api/model/sche/model'
 
 defineOptions({name: 'DataMmPredictItemForm'})
 
 const {t} = useI18n() // 国际化
 const message = useMessage() // 消息弹窗
 const dialogVisible = ref(false) // 弹窗的是否展示
+const pointLoading = ref(false) // 弹窗的是否展示
 const dialogTitle = ref('') // 弹窗的标题
 const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
 const formType = ref('') // 表单的类型:create - 新增;update - 修改
-const formData = ref({
-  id: undefined,
-  itemno: undefined,
-  itemname: undefined,
-  itemtypeid: undefined,
-  itemtypename: undefined,
-  granularity: undefined,
-  isfuse: undefined,
-  workchecked: undefined,
-  moduleid: undefined,
-  itemorder: undefined,
-  status: undefined,
-  categoryid: undefined,
-  pointid: undefined,
-  tagname: undefined,
-  resulttableid: undefined,
-  tablename: undefined,
+const uploadModelUrl = ''
+const itemTypeList = ref([])
+const itemTypeMap = ref({})
+const moduleList = ref([])
+const resulttableList = ref([])
+const resultstridList = ref([])
+const pointList = ref([])
+const pointMap = ref({})
+const predictItemList = ref([])
+const modelparamList = ref([])
+const modelparamListMap = ref([])
+const modelparamMap = ref({})
+const expressionList = ref([])
+const fileList = ref([])
+const operatorList = ['+', '-']
+const replaceModelOnly = ref(0)
+const queryParams = reactive({
+  pageNo: 1,
+  pageSize: 10,
+  pointNo: undefined,
+  pointName: undefined,
+})
+const isList = ref([
+  {
+    code: 0,
+    name: '否'
+  },
+  {
+    code: 1,
+    name: '是'
+  }])
+const saveIndexList = ref([
+  {
+    code: '2',
+    name: 'T+2'
+  },
+  {
+    code: '30',
+    name: 'T+30'
+  },
+  {
+    code: 'n',
+    name: 'T+n'
+  }])
+const dataForm = ref({
+  id: '',
+  itemtypename: '',
+  mmPredictItem: {
+    id: '',
+    itemno: '',
+    itemname: '',
+    caltypeid: '',
+    itemtypeid: '',
+    predictlength: '',
+    granularity: '',
+    status: '',
+    isfuse: '',
+    predictphase: '',
+    workchecked: 0,
+    unittransfactor: '',
+    saveindex: ''
+  },
+  dmModuleItem: {
+    id: '',
+    moduleid: '',
+    itemid: '',
+    itemorder: '',
+    status: 1,
+    categoryid: ''
+  },
+  mmItemOutput: {
+    id: '',
+    itemid: '',
+    pointid: '',
+    resulttableid: '3cc2b483-3a01-40f7-a419-0c260210d8eb',
+    tagname: '',
+    outputorder: 1
+  },
+  mmPredictModel: {
+    id: '',
+    modelno: '',
+    modelname: '',
+    itemid: '',
+    arithid: '',
+    trainsamplength: '',
+    predictsamplength: '',
+    isonlinetrain: '',
+    modelpath: '',
+    isnormal: '',
+    normalmax: '',
+    normalmin: '',
+    status: 1,
+    classname: '',
+    methodname: '',
+    modelparamstructure: '',
+    resultstrid: '',
+    settingmap: ''
+  },
+  mmPredictMergeItem: {
+    id: '',
+    itemid: '',
+    expression: '',
+    num: ''
+  },
+  modelparamtypeList: ['DATAPOINT', 'PREDICTITEM', 'DAYWORKPROCESSPLAN', 'MONTHWORKPROCESSPLAN', 'ST_PLAN_NQ', 'ST_PLAN_BQ', 'ST_PLAN_NQ_HI', 'ST_PLAN_BQ_HI'],
+  mmModelArithSettingsList: [],
+  mmModelParamList: []
 })
 const formRules = reactive({
-  itemno: [{required: true, message: '编号不能为空', trigger: 'blur'}],
-  itemname: [{required: true, message: '预测项名不能为空', trigger: 'blur'}],
+  // itemno: [{required: true, message: '编号不能为空', trigger: 'blur'}],
+  // itemname: [{required: true, message: '预测项名不能为空', trigger: 'blur'}],
 })
 const formRef = ref() // 表单 Ref
 
@@ -146,11 +482,18 @@
   dialogTitle.value = t('action.' + type)
   formType.value = type
   resetForm()
+  setDefaultFields()
+  // getItemTypeList()
+  // getModuleList()
+  getPointList()
+  // getModelparamList()
+  // getResulttableList()
+  // getResultstridList()
   // 修改时,设置数据
   if (id) {
     formLoading.value = true
     try {
-      formData.value = await MmPredictItem.getMmPredictItem(id)
+      getInfo(id)
     } finally {
       formLoading.value = false
     }
@@ -168,7 +511,7 @@
   // 提交请求
   formLoading.value = true
   try {
-    const data = formData.value as unknown as MmPredictItem.MmPredictItemVO
+    const data = dataForm.value as unknown as MmPredictItem.MmPredictItemVO
     if (formType.value === 'create') {
       await MmPredictItem.createMmPredictItem(data)
       message.success(t('common.createSuccess'))
@@ -184,26 +527,368 @@
   }
 }
 
+function getInfo(id) {
+  debugger
+  const res = MmPredictItem.getMmPredictItem(id)
+  console.info(res)
+  expressionList.value = []
+  if (res.mmPredictMergeItem && res.mmPredictMergeItem.expression) {
+    let expression = res.mmPredictMergeItem.expression
+    do {
+      let indexPlus = expression.indexOf('+')
+      let indexSub = expression.indexOf('-')
+      if (indexPlus !== -1 || indexSub !== -1) {
+        let endIndex = (indexSub == -1 || (indexPlus < indexSub && indexPlus !== -1)) ? indexPlus : indexSub
+        expressionList.value.push({
+          point: expression.substring(0, endIndex),
+          operator: expression.substr(endIndex, 1)
+        })
+        expression = expression.substring(endIndex + 1)
+      } else {
+        expressionList.value.push({
+          point: expression,
+          operator: ''
+        })
+        expression = ''
+      }
+    } while (expression && expression.length > 0)
+  }
+}
+
+function setReplaceModelOnly(value) {
+  replaceModelOnly.value = value
+}
+
+function beforeUpload(file) {
+  let fileName = file.name
+  let first = fileName.lastIndexOf('.')
+  let nameLength = fileName.length
+  let fileSuffix = fileName.substring(first + 1, nameLength)
+  if (fileSuffix !== 'miail') {
+    message.error('只能上传miail类型文件')
+    return
+  }
+}
+
+function uploadModelSuccess(response, file, fileList) {
+  if (response.code === 0) {
+    message.success(t('上传成功'))
+    dataForm.value.mmModelArithSettingsList = []
+    if (!replaceModelOnly) {
+      dataForm.value.mmModelParamList = []
+    }
+    dataForm.value.mmPredictModel.modelpath = ''
+    dataForm.value.mmPredictModel.modelparamstructure = ''
+    if (response.data.loadFieldSetList && response.data.loadFieldSetList[0].propertyList) {
+      response.data.loadFieldSetList[0].propertyList.forEach(function (value) {
+        if (value.key !== 'data1') {
+          dataForm.value.mmModelArithSettingsList.push({
+            key: value.key,
+            name: value.name,
+            valuetype: value.valueType,
+            value: value.value
+          })
+        }
+      }, this)
+    }
+    dataForm.value.mmPredictModel.classname = response.data.className
+    dataForm.value.mmPredictModel.methodname = response.data.methodName
+    if (response.data.paramPathList) {
+      dataForm.value.mmPredictModel.modelpath = response.data.paramPathList[0]
+    }
+    if (response.data.paramsArray) {
+      dataForm.value.mmPredictModel.modelparamstructure = response.data.paramsArray.join(',')
+    }
+    if (response.data.paramsCount && !replaceModelOnly) {
+      for (let i = 0; i < response.data.paramsCount; i++) {
+        dataForm.value.mmModelParamList.push({
+          modelparamportorder: (i + 1),
+          modelparamorder: (i + 1),
+          modelparamtype: '',
+          modelparamid: '',
+          modelparamname: '',
+          datalength: 0
+        })
+      }
+    }
+    if (response.data.settingConfigMap && response.data.settingConfigMap.settingMap) {
+      dataForm.value.mmPredictModel.settingmap = JSON.stringify(response.data.settingConfigMap.settingMap)
+    }
+  } else {
+    message.error('上传失败!' + response.msg)
+    return
+  }
+  fileList = []
+}
+
+function uploadModelError(file, err, fileList) {
+}
+
+function changeModelparam(row) {
+  row.modelparamname = modelparamMap[row.modelparamid]
+}
+
+function changeItemtype(value) {
+  dataForm.value.itemtypename = itemTypeMap[value]
+}
+
+function changeModelparamtype(value, row) {
+  row.modelparamid = ''
+}
+
+function changeOutputPoint(value) {
+  dataForm.value.mmItemOutput.tagname = pointMap[value]
+}
+
+function deleteExpressionRow(index, rows) {
+  rows.splice(index, 1)
+}
+
+function addExpressionRow(index, rows) {
+  let row = JSON.parse(JSON.stringify(rows[index]))
+  rows.splice(index, 0, row)
+}
+
+function deleteRow(index: string, rows) {
+  if (!rows || rows.length === 1) {
+    message.error('不能全部删除!')
+    return
+  }
+  rows.splice(index, 1)
+  orderRow(rows)
+}
+
+function addRow(index: string, rows) {
+  let row = JSON.parse(JSON.stringify(rows[index]))
+  rows.splice(index, 0, row)
+  orderRow(rows)
+}
+
+function orderRow(rows) {
+  let modelparamorder = 0
+  let modelparamportorder = 0
+  rows.forEach(function (value) {
+    if (value.modelparamportorder !== modelparamportorder) {
+      modelparamportorder = value.modelparamportorder
+      modelparamorder = 1
+    }
+    value.modelparamorder = modelparamorder
+    modelparamorder++
+  })
+}
+
+// 获取预测项类型列表
+function getItemTypeList() {
+  itemTypeList.value = []
+  itemTypeList.value = MmItemType.getItemTypeList()
+  itemTypeList.value.forEach(function (value) {
+    itemTypeMap[value.id] = value.itemtypename
+  })
+  if (!dataForm.value.id) {
+    // dataForm.value.mmPredictItem.itemtypeid = itemTypeList[0].id
+  }
+}
+
+// 获取管网列表
+function getModuleList() {
+  moduleList.value = []
+  moduleList.value = DmModule.getModuleList()
+}
+
+function getResulttableList() {
+  resulttableList.value = []
+  resulttableList.value = MmResultTable.getResulttableList()
+}
+
+function getResultstridList() {
+  resultstridList.value = []
+  resultstridList.value = MmResultTable.getResultstridList()
+}
+
+function getPointList() {
+  pointLoading.value = true
+  pointList.value = DaPoint.getPointList(queryParams)
+  if (pointList.value.length > 0) {
+    pointList.value.forEach(function (value) {
+      pointList.value.push(value)
+      pointMap[value.id] = value.pointname
+    })
+  }
+}
+
+function getModelparamList() {
+  modelparamListMap.value = []
+  modelparamList.value = []
+  predictItemList.value = []
+  pointList.value = DaPoint.getPointList(queryParams)
+  let paramList = []
+  if (pointList.value.length > 0) {
+    pointList.value.forEach(function (value) {
+      paramList.push({
+        id: value.id,
+        code: value.pointno,
+        name: value.pointname,
+        type: 'DATAPOINT'
+      })
+      modelparamMap[value.id] = value.pointname
+    })
+    modelparamListMap['DATAPOINT'] = paramList;
+  }
+
+  let predictRes = MmPredictItem.getMmPredictItemList
+  paramList = []
+  if (predictRes.value.length > 0) {
+    predictRes.forEach(function (value) {
+      paramList.push({
+        id: value.id,
+        code: value.itemno,
+        name: value.itemname,
+        type: 'PREDICTITEM'
+      })
+      if (value.id !== dataForm.value.id) {
+        predictItemList.push({
+          id: value.id,
+          code: value.itemno,
+          name: value.itemname
+        })
+      }
+      modelparamMap[value.id] = value.itemname
+    })
+    modelparamListMap['PREDICTITEM'] = paramList;
+  }
+
+  const dayParams = {
+    'processType': '日计划'
+  }
+  let dayScheduleRes = ScheduleModelApi.getScheduleWorkPrecessList(dayParams)
+  paramList = []
+  if (dayScheduleRes !== null) {
+    dayScheduleRes.forEach(function (value) {
+      paramList.push({
+        id: value.id,
+        code: value.code,
+        name: value.aliasName,
+        type: 'DAYWORKPROCESSPLAN'
+      })
+      modelparamMap[value.id] = value.aliasName
+    })
+    modelparamListMap['DAYWORKPROCESSPLAN'] = paramList;
+  }
+
+  const monthParams = {
+    'processType': '月计划'
+  }
+  let monthScheduleRes = ScheduleModelApi.getScheduleWorkPrecessList(monthParams)
+  paramList = []
+  if (monthScheduleRes !== null) {
+    monthScheduleRes.forEach(function (value) {
+      paramList.push({
+        id: value.id,
+        code: value.code,
+        name: value.aliasName,
+        type: 'MONTHWORKPROCESSPLAN'
+      })
+      modelparamMap[value.id] = value.aliasName
+    })
+    modelparamListMap['MONTHWORKPROCESSPLAN'] = paramList;
+  }
+}
+
+function setDefaultFields() {
+  dataForm.value.mmPredictItem.workchecked = 0
+  dataForm.value.mmPredictItem.predictlength = 60
+  dataForm.value.mmPredictItem.status = 1
+  dataForm.value.mmPredictItem.isfuse = 0
+  dataForm.value.mmPredictItem.predictphase = 0
+  dataForm.value.mmPredictItem.unittransfactor = 1
+  dataForm.value.mmPredictItem.saveindex = '2'
+  dataForm.value.dmModuleItem.status = 1
+  dataForm.value.mmPredictModel.trainsamplength = 60
+  dataForm.value.mmPredictModel.isonlinetrain = 0
+  dataForm.value.mmPredictModel.status = 1
+  dataForm.value.mmItemOutput.outputorder = 1
+  dataForm.value.mmItemOutput.resulttableid = '3cc2b483-3a01-40f7-a419-0c260210d8eb'
+  expressionList.value = [{
+    point: '',
+    operator: ''
+  }]
+  fileList.value = []
+}
+
 /** 重置表单 */
 const resetForm = () => {
-  formData.value = {
-    id: undefined,
-    itemno: undefined,
-    itemname: undefined,
-    itemtypeid: undefined,
-    itemtypename: undefined,
-    granularity: undefined,
-    isfuse: undefined,
-    workchecked: undefined,
-    moduleid: undefined,
-    itemorder: undefined,
-    status: undefined,
-    categoryid: undefined,
-    pointid: undefined,
-    tagname: undefined,
-    resulttableid: undefined,
-    tablename: undefined,
+  dataForm.value = {
+    mmModelArithSettingsList: [],
+    mmModelParamList: [],
+    modelparamtypeList: [],
+    id: '',
+    itemtypename: '',
+    mmPredictItem: {
+      id: '',
+      itemno: '',
+      itemname: '',
+      caltypeid: '',
+      itemtypeid: '',
+      predictlength: '',
+      granularity: '',
+      status: '',
+      isfuse: '',
+      predictphase: '',
+      workchecked: 0,
+      unittransfactor: '',
+      saveindex: ''
+    },
+    dmModuleItem: {
+      id: '',
+      moduleid: '',
+      itemid: '',
+      itemorder: '',
+      status: 1,
+      categoryid: ''
+    },
+    mmItemOutput: {
+      id: '',
+      itemid: '',
+      pointid: '',
+      resulttableid: '3cc2b483-3a01-40f7-a419-0c260210d8eb',
+      tagname: '',
+      outputorder: 1
+    },
+    mmPredictModel: {
+      id: '',
+      modelno: '',
+      modelname: '',
+      itemid: '',
+      arithid: '',
+      trainsamplength: '',
+      predictsamplength: '',
+      isonlinetrain: '',
+      modelpath: '',
+      isnormal: '',
+      normalmax: '',
+      normalmin: '',
+      status: 1,
+      classname: '',
+      methodname: '',
+      modelparamstructure: '',
+      resultstrid: '',
+      settingmap: ''
+    },
+    mmPredictMergeItem: {
+      id: '',
+      itemid: '',
+      expression: '',
+      num: ''
+    }
   }
   formRef.value?.resetFields()
 }
+
+onMounted(() => {
+  init()
+})
+
+function init() {
+
+}
 </script>

--
Gitblit v1.9.3