From d3ee81e33f92f23ee579f3d72c26e011523e166b Mon Sep 17 00:00:00 2001
From: 潘志宝 <979469083@qq.com>
Date: 星期四, 26 九月 2024 14:36:34 +0800
Subject: [PATCH] sche 测点配置

---
 src/views/model/pre/item/MmPredictItemForm.vue |  270 ++++++++++++++++++++++-------------------------------
 1 files changed, 111 insertions(+), 159 deletions(-)

diff --git a/src/views/model/pre/item/MmPredictItemForm.vue b/src/views/model/pre/item/MmPredictItemForm.vue
index b3806b7..bd2b6d3 100644
--- a/src/views/model/pre/item/MmPredictItemForm.vue
+++ b/src/views/model/pre/item/MmPredictItemForm.vue
@@ -10,19 +10,20 @@
       <el-divider content-position="left">基本信息</el-divider>
       <el-row>
         <el-col :span="12">
-          <el-form-item label="预测项名">
-            <el-input v-model="dataForm.mmPredictItem.itemname" placeholder="预测项名"/>
+          <el-form-item label="预测项名" prop="mmPredictItem.itemname">
+            <el-input v-model="dataForm.mmPredictItem.itemname" placeholder="预测项名"
+                      maxlength="50"/>
           </el-form-item>
         </el-col>
-        <el-col :span="12">
-          <el-form-item label="编号">
+        <el-col :span="12" v-if="!!dataForm.id">
+          <el-form-item label="编号" prop="mmPredictItem.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="类型">
+          <el-form-item label="类型" prop="mmPredictItem.itemtypeid">
             <el-select
               v-model="dataForm.mmPredictItem.itemtypeid" @change="changeItemtype"
               placeholder="请选择">
@@ -35,40 +36,47 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="粒度">
-            <el-input
-              v-model="dataForm.mmPredictItem.granularity" placeholder="粒度"
-              maxlength="5"/>
+          <el-form-item label="粒度" prop="dataForm.mmPredictItem.granularity">
+            <el-select v-model="dataForm.mmPredictItem.granularity" placeholder="请选择">
+              <el-option
+                v-for="dict in getStrDictOptions(DICT_TYPE.TIME_GRANULARITY)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
+            </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
-          <el-form-item label="是否检查">
+          <el-form-item label="是否检查" prop="dataForm.mmPredictItem.workchecked">
             <el-select v-model="dataForm.mmPredictItem.workchecked" placeholder="请选择">
               <el-option
-                v-for="item in isList"
-                :key="item.code"
-                :label="item.name"
-                :value="item.code"/>
+                v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
             </el-select>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="是否启用">
-            <el-select v-model="dataForm.dmModuleItem.status" placeholder="请选择">
+          <el-form-item label="是否启用" prop="dataForm.mmPredictItem.status">
+            <el-select v-model="dataForm.mmPredictItem.status" placeholder="请选择">
               <el-option
-                v-for="item in isList"
-                :key="item.code"
-                :label="item.name"
-                :value="item.code"/>
+                v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
             </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-row>
         <el-col :span="12">
-          <el-form-item label="管网">
+          <el-form-item label="管网" prop="dataForm.dmModuleItem.moduleid">
             <el-select v-model="dataForm.dmModuleItem.moduleid" placeholder="请选择">
               <el-option
                 v-for="item in moduleList"
@@ -86,12 +94,13 @@
       </el-row>
       <el-row>
         <el-col :span="12">
-          <el-form-item label="排序">
-            <el-input v-model="dataForm.dmModuleItem.itemorder" placeholder="排序" maxlength="36"/>
+          <el-form-item label="排序" prop="dataForm.dmModuleItem.itemorder">
+            <el-input-number v-model="dataForm.dmModuleItem.itemorder" :min="1" clearable
+                             controls-position="right"/>
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="数据点">
+          <el-form-item label="数据点" prop="dataForm.mmItemOutput.pointid">
             <el-select
               v-model="dataForm.mmItemOutput.pointid"
               filterable
@@ -100,25 +109,12 @@
               <el-option
                 v-for="item in pointList"
                 :key="item.id"
-                :label="item.pointname"
+                :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="保存点位">
-                  <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 v-if="dataForm.itemtypename === 'MergeItem'">
         <el-col :span="12">
           <el-form-item label="预测长度">
@@ -130,8 +126,8 @@
       </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-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'">
+        <el-col :span="12">
           <el-form-item label="模型名称">
             <el-input
               v-model="dataForm.mmPredictModel.modelname" placeholder="模型名称"
@@ -139,33 +135,29 @@
           </el-form-item>
         </el-col>
         <el-col :span="12">
-          <el-form-item label="编号" v-if="!!dataForm.id">
-            <el-input
-              v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="32"
-              disabled/>
-          </el-form-item>
+          <el-upload
+            class="upload-demo"
+            :limit="1"
+            :file-list="fileList"
+            :before-upload="beforeUpload"
+            :on-success="uploadModelSuccess"
+            :on-error="uploadModelError"
+            :action="uploadUrl"
+            :http-request="httpRequest">
+            <el-button type="primary" @click="setReplaceModelOnly(false)">
+              <Icon icon="ep:upload"/>
+              上传模型
+            </el-button>
+            <el-button
+              size="small" type="primary" @click="setReplaceModelOnly(true)"
+              v-if="!!dataForm.id">
+              <Icon icon="ep:upload"/>
+              更新模型
+            </el-button>
+          </el-upload>
         </el-col>
       </el-row>
-      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
-        <el-col :span="12">
-          <el-form-item label="上传模型">
-            <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-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'">
         <el-col :span="12">
           <el-form-item label="结果">
             <el-select v-model="dataForm.mmPredictModel.resultstrid" placeholder="请选择">
@@ -177,8 +169,15 @@
             </el-select>
           </el-form-item>
         </el-col>
+        <el-col :span="12">
+          <el-form-item label="编号" 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-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'">
         <el-col :span="24">
           <el-form-item label="路径">
             <el-input
@@ -187,7 +186,7 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+      <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'">
         <el-col :span="24">
           <el-form-item label="类名">
             <el-input
@@ -196,7 +195,7 @@
           </el-form-item>
         </el-col>
       </el-row>
-      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
+      <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'">
         <el-col :span="12">
           <el-form-item label="方法名">
             <el-input
@@ -220,13 +219,13 @@
         <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">
+        <el-table-column prop="" label="值" align="center" min-width="150">
           <template #default="scope">
-            <el-input v-model="scope.row.value" maxlength="256" style="width:100%;height:100%"/>
+            <el-input size="mini" 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
@@ -238,14 +237,13 @@
         <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-select v-model="scope.row.modelparamtype" placeholder="请选择">
               <el-option
-                v-for="item in dataForm.modelparamtypeList"
-                :key="item"
-                :label="item"
-                :value="item"/>
+                v-for="dict in getStrDictOptions(DICT_TYPE.MODEL_PARAM_TYPE)"
+                :key="dict.value"
+                :label="dict.label"
+                :value="dict.value"
+              />
             </el-select>
           </template>
         </el-table-column>
@@ -359,23 +357,25 @@
   </Dialog>
 </template>
 <script lang="ts" setup>
+import {DICT_TYPE, getIntDictOptions, getStrDictOptions} from '@/utils/dict'
 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'
+import {useUpload} from '@/api/model/pre/predict'
+
+const {uploadUrl, httpRequest} = useUpload()
 
 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 uploadModelUrl = ''
+const pointLoading = ref(false)
 const itemTypeList = ref([])
 const itemTypeMap = ref({})
 const moduleList = ref([])
@@ -387,40 +387,18 @@
 const predictList = ref([])
 const predictItemList = ref([])
 const modelparamList = ref([])
-const modelparamListMap = ref([])
+const modelparamListMap = ref({})
 const modelparamMap = ref({})
 const expressionList = ref([])
 const fileList = ref([])
 const operatorList = ['+', '-']
-const replaceModelOnly = ref(0)
+const replaceModelOnly = ref(false)
 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: undefined,
   itemtypename: undefined,
@@ -431,11 +409,11 @@
     caltypeid: undefined,
     itemtypeid: undefined,
     predictlength: undefined,
-    granularity: undefined,
+    granularity: 60,
     status: undefined,
     isfuse: undefined,
     predictphase: undefined,
-    workchecked: '',
+    workchecked: 0,
     unittransfactor: undefined,
     saveindex: undefined
   },
@@ -443,7 +421,7 @@
     id: undefined,
     moduleid: undefined,
     itemid: undefined,
-    itemorder: undefined,
+    itemorder: 1,
     status: undefined,
     categoryid: undefined
   },
@@ -481,13 +459,27 @@
     expression: undefined,
     num: undefined
   },
-  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'}],
+  'mmPredictItem.itemname': [{required: true, message: '预测项名不能为空', trigger: 'blur'}],
+  'mmPredictItem.itemtypeid': [{required: true, message: '类型不能为空', trigger: 'blur'}],
+  'dataForm.mmPredictItem.granularity': [{
+    required: true,
+    message: '粒度不能为空',
+    trigger: 'blur'
+  }],
+  'dataForm.mmPredictItem.workchecked': [{
+    required: true,
+    message: '是否检查不能为空',
+    trigger: 'blur'
+  }],
+  'dataForm.mmPredictItem.status': [{required: true, message: '是否启用不能为空', trigger: 'blur'}],
+  'dataForm.dmModuleItem.moduleid': [{required: true, message: '管网不能为空', trigger: 'blur'}],
+  'dataForm.dmModuleItem.itemorder': [{required: true, message: '排序不能为空', trigger: 'blur'}],
+  'dataForm.mmItemOutput.pointid': [{required: true, message: '数据点不能为空', trigger: 'blur'}],
+
 })
 const formRef = ref() // 表单 Ref
 
@@ -497,7 +489,6 @@
   dialogTitle.value = t('action.' + type)
   formType.value = type
   dataForm.value.itemtypename = itemtypename || 'NormalItem'
-  console.info(dataForm.value.itemtypename)
   // resetForm()
   resetFields(dataForm.value)
   setDefaultFields()
@@ -511,7 +502,6 @@
   if (id) {
     formLoading.value = true
     try {
-      debugger
       getInfo(id)
     } finally {
       formLoading.value = false
@@ -531,7 +521,6 @@
   formLoading.value = true
   try {
     const data = dataForm.value as unknown as MmPredictItem.MmPredictItemVO
-    debugger
     if (expressionList.value && expressionList.value.length > 0) {
       let expression = ''
       for (let i = 0; i < expressionList.value.length; i++) {
@@ -624,7 +613,7 @@
   if (response.code === 0) {
     message.success(t('上传成功'))
     dataForm.value.mmModelArithSettingsList = []
-    if (!replaceModelOnly) {
+    if (!replaceModelOnly.value) {
       dataForm.value.mmModelParamList = []
     }
     dataForm.value.mmPredictModel.modelpath = ''
@@ -641,6 +630,7 @@
         }
       })
     }
+    dataForm.value.mmPredictModel.modelname = response.data.originalFilename
     dataForm.value.mmPredictModel.classname = response.data.className
     dataForm.value.mmPredictModel.methodname = response.data.methodName
     if (response.data.paramPathList) {
@@ -649,7 +639,7 @@
     if (response.data.paramsArray) {
       dataForm.value.mmPredictModel.modelparamstructure = response.data.paramsArray.join(',')
     }
-    if (response.data.paramsCount && !replaceModelOnly) {
+    if (response.data.paramsCount && !replaceModelOnly.value) {
       for (let i = 0; i < response.data.paramsCount; i++) {
         dataForm.value.mmModelParamList.push({
           modelparamportorder: (i + 1),
@@ -680,7 +670,6 @@
 
 function changeItemtype(value) {
   dataForm.value.itemtypename = itemTypeMap[value]
-  console.info(dataForm.value.itemtypename)
 }
 
 function changeModelparamtype(value, row) {
@@ -807,42 +796,6 @@
     })
     modelparamListMap['PREDICTITEM'] = paramList;
   }
-
-  /*const dayParams = {
-    'processType': '日计划'
-  }
-  let dayScheduleRes = await 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 = await 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;
-  }*/
 }
 
 const setDefaultFields = () => {
@@ -866,11 +819,10 @@
 }
 
 /** 重置表单 */
-/*const resetForm = () => {
+const resetForm = () => {
   dataForm.value = {
     mmModelArithSettingsList: [],
     mmModelParamList: [],
-    modelparamtypeList: [],
     id: '',
     itemtypename: '',
     mmPredictItem: {
@@ -880,11 +832,11 @@
       caltypeid: '',
       itemtypeid: '',
       predictlength: '',
-      granularity: '',
+      granularity: 60,
       status: '',
       isfuse: '',
       predictphase: '',
-      workchecked: '',
+      workchecked: 0,
       unittransfactor: '',
       saveindex: ''
     },
@@ -892,7 +844,7 @@
       id: '',
       moduleid: '',
       itemid: '',
-      itemorder: '',
+      itemorder: 1,
       status: 1,
       categoryid: ''
     },
@@ -932,7 +884,7 @@
     }
   }
   formRef.value?.resetFields()
-}*/
+}
 
 onMounted(() => {
   init()

--
Gitblit v1.9.3