dengzedong
2025-02-21 be8574891bb59d9cc4cae97e8ac3232d05f182e9
测试训练之后,如果结果符合标准,可以直接保存.miail文件
已修改3个文件
70 ■■■■■ 文件已修改
src/api/model/mpk/mpk.ts 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/download.ts 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/model/mpk/file/MpkRun.vue 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/model/mpk/mpk.ts
@@ -42,6 +42,10 @@
  return request.post({ url: '/model/mpk/api/test', data: params })
}
export const saveModel = (data) => {
  return request.downloadByPost({ url: '/model/mpk/api/saveModel', data })
}
export const list = (params) => {
  return request.get({ url: '/model/mpk/file/list',  params})
}
src/utils/download.ts
@@ -50,7 +50,10 @@
      a.download = 'image.png'
      a.click()
    }
  }
  },
  downloadFile: (data: Blob, fileName: string) => {
    download0(data, fileName, 'application/octet-stream')
  },
}
export default download
src/views/model/mpk/file/MpkRun.vue
@@ -110,6 +110,7 @@
<!--        </el-table-column>-->
      </el-table>
      <el-divider content-position="left">模型运行结果</el-divider>
      <el-button type="primary" size="small" link @click="saveModel" v-if="showSaveModel && formData.methodName === 'train'">下载模型(.miail)</el-button>
      <el-input v-model="modelRunResult" placeholder="" rows="4" type="textarea" />
      <div style="display: flex;flex-direction: row;justify-content: end;margin-top: 16px">
        <el-button :loading="modelRunloading" type="primary" @click="modelRun()">运行</el-button>
@@ -121,6 +122,7 @@
  import * as MpkApi from '@/api/model/mpk/mpk'
  import {FormRules} from "element-plus";
  import {getAccessToken, getTenantId} from "@/utils/auth";
  import download from "@/utils/download";
  const staticDir = ref(import.meta.env.VITE_STATIC_DIR)
  const { t } = useI18n() // 国际化
@@ -167,6 +169,7 @@
        return e;
      })
    }
  }
  defineExpose({ open }) // 提供 open 方法,用于打开弹窗
@@ -260,7 +263,8 @@
  // 运行
  const modelRun = async () => {
    modelRunResult.value = ''
// 校验表单
    showSaveModel.value = false
  // 校验表单
    if (!formRef) return
    const valid = await formRef.value.validate()
    if (!valid) return
@@ -302,10 +306,63 @@
        data.model = undefined
      }
      modelRunResult.value = await MpkApi.modelRun(data)
      let result = await MpkApi.modelRun(data)
      modelRunResult.value = result;
      message.success('运行成功')
      // 训练方法
      if (formData.methodName === 'train') {
        result = JSON.parse(result);
        // 返回结果正确
        if (result?.status_code === '100' && result?.models?.model_path) {
          // 有预测方法
          if (methodList.value.some(e => e.methodName === 'predict')) {
            saveModelParams.modelResult = result
            saveModelParams.model = result?.models
            showSaveModel.value = true
          }
        }
      }
    } finally {
      modelRunloading.value = false
    }
  }
  const showSaveModel = ref(false)
  const saveModelParams = reactive({
    pyName: '',
    className: '',
    methodName: '',
    uuids: [],
    modelSettings: [],
    predModelSettings: [],
    hasModel: false,
    model: undefined,
    modelResult: undefined,
    dataLength: undefined,
    resultKey: undefined,
  })
  const saveModel = async () => {
    saveModelParams.className = formData.className
    saveModelParams.pyName = formData.pyName
    saveModelParams.modelSettings = formData.modelSettings
    const predMethod = methodList.value.find(e => e.methodName === 'predict');
    saveModelParams.methodName = predMethod.methodName
    saveModelParams.resultKey = predMethod.resultKey
    //predModelSettings
    if (predMethod.methodSettings && predMethod.methodSettings.length > 0) {
      saveModelParams.predModelSettings = predMethod.methodSettings.map(e => {
        e.settingValue = e.value;
        return e;
      })
    }
    saveModelParams.hasModel = predMethod.model === 1
    saveModelParams.dataLength = predMethod.dataLength
    const data = await MpkApi.saveModel(saveModelParams)
    download.downloadFile(data, saveModelParams.pyName + '.miail')
  }
</script>