dengzedong
2024-11-08 de019eee974f69a54b360297fd5d5b93f27497f9
src/views/model/pre/item/MmPredictItemForm.vue
@@ -5,7 +5,7 @@
      v-loading="formLoading"
      :model="dataForm"
      :rules="formRules"
      label-width="120px"
      label-width="100px"
    >
      <el-divider content-position="left">基本信息</el-divider>
      <el-row>
@@ -15,9 +15,9 @@
                      maxlength="50"/>
          </el-form-item>
        </el-col>
        <el-col :span="12" v-if="!!dataForm.id">
        <el-col :span="12">
          <el-form-item label="编号" prop="mmPredictItem.itemno">
            <el-input v-model="dataForm.mmPredictItem.itemno" placeholder="编号" maxlength="50"/>
            <el-input v-model="dataForm.mmPredictItem.itemno" placeholder="编号" maxlength="50" readonly/>
          </el-form-item>
        </el-col>
      </el-row>
@@ -36,10 +36,10 @@
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="粒度" prop="dataForm.mmPredictItem.granularity">
          <el-form-item label="粒度" prop="mmPredictItem.granularity">
            <el-select v-model="dataForm.mmPredictItem.granularity" placeholder="请选择">
              <el-option
                v-for="dict in getStrDictOptions(DICT_TYPE.TIME_GRANULARITY)"
                v-for="dict in getIntDictOptions(DICT_TYPE.TIME_GRANULARITY)"
                :key="dict.value"
                :label="dict.label"
                :value="dict.value"
@@ -50,7 +50,7 @@
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="是否检查" prop="dataForm.mmPredictItem.workchecked">
          <el-form-item label="是否检查" prop="mmPredictItem.workchecked">
            <el-select v-model="dataForm.mmPredictItem.workchecked" placeholder="请选择">
              <el-option
                v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
@@ -62,7 +62,7 @@
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="是否启用" prop="dataForm.mmPredictItem.status">
          <el-form-item label="是否启用" prop="mmPredictItem.status">
            <el-select v-model="dataForm.mmPredictItem.status" placeholder="请选择">
              <el-option
                v-for="dict in getIntDictOptions(DICT_TYPE.COM_IS_INT)"
@@ -76,7 +76,7 @@
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="管网" prop="dataForm.dmModuleItem.moduleid">
          <el-form-item label="管网" prop="dmModuleItem.moduleid">
            <el-select v-model="dataForm.dmModuleItem.moduleid" placeholder="请选择">
              <el-option
                v-for="item in moduleList"
@@ -94,13 +94,13 @@
      </el-row>
      <el-row>
        <el-col :span="12">
          <el-form-item label="排序" prop="dataForm.dmModuleItem.itemorder">
          <el-form-item label="排序" prop="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="数据点" prop="dataForm.mmItemOutput.pointid">
          <el-form-item label="数据点" prop="mmItemOutput.pointid">
            <el-select
              v-model="dataForm.mmItemOutput.pointid"
              filterable
@@ -150,15 +150,15 @@
            </el-button>
            <el-button
              size="small" type="primary" @click="setReplaceModelOnly(true)"
              v-if="!!dataForm.id">
              v-if="formType.value === 'update'">
              <Icon icon="ep:upload"/>
              更新模型
            </el-button>
          </el-upload>
        </el-col>
      </el-row>
      <el-row :gutter="8" v-if="dataForm.itemtypename === 'NormalItem'">
        <el-col :span="12">
      <el-row v-if="dataForm.itemtypename === 'NormalItem'">
        <el-col :span="8">
          <el-form-item label="结果">
            <el-select v-model="dataForm.mmPredictModel.resultstrid" placeholder="请选择">
              <el-option
@@ -169,10 +169,21 @@
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="编号" v-if="!!dataForm.id">
        <el-col :span="8">
          <el-form-item label="关联项目">
            <el-select v-model="dataForm.mmPredictModel.mpkprojectid" placeholder="请选择">
              <el-option
                v-for="item in mpkProjectList"
                :key="item.id"
                :label="item.projectName"
                :value="item.id"/>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :span="8">
          <el-form-item label="编号">
            <el-input
              v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="32"
              v-model="dataForm.mmPredictModel.modelno" placeholder="编号" maxlength="30" readonly
              disabled/>
          </el-form-item>
        </el-col>
@@ -264,9 +275,9 @@
        </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%;height:100%"/>
            <el-input-number v-model="scope.row.datalength" :min="0" clearable
                             controls-position="right"
                             style="width:100%;hight:100%"/>
          </template>
        </el-table-column>
        <el-table-column prop="" label="操作" width="140" align="center">
@@ -362,8 +373,10 @@
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 ProjectApi from '@/api/model/mpk/project'
import * as DaPoint from '@/api/data/da/point'
import {useUpload} from '@/api/model/pre/predict'
import * as ScheduleModelApi from '@/api/model/sche/model'
const {uploadUrl, httpRequest} = useUpload()
@@ -375,18 +388,15 @@
const dialogTitle = ref('') // 弹窗的标题
const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
const formType = ref('') // 表单的类型:create - 新增;update - 修改
const pointLoading = ref(false)
const itemTypeList = ref([])
const itemTypeMap = ref({})
const moduleList = ref([])
const resulttableList = ref([])
const resultstridList = ref([])
const mpkProjectList = ref([])
const pointNoList = ref([])
const pointList = ref([])
const pointMap = ref({})
const predictList = ref([])
const predictItemList = ref([])
const modelparamList = ref([])
const modelparamListMap = ref({})
const modelparamMap = ref({})
const expressionList = ref([])
@@ -401,7 +411,7 @@
})
const dataForm = ref({
  id: undefined,
  itemtypename: undefined,
  itemtypename: 'NormalItem',
  mmPredictItem: {
    id: undefined,
    itemno: undefined,
@@ -451,7 +461,8 @@
    methodname: undefined,
    modelparamstructure: undefined,
    resultstrid: undefined,
    settingmap: undefined
    settingmap: undefined,
    mpkprojectid: undefined
  },
  mmPredictMergeItem: {
    id: undefined,
@@ -465,48 +476,75 @@
const formRules = reactive({
  'mmPredictItem.itemname': [{required: true, message: '预测项名不能为空', trigger: 'blur'}],
  'mmPredictItem.itemtypeid': [{required: true, message: '类型不能为空', trigger: 'blur'}],
  'dataForm.mmPredictItem.granularity': [{
  'mmPredictItem.granularity': [{
    required: true,
    message: '粒度不能为空',
    trigger: 'blur'
  }],
  'dataForm.mmPredictItem.workchecked': [{
  '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'}],
  'mmPredictItem.status': [{required: true, message: '是否启用不能为空', trigger: 'blur'}],
  'dmModuleItem.moduleid': [{required: true, message: '管网不能为空', trigger: 'blur'}],
  'dmModuleItem.itemorder': [{required: true, message: '排序不能为空', trigger: 'blur'}],
  'mmItemOutput.pointid': [{required: true, message: '数据点不能为空', trigger: 'blur'}],
})
const formRef = ref() // 表单 Ref
/** 打开弹窗 */
const open = async (type: string, id?: number, itemtypename?: string) => {
  formType.value = type
  dialogVisible.value = true
  dialogTitle.value = t('action.' + type)
  formType.value = type
  dataForm.value.itemtypename = itemtypename || 'NormalItem'
  // resetForm()
  resetForm()
  resetFields(dataForm.value)
  setDefaultFields()
  getItemTypeList()
  getModuleList()
  getPointList()
  getModelparamList()
  getResulttableList()
  getResultstridList()
  // 修改时,设置数据
  if (id) {
    formLoading.value = true
    try {
      getInfo(id)
    } finally {
      formLoading.value = false
      /*formLoading.value = false*/
    }
  }
  // 加载参数列表
  modelparamListMap.value = await ScheduleModelApi.getModelParamList()
  // 获取预测项类型列表
  itemTypeList.value = await MmItemType.getItemTypeList()
  itemTypeList.value.forEach(function (value) {
    itemTypeMap[value.id] = value.itemtypename
  })
  if (!dataForm.value.id) {
    dataForm.value.mmPredictItem.itemtypeid = itemTypeList.value[0].id
  }
  dataForm.value.itemtypename = itemTypeMap[dataForm.value.mmPredictItem.itemtypeid]
  // 获取管网列表
  moduleList.value = await DmModule.getModuleList()
  // 获取结果字符串列表
  resultstridList.value = await MmResultTable.getResultstridList()
  // 获取mpk项目列表
  mpkProjectList.value = await ProjectApi.list()
  // 获取数据点列表
  pointNoList.value = await DaPoint.getPointList(queryParams)
  if (pointNoList.value.length > 0) {
    pointNoList.value.forEach(function (value) {
      pointList.value.push(value)
      pointMap[value.id] = value.pointname
    })
  }
  formLoading.value = false
}
defineExpose({open}) // 提供 open 方法,用于打开弹窗
@@ -717,87 +755,6 @@
  })
}
// 获取预测项类型列表
const getItemTypeList = async () => {
  itemTypeList.value = []
  itemTypeList.value = await MmItemType.getItemTypeList()
  itemTypeList.value.forEach(function (value) {
    itemTypeMap[value.id] = value.itemtypename
  })
  if (!dataForm.value.id) {
    dataForm.value.mmPredictItem.itemtypeid = itemTypeList.value[0].id
  }
}
// 获取管网列表
const getModuleList = async () => {
  moduleList.value = []
  moduleList.value = await DmModule.getModuleList()
}
const getResulttableList = async () => {
  resulttableList.value = []
  resulttableList.value = await MmResultTable.getResulttableList()
}
const getResultstridList = async () => {
  resultstridList.value = []
  resultstridList.value = await MmResultTable.getResultstridList()
}
const getPointList = async () => {
  pointLoading.value = true
  pointNoList.value = await DaPoint.getPointList(queryParams)
  if (pointNoList.value.length > 0) {
    pointNoList.value.forEach(function (value) {
      pointList.value.push(value)
      pointMap[value.id] = value.pointname
    })
  }
}
const getModelparamList = async () => {
  modelparamListMap.value = []
  modelparamList.value = []
  predictItemList.value = []
  pointNoList.value = await DaPoint.getPointList(queryParams)
  let paramList = []
  if (pointNoList.value.length > 0) {
    pointNoList.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;
  }
  predictList.value = await MmPredictItem.getMmPredictItemList()
  paramList = []
  if (predictList.value.length > 0) {
    predictList.value.forEach(function (value) {
      paramList.push({
        id: value.id,
        code: value.itemno,
        name: value.itemname,
        type: 'PREDICTITEM'
      })
      if (value.id !== dataForm.value.id) {
        predictItemList.value.push({
          id: value.id,
          code: value.itemno,
          name: value.itemname
        })
      }
      modelparamMap[value.id] = value.itemname
    })
    modelparamListMap['PREDICTITEM'] = paramList;
  }
}
const setDefaultFields = () => {
  dataForm.value.mmPredictItem.workchecked = 0
  dataForm.value.mmPredictItem.status = 1
@@ -824,7 +781,7 @@
    mmModelArithSettingsList: [],
    mmModelParamList: [],
    id: '',
    itemtypename: '',
    itemtypename: 'NormalItem',
    mmPredictItem: {
      id: '',
      itemno: '',