|
@@ -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>
|