dengzedong
2025-06-17 cede521babc248ed553b5a45d3ee7ef5fd2a51d6
src/views/model/pre/item/MmPredictItemForm.vue
@@ -184,6 +184,7 @@
            :on-error="uploadModelError"
            :action="uploadUrl"
            :show-file-list="false"
            v-loading="updateModelLoading"
            :http-request="httpRequest">
            <el-button type="primary" @click="setReplaceModelOnly(false)">
              <Icon icon="ep:upload"/>
@@ -299,18 +300,16 @@
        </el-table-column>
        <el-table-column label="数据点" align="center">
          <template #default="scope">
            <el-select
            <el-select-v2
              v-model="scope.row.pointid"
              filterable
              :options="pointList || []"
              placeholder="请选择"
              :props="{value:'id',label:'pointName'}"
              clearable
              filterable
              @change="(value) => changeOutputPoint(value,scope.row)"
              placeholder="请选择">
              <el-option
                v-for="item in pointList"
                :key="item.id"
                :label="item.pointName"
                :value="item.id"/>
            </el-select>
              :fit-input-width="false"
            />
          </template>
        </el-table-column>
        <el-table-column label="是否累计" align="center" width="150px">
@@ -334,18 +333,16 @@
        </el-table-column>
        <el-table-column label="累计数据点" align="center">
          <template #default="scope">
            <el-select
            <el-select-v2
              v-model="scope.row.cumulpoint"
              :disabled="scope.row.iscumulant !== 1"
              filterable
              :options="pointList.filter(e => e.pointType === 'CUMULATE') || []"
              placeholder="请选择"
              :props="{value:'id',label:'pointName'}"
              clearable
              placeholder="请选择">
              <el-option
                v-for="item in pointList.filter(e => e.pointType === 'CUMULATE')"
                :key="item.id"
                :label="item.pointName"
                :value="item.id"/>
            </el-select>
              filterable
              :fit-input-width="false"
              :disabled="scope.row.iscumulant !== 1"
            />
          </template>
        </el-table-column>
        <el-table-column prop="" label="操作" width="80" align="center">
@@ -402,36 +399,24 @@
        </el-table-column>
        <el-table-column prop="" label="参数名称" align="center">
          <template #default="scope">
            <el-select v-if="scope.row.modelparamtype === 'NormalItem'"
            <el-select-v2 v-if="scope.row.modelparamtype === 'NormalItem'"
              v-model="scope.row.modelparamid"
              :options="modelparamListMap['NormalItem'] || []"
              placeholder="请选择"
              :props="{value:'value',label:'label',options:'children'}"
              clearable
              filterable
              @change="changeModelparam(scope.row)"
              style="width: 100%">
              <el-option-group
                v-for="group in modelparamListMap['NormalItem']"
                :key="group.value"
                :label="group.label"
              >
                <el-option
                  v-for="item in group.children"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                />
              </el-option-group>
            </el-select>
            <el-select v-else
              :fit-input-width="false"
            />
            <el-select-v2 v-else
              v-model="scope.row.modelparamid"
              :options="modelparamListMap[scope.row.modelparamtype] || []"
              placeholder="请选择"
              :props="{value:'id',label:'name'}"
              clearable
              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>
              :fit-input-width="false"
            />
          </template>
        </el-table-column>
        <el-table-column prop="" label="参数长度" width="120" align="center">
@@ -565,11 +550,11 @@
const pointList = ref([])
const pointMap = ref({})
const modelparamListMap = ref({})
const modelparamMap = ref({})
const expressionList = ref([])
const fileList = ref([])
const operatorList = ['+', '-']
const replaceModelOnly = ref(false)
const updateModelLoading = ref(false)
const queryParams = reactive({
  pageNo: 1,
  pageSize: 10,
@@ -742,6 +727,15 @@
      }
    })
    // 校验是否有预测长度参数
    const predictLength = dataForm.value.mmModelArithSettingsList?.find(e => e.key === 'predictLength')?.value;
    if (predictLength === undefined) {
      message.error("缺少模型设置参数【predictLength(预测长度)】")
      return
    }
    dataForm.value.mmPredictItem.predictlength = predictLength
    //校验模型输入
    dataForm.value.mmModelParamList.forEach(e => {
      if (e.modelparamid == undefined || e.modelparamid == '') {
@@ -788,13 +782,7 @@
    } else {
      dataForm.value.mmPredictMergeItem.expression = ''
    }
    if (dataForm.value.mmModelArithSettingsList) {
      for (let item of dataForm.value.mmModelArithSettingsList) {
        if (item.key === 'predictLength') {
          dataForm.value.mmPredictItem.predictlength = item.value
        }
      }
    }
    if (formType.value === 'create') {
      await MmPredictItem.createMmPredictItem(data)
      message.success(t('common.createSuccess'))
@@ -857,6 +845,7 @@
}
function beforeUpload(file) {
  updateModelLoading.value = true
  let fileName = file.name
  let first = fileName.lastIndexOf('.')
  let nameLength = fileName.length
@@ -868,63 +857,65 @@
}
function uploadModelSuccess(response, file, fileList) {
  if (response.code === 0) {
    message.success(t('上传成功'))
    dataForm.value.mmModelArithSettingsList = []
    if (!replaceModelOnly.value) {
      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) {
        //匹配  data数字
        if (!/^data\d+$/.test(value.key)) {
          dataForm.value.mmModelArithSettingsList.push({
            key: value.key,
            name: value.name,
            valuetype: value.valueType,
            value: value.value
          })
        }
      })
    }
    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) {
      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.value) {
      for (let i = 0; i < response.data.paramsCount; i++) {
        dataForm.value.mmModelParamList.push({
          modelparamportorder: (i + 1),
          modelparamorder: (i + 1),
          modelparamtype: '',
          modelparamid: '',
          modelparamname: '',
          datalength: 0
  try {
    if (response.code === 0) {
      message.success(t('上传成功'))
      dataForm.value.mmModelArithSettingsList = []
      if (!replaceModelOnly.value) {
        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) {
          //匹配  data数字
          if (!/^data\d+$/.test(value.key)) {
            dataForm.value.mmModelArithSettingsList.push({
              key: value.key,
              name: value.name,
              valuetype: value.valueType,
              value: value.value
            })
          }
        })
      }
      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) {
        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.value) {
        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
    }
    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 = []
  }finally {
    updateModelLoading.value = false
  }
  fileList = []
}
function uploadModelError(file, err, fileList) {
}
function changeModelparam(row) {
  row.modelparamname = modelparamMap[row.modelparamid]
  updateModelLoading.value = false
}
function changeItemtype(value) {