Просмотр исходного кода

feat: 创建配置,修改了prefix文件

icenaked 3 лет назад
Родитель
Сommit
d07d426061
5 измененных файлов с 107 добавлено и 50 удалено
  1. 17 3
      src/api/_prefix.js
  2. 4 7
      src/api/analysisConfig.js
  3. 4 6
      src/api/config.js
  4. 72 30
      src/views/file/FileDetail.vue
  5. 10 4
      src/views/file/FileList.vue

+ 17 - 3
src/api/_prefix.js

@@ -1,12 +1,26 @@
+//总api模块
 export const API_MODULE = '/api'
 export const NEW_API_MODULE= '/newapi'
-export const MODEL_MODULE=`${API_MODULE}/model`
-export const CONFIG_MODULE = `${API_MODULE}/config`
+
+//文件模块
 export const FILE_MODULE= `${API_MODULE}/files`
+//ml模块
+export const ML_MODULE= `${API_MODULE}/ml`
+export const CONFIG_MODULE = `${ML_MODULE}/configs`
+export const MODEL_MODULE=`${ML_MODULE}/models`
+export const PREDICTION_MODULE=`${ML_MODULE}/predictions`
+export const DEPLOYMENT_MODULE=`${ML_MODULE}/deployments`
+export const PIPELINE_MODULE=`${ML_MODULE}/pipelines`
+//analysis模块
+export const ANALYSIS_MODULE = `${API_MODULE}/analysis`
+export const ANALYSIS_CONFIG_MODULE = `${ANALYSIS_MODULE}/configs`
+export const ANALYSIS_VISUALIZE_MODULE = `${ANALYSIS_MODULE}/visualize`
+export const ANALYSIS_PIPELINE_MODULE = `${ANALYSIS_MODULE}/pipelines`
+
+//待整理
 export const PIC_MODULE= `${API_MODULE}/picture`
 export const POST_MODULE=`${NEW_API_MODULE}/posts`
 export const COMMENT_MODULE=`${NEW_API_MODULE}/comment`
 export const MAIL_MODULE=`${NEW_API_MODULE}/mail`
-export const ANALYSIS_MODULE = `${API_MODULE}/analysis`
 
 

+ 4 - 7
src/api/analysisConfig.js

@@ -1,18 +1,15 @@
-import {ANALYSIS_MODULE, CONFIG_MODULE} from "./_prefix";
+import {ANALYSIS_CONFIG_MODULE} from "./_prefix";
 import {axios} from '../utils/request'
 
 
 /**
- * 获取所有模型配置 GET /get/all/{userId} 传入用户id
- * @param {*} payload
+ * 获取所有模型配置 GET  传入用户id
+ * @param {userId} payload
  * @returns
  */
 export const getAnalysisConfig = payload => {
-    // console.log("getAllConfig",payload);
     const {uid} = payload;
-    console.log("payload",payload);
-    console.log("uid",uid);
-    return axios.get(`${ANALYSIS_MODULE}/configs?userId=${uid}`).then(res => {
+    return axios.get(`${ANALYSIS_CONFIG_MODULE}?userId=${uid}`).then(res => {
         return res;
     });
 }

+ 4 - 6
src/api/config.js

@@ -5,17 +5,15 @@ import {axios} from '../utils/request'
 
 
 /**
- *  添加模型配置信息 POST /add
+ *  添加模型配置信息 POST
  * @param {*} payload
  * @returns
  */
 export const addConfig = payload => {
   console.log(payload);
-  //id,
-  const { fileInfoId,userId, modelTypeId,confName , fieldIds} = payload;
-
-  return axios.post(`${CONFIG_MODULE}/add`, {
-    fileInfoId, userId,modelTypeId,confName ,fieldIds
+  const { fileInfoId, userId, learningType, configName, features, label} = payload;
+  return axios.post(`${CONFIG_MODULE}`, {
+    fileInfoId, userId, learningType ,configName ,features, label
   }).then(res => {
     return res;
   });

+ 72 - 30
src/views/file/FileDetail.vue

@@ -20,7 +20,7 @@
       </div>
 
       <el-table :data="tableData" border class="table" ref="fieldTable" header-cell-class-name="table-header" @selection-change="handleSelectChange">
-        <el-table-column width="50" type="selection" ></el-table-column>
+        <el-table-column width="50" type="selection"></el-table-column>
         <el-table-column label="字段名">
           <template #default="scope"><span>{{ scope.row.fieldName }}</span></template>
         </el-table-column>
@@ -118,29 +118,48 @@
         <el-form-item label="配置名" required>
           <el-input v-model="form.name"></el-input>
         </el-form-item>
+<!--        <el-form-item label="模型类别" required>-->
+<!--          <el-select v-model="form.type" placeholder="模型类别" class="handle-select mr10" @change="selectModelTypeChange">-->
+<!--            <el-option key="1" label="逻辑回归" value="1"></el-option>-->
+<!--            <el-option key="2" label="决策树" value="2"></el-option>-->
+<!--            <el-option key="3" label="随机森林" value="3"></el-option>-->
+<!--            <el-option key="4" label="梯度提升决策树" value="4"></el-option>-->
+<!--            <el-option key="5" label="K-均值" value="5"></el-option>-->
+<!--            <el-option key="6" label="多层感知器分类器" value="6"></el-option>-->
+<!--            <el-option key="7" label="朴素贝叶斯" value="7"></el-option>-->
+<!--            <el-option key="8" label="随机森林回归" value="8"></el-option>-->
+<!--          </el-select>-->
+<!--        </el-form-item>-->
         <el-form-item label="模型类别" required>
-          <el-select v-model="form.type" placeholder="模型类别" class="handle-select mr10" @change="selectModelTypeChange">
-            <el-option key="1" label="逻辑回归" value="1"></el-option>
-            <el-option key="2" label="决策树" value="2"></el-option>
-            <el-option key="3" label="随机森林" value="3"></el-option>
-            <el-option key="4" label="梯度提升决策树" value="4"></el-option>
-            <el-option key="5" label="K-均值" value="5"></el-option>
-            <el-option key="6" label="多层感知器分类器" value="6"></el-option>
-            <el-option key="7" label="朴素贝叶斯" value="7"></el-option>
-            <el-option key="8" label="随机森林回归" value="8"></el-option>
+          <el-select v-model="form.type" placeholder="学习类型" class="handle-select mr10" >
+            <el-option key="1" label="监督学习" value="SUPERVISED_LEARNING"></el-option>
+            <el-option key="2" label="非监督学习" value="UNSUPERVISED_LEARNING"></el-option>
           </el-select>
         </el-form-item>
-        <el-form-item label="已选择字段" >
-          <el-alert type="info" description="您下列选择的最后一个字段为分类模型的目标字段" v-if="featureTip===1"
-                    show-icon style="height: 40px;"></el-alert>
-          <el-alert type="info" description="k-means模型没有目标字段" v-if="featureTip===2"
-                    show-icon style="height: 40px;"></el-alert>
-          <el-table :data="selectData" border class="table"  header-cell-class-name="table-header" >
+        <el-form-item label="标签字段" required>
+          <el-select v-model="form.needLabel" placeholder="是否需要" class="handle-select mr10" @change="selectLabelChange">
+            <el-option key="1" label="是" value='1'></el-option>
+            <el-option key="2" label="否" value='2'></el-option>
+          </el-select>
+          <el-alert type="info" description="选择的最后一个字段为标签字段" v-if="labelTip===1"
+                    show-icon style="height: 40px; margin-top: 10px"></el-alert>
+          <el-alert type="info" description="没有目标字段,适用于k-means模型" v-if="labelTip===2"
+                    show-icon style="height: 40px; margin-top: 10px"></el-alert>
+        </el-form-item>
+        <el-form-item label="选中字段" >
+          <el-table :data="selectData" border class="table" header-cell-class-name="table-header" >
             <el-table-column label="字段名">
               <template #default="scope"><span>{{ scope.row.fieldName }}</span></template>
             </el-table-column>
           </el-table>
         </el-form-item>
+<!--        <el-form-item label="标签字段" v-if="labelTip===1">-->
+<!--          <el-table :data="selectData" border class="table" header-cell-class-name="table-header">-->
+<!--            <el-table-column label="字段名">-->
+<!--              <template #default="scope"><span>{{ scope.row.fieldName }}</span></template>-->
+<!--            </el-table-column>-->
+<!--          </el-table>-->
+<!--        </el-form-item>-->
 
       </el-form>
       <template #footer>
@@ -219,7 +238,12 @@ export default {
       }
 
     };
-    getData();
+    //getData();
+    tableData.value = [
+      {id:1, fileInfoId: 1, fieldName: '编号', conOrDis: '连续值',fieldType: 'int'},
+      {id:2, fileInfoId: 1, fieldName: '色泽', conOrDis: '连续值',fieldType: 'string'},
+      {id:3, fileInfoId: 1, fieldName: '纹理', conOrDis: '连续值',fieldType: 'string'}]
+
     const getFeature=()=>{
       if(selectData.value.length===0){ElMessage.error("请先选择目标字段");return;}
       if(selectData.value.length>1){ElMessage.error("目标字段仅可选择一个");return;}
@@ -265,6 +289,7 @@ export default {
     let form = reactive({
       name: "",
       type: "",
+      needLabel: "",
       // classification:"",
       // feature:"",
     });
@@ -354,19 +379,21 @@ export default {
         }
       });
 
-      // ElMessage.success(`修改第 ${idx + 1} 行成功`);
-      // Object.keys(form).forEach((item) => {
-      //   tableData.value[idx][item] = form[item];
-      // });
-
     };
     let resultVisible= ref(false);
-  let featureTip=ref(0);
+    let featureTip=ref(0);
+    let labelTip = ref(0);
+
     const selectModelTypeChange=(selectValue)=>{
       if(selectValue==="8")featureTip.value=2;
       else featureTip.value=1;
       console.log(featureTip.value)
     }
+    const selectLabelChange=(selectValue)=>{
+      if(selectValue==="1") labelTip.value=1;
+      else labelTip.value=2;
+      console.log(labelTip.value)
+    }
     const configCreate = ref(false);
     const createConfig =() => {
       if (selectData.value.length<=1){
@@ -374,27 +401,40 @@ export default {
         return ;
       }
       const fieldTable = ref(null)
-      //console.log(fieldTable)
-      console.log(selectData.value)
       configCreate.value = true;
     };
     const saveConfig=()=>{
       const route=useRoute()
-      const payload={fileInfoId:selectData.value[0].fileInfoId,userId:1, modelTypeId:form.type, confName:form.name , fieldIds:[]}
-      for(let i=0;i<selectData.value.length;i++){
-        payload.fieldIds.push(selectData.value[i].id);
+      const payload={
+        fileInfoId:selectData.value[0].fileInfoId,
+        userId:1,
+        learningType:form.type,
+        configName:form.name,
+        features:[],
+        label: ''
+      }
+      if (form.needLabel === '2'){
+        for(let i=0;i<selectData.value.length;i++){
+          payload.features.push(selectData.value[i].fieldName);
+        }
+      }
+      else{
+        for(let i=0;i<selectData.value.length-1;i++){
+          payload.features.push(selectData.value[i].fieldName);
+        }
+        payload.label = selectData.value[selectData.value.length-1].fieldName
       }
       addConfig(payload).then(res=>{
-        if(res.status===200) {
+        if(res.msg === '成功') {
           ElMessage.success(`已成功生成配置`);
           configCreate.value = false;
         }
         else ElMessage.error(`生成配置失败`);
       })
-      console.log(payload)
     }
     const handleSelectChange=val=>{
       selectData.value=val;
+      console.log('selectData:'+JSON.stringify(selectData))
     };
 
     return {
@@ -412,8 +452,10 @@ export default {
       selectData,
       analysisData,
       featureTip,
+      labelTip,
       methodMsg,
       selectModelTypeChange,
+      selectLabelChange,
       handleSelectChange,
       handleSearch,
       handlePageChange,

+ 10 - 4
src/views/file/FileList.vue

@@ -90,7 +90,8 @@ export default {
     //用户Id => 文件列表
     const getFileList=(userId)=>{
       GetAllFile(userId).then(res=>{
-        if(res.status===200){
+        console.log(res)
+        if(res.msg === '成功'){
           state.fileList=res.data;
         }
         else{
@@ -144,9 +145,14 @@ export default {
     }
 
     //初始化
-    onMounted(() => {
-      getFileList(userId);
-    })
+    // onMounted(() => {
+    //   getFileList(userId);
+    // })
+    state.fileList = [
+        {fileName: '666', fileId: 1},
+        {fileName: '777', fileId: 2}
+        ]
+
 
     return {
       currentTab,