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

feat: 总任务添加功能编写(未完成)

WANGKANG 3 сар өмнө
parent
commit
31fd6e5c13

+ 226 - 50
src/views/demo/algorithmTaskTrack/index.vue

@@ -3,9 +3,7 @@
     <ProTable ref="proTable" :columns="columns" row-key="id" :request-api="listAlgorithmTaskTrackApi">
       <!-- 表格 header 按钮 -->
       <template #tableHeader="scope">
-        <el-button type="primary" v-auth="['demo:algorithmTaskTrack:add']" icon="CirclePlus" @click="openDialog(1, '可辨识性分析总任务新增')">
-          新增
-        </el-button>
+        <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
@@ -46,6 +44,43 @@
     </ProTable>
     <FormDialog ref="formDialogRef" />
     <ImportExcel ref="dialogRef" />
+    <el-dialog v-model="dialogVisibleAddTask" title="可辨识性分析总任务新增" width="700" @open="getDatasetList__()" :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>
+        <el-form-item label="是否转红外">
+          <el-checkbox v-model="formAddTask.ifToInfrared" @click="setIfToInfrared()" />
+        </el-form-item>
+        <el-form-item label="选择转红外算法" v-show="formAddTask.ifToInfrared">
+          <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" />
+            </el-select>
+            <el-button
+              @click="setAlgorithmParams(formAddTask.toInfraredAlgorithmId, 'toInfraredAlgorithmParams')"
+              style="margin-left: 10px"
+              :disabled="formAddTask.toInfraredAlgorithmId == undefined || formAddTask.toInfraredAlgorithmId == ''"
+            >
+              <SvgIcon :name="'Setting'" style="margin-right: 5px" />
+              设置算法参数
+            </el-button>
+          </div>
+        </el-form-item>
+        <el-form-item label="选择数据集">
+          <el-select v-model="formAddTask.inputOssId" 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>
+      </el-form>
+      <template #footer>
+        <el-button @click="dialogVisibleAddTask = false">取消</el-button>
+        <el-button type="primary" @click="addAlgorithmTaskTrack"> 确定</el-button>
+      </template>
+    </el-dialog>
   </div>
 </template>
 
@@ -53,7 +88,7 @@
 import { ref, reactive } from 'vue'
 import { useHandleData } from '@/hooks/useHandleData'
 import { useDownload } from '@/hooks/useDownload'
-import { ElMessageBox } from 'element-plus'
+import { ElMessage, ElMessageBox } from 'element-plus'
 import ProTable from '@/components/ProTable/index.vue'
 import ImportExcel from '@/components/ImportExcel/index.vue'
 import FormDialog from '@/components/FormDialog/index.vue'
@@ -68,6 +103,148 @@ import {
   exportAlgorithmTaskTrackApi,
   getAlgorithmTaskTrackApi
 } from '@/api/modules/demo/algorithmTaskTrack'
+import { AlgorithmType, AlgorithmType2, SubSystem, SubSystem__ } from '@/views/demo/utils'
+import { enumAlgorithmConfigTrackApi, getAlgorithmConfigTrackApi } from '@/api/modules/demo/AlgorithmConfigTrack'
+import SvgIcon from '@/components/SvgIcon/index.vue'
+import { listDataSeqApi } from '@/api/modules/demo/DataSeq'
+import File from '@/components/Upload/File.vue'
+
+const fileUploadRef = ref()
+const fileUploadChange = (value: any) => {
+  console.log('fileUploadChange: ', value)
+  formAddTask.value['inputOssId'] = value
+}
+
+const getEnumsAlgorithmConfigTrack = async (subSystem: string, type_list_: string[]) => {
+  const result = await enumAlgorithmConfigTrackApi()
+  const res_list: any[] = []
+  const tmp_data: any = result['data']
+
+  const type_list: any[] = type_list_.map(item => parseInt(AlgorithmType2[item]))
+
+  for (const item of tmp_data) {
+    if (parseInt(item.subsystem) === parseInt(SubSystem__[subSystem])) {
+      if (type_list !== undefined && type_list.length > 0) {
+        if (type_list.includes(parseInt(item.type))) {
+          const tmp_item = { ...item }
+          tmp_item['label'] = item['label'] + '-' + SubSystem[item['subsystem']] + '-' + AlgorithmType[item['type']]
+          res_list.push(tmp_item)
+        }
+      } else {
+        const tmp_item = { ...item }
+        tmp_item['label'] = item['label'] + '-' + SubSystem[item['subsystem']] + '-' + AlgorithmType[item['type']]
+        res_list.push(tmp_item)
+      }
+    }
+  }
+  return res_list
+}
+
+const dialogVisibleAddTask = ref(false)
+const handleClose = (done: () => void) => {
+  ElMessageBox.confirm('确定关闭吗?')
+    .then(() => {
+      done()
+    })
+    .catch(() => {
+      // catch error
+    })
+}
+const formAddTask = ref({})
+const addAlgorithmTaskTrack = async () => {
+  console.log('formAddTask: ', formAddTask.value)
+  console.log(fileUploadRef.value.uploadFileListExport)
+}
+
+const rulesAddTask = {
+  name: [{ required: true, message: '可见光转红外算法不能为空', trigger: 'blur' }],
+  ifToInfrared: [{ required: true, message: '是否转红外不能为空', trigger: 'blur' }],
+  toInfraredAlgorithmId: [{ required: true, message: '可见光转红外算法不能为空', trigger: 'blur' }],
+  remarks: [{ required: true, message: '备注不能为空', trigger: 'blur' }]
+}
+
+const enumsAlgorithmConfigTrack_toInfrared = ref<any[]>([])
+const setIfToInfrared = async () => {
+  formAddTask.value.toInfraredAlgorithmId = ''
+  if (formAddTask.value?.ifToInfrared === true) {
+    enumsAlgorithmConfigTrack_toInfrared.value = await getEnumsAlgorithmConfigTrack('可见光转红外', ['预测/推理'])
+  }
+}
+
+const getItemsOptions = async (algorithmId: any) => {
+  try {
+    const result = await getAlgorithmConfigTrackApi(algorithmId)
+    if (result.code === 200) {
+      // 处理结果
+      const parameters = JSON.parse(result.data['parameters'])
+      // console.log('parameters: ', parameters)
+
+      let itemsOptions_new: any[] = []
+      for (const item of parameters) {
+        // 添加新的表单项选项
+        itemsOptions_new.push({
+          label: item['name'],
+          prop: item['agName'],
+          rules: [{ required: item['required'], message: item['agName'] + '不能为空', trigger: 'blur' }],
+          tooltip: item['prompt'],
+          compOptions: {
+            elTagName: 'input',
+            placeholder: item['defaultValue']
+            // value: item['defaultValue']
+          }
+        })
+      }
+      return itemsOptions_new
+    }
+  } catch (err) {
+    console.log(err)
+    ElMessage.error('获取算法配置失败,请检查!')
+    return []
+  }
+}
+
+const setAlgorithmParams = async (id: string | number, paramsName: string) => {
+  const itemsOptions__ = await getItemsOptions(id)
+  const params = {
+    title: '设置算法参数',
+    width: 580,
+    isEdit: true,
+    itemsOptions: itemsOptions__,
+    model: formAddTask,
+    api: async params => {
+      formAddTask.value[paramsName] = params
+      console.log('params: ', params)
+      console.log('formAddTask: ', formAddTask.value)
+      return { code: 200, message: 'success' }
+    },
+    getTableList: proTable.value?.getTableList
+  }
+  formDialogRef.value?.openDialog(params)
+}
+
+const datasetList = ref<any[]>([])
+
+const getDatasetList = async (subSystem: string) => {
+  const qyery = {
+    subsystem: subSystem ? SubSystem__[subSystem] : undefined,
+    pageNum: 1,
+    pageSize: 1000
+  }
+  const result: any = await listDataSeqApi(qyery)
+  const data = result['data']['list']
+  let res_list: any[] = []
+  for (const item of data) {
+    res_list.push({
+      value: item['inputOssId'],
+      label: item['name'] + '-' + SubSystem[item['subsystem']]
+    })
+  }
+  return res_list
+}
+
+const getDatasetList__ = async () => {
+  datasetList.value = await getDatasetList('')
+}
 
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
@@ -210,49 +387,47 @@ const setItemsOptions = () => {
       }
     },
     {
-      label: '任务状态',
-      prop: 'status',
-      rules: [{ required: true, message: '任务状态不能为空', trigger: 'blur' }],
-      compOptions: {
-        placeholder: '请输入任务状态'
-      }
-    },
-    {
-      label: '开始时间',
-      prop: 'startTime',
-      rules: [{ required: true, message: '开始时间不能为空', trigger: 'change' }],
+      label: '是否转红外',
+      prop: 'ifToInfrared',
+      rules: [{ required: true, message: '是否转红外不能为空', trigger: 'blur' }],
       compOptions: {
-        elTagName: 'date-picker',
-        type: 'date',
-        placeholder: '请选择开始时间'
+        elTagName: 'select',
+        placeholder: '请选择是否转红外',
+        enum: [
+          {
+            label: '是',
+            value: true
+          },
+          {
+            label: '否',
+            value: false
+          }
+        ],
+        onChange: (value: boolean) => {
+          console.log('转红外: ', value)
+          // if (value) {
+          //   getEnumsAlgorithmConfigTrack()
+          // }
+        }
       }
     },
     {
-      label: '结束时间',
-      prop: 'endTime',
-      rules: [{ required: true, message: '结束时间不能为空', trigger: 'change' }],
+      label: '选择转红外算法',
+      prop: 'toInfraredAlgorithmId',
+      rules: [{ required: true, message: '可见光转红外算法不能为空', trigger: 'blur' }],
       compOptions: {
-        elTagName: 'date-picker',
-        type: 'date',
-        placeholder: '请选择结束时间'
-      }
-    },
-    {
-      label: '耗时',
-      prop: 'costSecond',
-      rules: [{ required: true, message: '耗时不能为空', trigger: 'blur' }],
-      compOptions: {
-        placeholder: '请输入耗时'
-      }
-    },
-    {
-      label: '日志',
-      prop: 'log',
-      rules: [{ required: true, message: '日志不能为空', trigger: 'blur' }],
-      compOptions: {
-        type: 'textarea',
-        clearable: true,
-        placeholder: '请输入内容'
+        elTagName: 'select',
+        placeholder: '请确定可见光转红外算法',
+        enum: enumsAlgorithmConfigTrack,
+        onChange: (value: boolean) => {
+          if (value) {
+            console.log('转红外: ', value)
+          }
+        }
+      },
+      show: params => {
+        params.value.toInfraredAlgorithmId = ''
+        return params.value.ifToInfrared
       }
     },
     {
@@ -262,15 +437,16 @@ const setItemsOptions = () => {
       compOptions: {
         placeholder: '请输入备注'
       }
-    },
-    {
-      label: '系统',
-      prop: 'system',
-      rules: [{ required: true, message: '系统不能为空', trigger: 'blur' }],
-      compOptions: {
-        placeholder: '请输入系统'
-      }
     }
   ]
 }
 </script>
+
+<style lang="scss" scoped>
+.form-item1 {
+  display: flex;
+  flex-direction: row;
+  align-items: center;
+  width: 100%;
+}
+</style>