Эх сурвалжийг харах

feat: 总任务新增窗口初步完成

WANGKANG 3 сар өмнө
parent
commit
9f14d2b0e6

+ 108 - 77
src/views/demo/algorithmTaskTrack/index.vue

@@ -4,8 +4,10 @@
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
         <el-button type="primary" v-auth="['demo:algorithmTaskTrack:add']" icon="CirclePlus" @click="dialogVisibleAddTask = true"> 新增 </el-button>
-        <el-button type="primary" v-auth="['demo:algorithmTaskTrack:import']" icon="Upload" plain @click="batchAdd"> 导入 </el-button>
-        <el-button type="primary" v-auth="['demo:algorithmTaskTrack:export']" icon="Download" plain @click="downloadFile"> 导出 </el-button>
+        <!--        <el-button type="primary" v-auth="['demo:algorithmTaskTrack:import']" icon="Upload" plain @click="batchAdd"> 导入-->
+        <!--        </el-button>-->
+        <!--        <el-button type="primary" v-auth="['demo:algorithmTaskTrack:export']" icon="Download" plain @click="downloadFile"> 导出-->
+        <!--        </el-button>-->
         <el-button
           type="danger"
           v-auth="['demo:algorithmTaskTrack:remove']"
@@ -44,15 +46,15 @@
     </ProTable>
     <FormDialog ref="formDialogRef" />
     <ImportExcel ref="dialogRef" />
-    <el-dialog v-model="dialogVisibleAddTask" title="可辨识性分析总任务新增" width="700" @open="getDatasetList__()" :before-close="handleClose">
+    <el-dialog v-model="dialogVisibleAddTask" title="可辨识性分析总任务新增" width="700" @open="handleOpenAddTask()" :before-close="handleClose">
       <el-form :model="formAddTask" :rules="rulesAddTask" label-width="auto" style="max-width: 600px">
-        <el-form-item label="任务名称">
-          <el-input v-model="formAddTask.name" />
+        <el-form-item label="任务名称" prop="name">
+          <el-input v-model="formAddTask.name" placeholder="请输入任务名称" />
         </el-form-item>
-        <el-form-item label="是否转红外">
+        <el-form-item label="是否转红外" prop="ifToInfrared">
           <el-checkbox v-model="formAddTask.ifToInfrared" @click="setIfToInfrared()" />
         </el-form-item>
-        <el-form-item label="选择转红外算法" v-show="formAddTask.ifToInfrared">
+        <el-form-item label="选择转红外算法" v-show="formAddTask.ifToInfrared" prop="toInfraredAlgorithmId">
           <div class="form-item1">
             <el-select v-model="formAddTask.toInfraredAlgorithmId" placeholder="请选择转红外算法" clearable>
               <el-option v-for="item in enumsAlgorithmConfigTrack_toInfrared" :key="item.value" :label="item.label" :value="item.value" />
@@ -67,13 +69,37 @@
             </el-button>
           </div>
         </el-form-item>
-        <el-form-item label="选择数据集">
-          <el-select v-model="formAddTask.inputOssId" placeholder="请选择数据集" clearable>
+        <el-form-item label="选择数据集" prop="inputDatasetOssId">
+          <el-select v-model="formAddTask.inputDatasetOssId" placeholder="请选择数据集" clearable>
             <el-option v-for="item in datasetList" :key="item.value" :label="item.label" :value="item.value" />
           </el-select>
         </el-form-item>
-        <el-form-item label="上传数据集">
-          <File ref="fileUploadRef" :file-type="['zip']" file-size="4096" @update:model-value="fileUploadChange" />
+        <el-form-item label="上传数据集" prop="inputDatasetOssId">
+          <File ref="fileUploadRef" :file-type="['zip']" file-size="4096" @update:model-value="fileUploadDatasetChange" />
+        </el-form-item>
+        <el-form-item label="选择视觉算法" prop="visionAlgorithmId">
+          <el-select v-model="formAddTask.visionAlgorithmId" placeholder="请选择视觉算法" clearable>
+            <el-option v-for="item in visionAlgorithmList" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="选择目标检测模型" prop="algorithmModel_TD_Id">
+          <el-select v-model="formAddTask.TD_modelId" placeholder="请选择目标检测模型" clearable>
+            <el-option v-for="item in targetDetectionModelList" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="选择视觉算法模型" prop="algorithmModel_Vision_Id">
+          <el-select v-model="formAddTask.algorithmModel_Vision_Id" placeholder="请选择视觉算法模型" clearable>
+            <el-option v-for="item in visionAlgorithmModelList" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>
+        </el-form-item>
+        <el-form-item label="是否评估" prop="ifEvaluate">
+          <el-checkbox v-model="formAddTask.ifEvaluate" />
+        </el-form-item>
+        <el-form-item label="上传真实标签" prop="inputEvaluateLabelOssId" v-show="formAddTask.ifEvaluate">
+          <File ref="fileUploadEvaluateLabelRef" :file-type="['txt']" file-size="4096" @update:model-value="fileUploadChangeEvaluateLabel" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remarks">
+          <el-input v-model="formAddTask.remarks" placeholder="请输入备注" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -108,11 +134,32 @@ import { enumAlgorithmConfigTrackApi, getAlgorithmConfigTrackApi } from '@/api/m
 import SvgIcon from '@/components/SvgIcon/index.vue'
 import { listDataSeqApi } from '@/api/modules/demo/DataSeq'
 import File from '@/components/Upload/File.vue'
+import { enumAlgorithmModelTrackApi } from '@/api/modules/demo/AlgorithmModelTrack'
+import statusEnums from '@/utils/status'
 
 const fileUploadRef = ref()
-const fileUploadChange = (value: any) => {
+const fileUploadDatasetChange = (value: any) => {
   console.log('fileUploadChange: ', value)
-  formAddTask.value['inputOssId'] = value
+  formAddTask.value['inputDatasetOssId'] = value
+}
+const fileUploadEvaluateLabelRef = ref()
+const fileUploadChangeEvaluateLabel = (value: any) => {
+  console.log('fileUploadChangeEvaluateLabel: ', value)
+  formAddTask.value['inputEvaluateLabelOssId'] = value
+}
+
+const getEnumsAlgorithmModelTrack = async (subSystem: string) => {
+  const result: any = await enumAlgorithmModelTrackApi()
+  const res_list: any[] = []
+  const tmp_data: any = result['data']
+  for (const item of tmp_data) {
+    if (SubSystem[item['subsystem']] === subSystem) {
+      const tmp_item = { ...item }
+      tmp_item['label'] = item['label'] + '-' + SubSystem[item['subsystem']] + '-' + AlgorithmType[item['type']] + '-' + item['algorithmName']
+      res_list.push(tmp_item)
+    }
+  }
+  return res_list
 }
 
 const getEnumsAlgorithmConfigTrack = async (subSystem: string, type_list_: string[]) => {
@@ -154,13 +201,25 @@ const formAddTask = ref({})
 const addAlgorithmTaskTrack = async () => {
   console.log('formAddTask: ', formAddTask.value)
   console.log(fileUploadRef.value.uploadFileListExport)
+  const res = await addAlgorithmTaskTrackApi(formAddTask.value)
+  if (res.code === 200) {
+    ElMessage.success('新增可辨识性分析总任务成功')
+    dialogVisibleAddTask.value = false
+    proTable.value?.getTableList()
+  } else {
+    ElMessage.error('新增可辨识性分析总任务失败')
+  }
 }
 
 const rulesAddTask = {
+  // todo: 校验规则
   name: [{ required: true, message: '可见光转红外算法不能为空', trigger: 'blur' }],
-  ifToInfrared: [{ required: true, message: '是否转红外不能为空', trigger: 'blur' }],
+  ifToInfrared: [{ required: false, message: '是否转红外不能为空', trigger: 'blur' }],
   toInfraredAlgorithmId: [{ required: true, message: '可见光转红外算法不能为空', trigger: 'blur' }],
-  remarks: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
+  inputDatasetOssId: [{ required: true, message: '数据集不能为空', trigger: 'blur' }],
+  targetDetectionModelList: [{ required: true, message: '目标模型不能为空', trigger: 'blur' }],
+  inputEvaluateLabelOssId: [{ required: true, message: '评估标签不能为空', trigger: 'blur' }]
+  // remarks: [{required: true, message: '备注不能为空', trigger: 'blur'}],
 }
 
 const enumsAlgorithmConfigTrack_toInfrared = ref<any[]>([])
@@ -246,6 +305,28 @@ const getDatasetList__ = async () => {
   datasetList.value = await getDatasetList('')
 }
 
+const visionAlgorithmList = ref<any[]>([])
+const getVisionAlgorithmList = async () => {
+  visionAlgorithmList.value = await getEnumsAlgorithmConfigTrack('注释轨迹序列', ['预测/推理'])
+}
+
+const targetDetectionModelList = ref<any[]>([])
+const getTargetDetectionModelList = async () => {
+  targetDetectionModelList.value = await getEnumsAlgorithmModelTrack('目标检测')
+}
+
+const visionAlgorithmModelList = ref<any[]>([])
+const getVisionAlgorithmModelList = async () => {
+  visionAlgorithmModelList.value = await getEnumsAlgorithmModelTrack('注释轨迹序列')
+}
+
+const handleOpenAddTask = async () => {
+  await getDatasetList__()
+  await getVisionAlgorithmList()
+  await getTargetDetectionModelList()
+  await getVisionAlgorithmModelList()
+}
+
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
 
@@ -318,9 +399,11 @@ const columns = reactive<ColumnProps<any>[]>([
     prop: 'status',
     label: '任务状态',
     search: {
-      el: 'input'
+      el: 'select'
     },
-    width: 120
+    tag: true,
+    enum: statusEnums,
+    width: 150
   },
   {
     prop: 'startTime',
@@ -364,14 +447,14 @@ const columns = reactive<ColumnProps<any>[]>([
     },
     width: 120
   },
-  {
-    prop: 'system',
-    label: '系统',
-    search: {
-      el: 'input'
-    },
-    width: 120
-  },
+  // {
+  //   prop: 'system',
+  //   label: '系统',
+  //   search: {
+  //     el: 'input'
+  //   },
+  //   width: 120
+  // },
   { prop: 'operation', label: '操作', width: 230, fixed: 'right' }
 ])
 // 表单配置项
@@ -385,58 +468,6 @@ const setItemsOptions = () => {
       compOptions: {
         placeholder: '请输入任务名称'
       }
-    },
-    {
-      label: '是否转红外',
-      prop: 'ifToInfrared',
-      rules: [{ required: true, message: '是否转红外不能为空', trigger: 'blur' }],
-      compOptions: {
-        elTagName: 'select',
-        placeholder: '请选择是否转红外',
-        enum: [
-          {
-            label: '是',
-            value: true
-          },
-          {
-            label: '否',
-            value: false
-          }
-        ],
-        onChange: (value: boolean) => {
-          console.log('转红外: ', value)
-          // if (value) {
-          //   getEnumsAlgorithmConfigTrack()
-          // }
-        }
-      }
-    },
-    {
-      label: '选择转红外算法',
-      prop: 'toInfraredAlgorithmId',
-      rules: [{ required: true, message: '可见光转红外算法不能为空', trigger: 'blur' }],
-      compOptions: {
-        elTagName: 'select',
-        placeholder: '请确定可见光转红外算法',
-        enum: enumsAlgorithmConfigTrack,
-        onChange: (value: boolean) => {
-          if (value) {
-            console.log('转红外: ', value)
-          }
-        }
-      },
-      show: params => {
-        params.value.toInfraredAlgorithmId = ''
-        return params.value.ifToInfrared
-      }
-    },
-    {
-      label: '备注',
-      prop: 'remarks',
-      rules: [{ required: true, message: '备注不能为空', trigger: 'blur' }],
-      compOptions: {
-        placeholder: '请输入备注'
-      }
     }
   ]
 }