From be8574891bb59d9cc4cae97e8ac3232d05f182e9 Mon Sep 17 00:00:00 2001
From: dengzedong <dengzedong@email>
Date: 星期五, 21 二月 2025 15:39:56 +0800
Subject: [PATCH] 测试训练之后,如果结果符合标准,可以直接保存.miail文件

---
 src/utils/download.ts               |    5 ++
 src/views/model/mpk/file/MpkRun.vue |   61 +++++++++++++++++++++++++++++-
 src/api/model/mpk/mpk.ts            |    4 ++
 3 files changed, 67 insertions(+), 3 deletions(-)

diff --git a/src/api/model/mpk/mpk.ts b/src/api/model/mpk/mpk.ts
index dc2782f..b0b880b 100644
--- a/src/api/model/mpk/mpk.ts
+++ b/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})
 }
diff --git a/src/utils/download.ts b/src/utils/download.ts
index 1d07484..943374b 100644
--- a/src/utils/download.ts
+++ b/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
diff --git a/src/views/model/mpk/file/MpkRun.vue b/src/views/model/mpk/file/MpkRun.vue
index 2b9039c..908d883 100644
--- a/src/views/model/mpk/file/MpkRun.vue
+++ b/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>

--
Gitblit v1.9.3