dongyukun
5 天以前 e295922209fb87c6dcd68ea1560fd16c3e6d808c
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'" :loading="saveModelLoading">下载模型(.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() // 国际化
@@ -143,6 +145,8 @@
  // 模型方法下拉列表
  const methodList = ref([])
  const hasModel = ref(false)
  const saveModelLoading =  ref(false)
  /** 打开弹窗 */
  const open = async (row) => {
@@ -167,6 +171,7 @@
        return e;
      })
    }
  }
  defineExpose({ open }) // 提供 open 方法,用于打开弹窗
@@ -260,7 +265,8 @@
  // 运行
  const modelRun = async () => {
    modelRunResult.value = ''
// 校验表单
    showSaveModel.value = false
  // 校验表单
    if (!formRef) return
    const valid = await formRef.value.validate()
    if (!valid) return
@@ -302,10 +308,69 @@
        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 () => {
    try {
      saveModelLoading.value = true
      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')
    } finally {
      saveModelLoading.value = false
    }
  }
</script>