Przeglądaj źródła

feat: 对比结果2.0

Rmengdi 11 miesięcy temu
rodzic
commit
8aa127e14d
2 zmienionych plików z 160 dodań i 13 usunięć
  1. 157 10
      src/views/task/bizProcess/index.vue
  2. 3 3
      src/views/task/subtask/index.vue

+ 157 - 10
src/views/task/bizProcess/index.vue

@@ -16,7 +16,7 @@
         >
           批量删除
         </el-button>
-        <el-button type="primary" v-auth="['task:bizProcess:add']" icon="CirclePlus" @click="contrastResults()"> 对比结果 </el-button>
+        <el-button type="primary" v-auth="['task:bizProcess:add']" icon="View" @click="contrastResults()"> 对比结果 </el-button>
       </template>
       <!-- 表格操作 -->
       <template #operation="scope">
@@ -37,6 +37,66 @@
         <div class="p" v-for="(item, index) in logInfo" :key="index">{{ item }}</div>
       </div>
     </el-dialog>
+    <el-dialog v-model="resultVisible" title="对比结果" width="70%">
+      <div v-if="!resultsFlag" class="resultShow">
+        <el-row class="headerRow">
+          <el-col class="col" :span="4" v-for="(agloName, index) in resultsData['agNameList']" :key="index">
+            <span>{{ agloName }}</span>
+          </el-col>
+        </el-row>
+        <el-row class="row">
+          <el-col class="col" :span="4" v-for="(RCurveUrl, index) in resultsData['rcureList']" :key="index">
+            <div v-if="index !== 1" class="oneCol">{{ RCurveUrl }}</div>
+            <ImagePreview
+              class="img"
+              v-else
+              :width="100"
+              :height="100"
+              :src="'/api/profile' + RCurveUrl"
+              :preview-src-list="['/api/profile' + RCurveUrl]"
+            />
+          </el-col>
+        </el-row>
+        <el-row class="row">
+          <el-col class="col" :span="4" v-for="(PCurveUrl, index) in resultsData['pcureList']" :key="index">
+            <div v-if="index !== 1" class="oneCol">{{ PCurveUrl }}</div>
+            <ImagePreview
+              class="img"
+              v-else
+              :width="100"
+              :height="100"
+              :src="'/api/profile' + PCurveUrl"
+              :preview-src-list="['/api/profile' + PCurveUrl]"
+            />
+          </el-col>
+        </el-row>
+        <el-row class="row">
+          <el-col class="col" :span="4" v-for="(F1CurveUrl, index) in resultsData['f1cureList']" :key="index">
+            <div v-if="index !== 1" class="oneCol">{{ F1CurveUrl }}</div>
+            <ImagePreview
+              class="img"
+              v-else
+              :width="100"
+              :height="100"
+              :src="'/api/profile' + F1CurveUrl"
+              :preview-src-list="['/api/profile' + F1CurveUrl]"
+            />
+          </el-col>
+        </el-row>
+      </div>
+      <div v-if="resultsFlag" class="resultShow">
+        <el-row class="row">
+          <el-col class="col" :span="4" v-for="(agloName, index) in testResultsData['agNameList']" :key="index">
+            <span>{{ agloName }}</span>
+          </el-col>
+        </el-row>
+        <el-row v-for="(item, index) in testResultsData['resultList']" :key="index">
+          <el-col class="col" :span="4" v-for="(url, index1) in item" :key="index1">
+            <span>{{ url }}</span>
+          </el-col>
+        </el-row>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
@@ -49,7 +109,6 @@ import ProTable from '@/components/ProTable/index.vue'
 import ImportExcel from '@/components/ImportExcel/index.vue'
 import FormDialog from '@/components/FormDialog/index.vue'
 import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
-import { getDictsApi } from '@/api/modules/system/dictData'
 import {
   listBizProcessApi,
   delBizProcessApi,
@@ -58,15 +117,28 @@ import {
   importTemplateApi,
   importBizProcessDataApi,
   exportBizProcessApi,
-  getBizProcessApi
+  getBizProcessApi,
+  getTrainResultApi,
+  getVerifyResultApi,
+  getTestResultApi
 } from '@/api/modules/task/bizProcess'
+import { getSubtaskApi } from '@/api/modules/task/subtask'
+import { getDictsApi } from '@/api/modules/system/dictData'
 import { useRoute } from 'vue-router'
+import ImagePreview from '@/components/ImagePreview/index.vue'
 const route = useRoute()
 const subTaskId = route.query.id as string
 // ProTable 实例
 const proTable = ref<ProTableInstance>()
 const dialogVisible = ref(false)
+const resultVisible = ref(false)
+let resultsData = ref({})
+let testResultsData = ref({})
+let resultsFlag = ref(false)
+let logList = ref()
 let logInfo = ref([] as string[])
+let taskType = ref()
+let taskStatus = ref()
 
 let bizProcessList = ref()
 // 每隔10秒请求一下列表
@@ -83,7 +155,10 @@ const refreshList = () => {
   }, 0)
 }
 onMounted(() => {
-  // timer
+  getSubtaskApi(subTaskId).then(res => {
+    taskType.value = res.data.type
+    taskStatus.value = res.data.status
+  })
   refreshList()
   timer.value = setInterval(() => {
     refreshList()
@@ -123,14 +198,62 @@ const batchAdd = () => {
 
 // 对比结果
 const contrastResults = () => {
-  console.log('对比结果')
+  // if (taskStatus.value !== '3') {
+  //   ElMessage.warning(`算法状态为${taskStatus.value},暂无对比结果`)
+  //   return
+  // }
+  switch (taskType.value) {
+    case '1':
+      getTrainResultApi(subTaskId).then(res => {
+        resultsFlag.value = false
+        handleResultData(res.data)
+      })
+      break
+    case '2':
+      getVerifyResultApi(subTaskId).then(res => {
+        resultsFlag.value = false
+        handleResultData(res.data)
+      })
+      break
+    case '3':
+      getTestResultApi(subTaskId).then(res => {
+        console.log('333', res)
+        resultsFlag.value = true
+        testResultsData.value = res.data as any
+      })
+      break
+    default:
+      break
+  }
+  resultVisible.value = true
+}
+const handleResultData = data => {
+  resultsData.value = data
+  resultsData.value['agNameList'].unshift('')
+  resultsData.value['rcureList'].unshift('R_curve')
+  resultsData.value['pcureList'].unshift('P_curve')
+  resultsData.value['f1cureList'].unshift('F1_curve')
 }
 // 查看日志
 const viewLog = row => {
-  fetchLogFile(row.log)
+  // if (taskStatus.value !== '0') {
+  //   ElMessage.warning('算法状态为待处理,暂无日志')
+  //   return
+  // }
+  console.log(row.log)
+  const url = '/api/profile/task/log.log'
+  fetchLogFile(url)
     .then(text => {
-      console.log('text', text)
-      info(text)
+      logList.value = text.split('\n')
+      // console.log('logList.value', logList.value)
+      // if (taskStatus.value === '1') {
+      //   info(logList.value)
+      //   dialogVisible.value = true
+      // } else if (taskStatus.value === '2') {
+      //   logInfo.value = logList.value
+      //   dialogVisible.value = true
+      // }
+      info(logList.value)
       dialogVisible.value = true
     })
     .catch(error => {
@@ -140,7 +263,6 @@ const viewLog = row => {
 }
 
 const fetchLogFile = async url => {
-  console.log('url', url)
   try {
     const response = await fetch(url, { method: 'GET' })
     if (!response.ok) {
@@ -167,7 +289,7 @@ const info = logText => {
     } else {
       clearInterval(timer2.value)
     }
-  }, 50)
+  }, 300)
 }
 const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)
 // 打开弹框的功能
@@ -198,6 +320,7 @@ watch(
   val => {
     if (!val) {
       clearInterval(timer2.value)
+      timer2.value = null
     }
   }
 )
@@ -429,4 +552,28 @@ const setItemsOptions = () => {
   margin-bottom: 5px;
   border-left: 3px solid #4aff84;
 }
+.resultShow {
+  width: 100%;
+  height: 60vh;
+  overflow: hidden;
+  overflow: scroll scroll;
+  .headerRow {
+    height: 50px;
+    font-size: 1.5rem;
+    line-height: 50px;
+    text-align: center;
+  }
+  .row {
+    .col {
+      text-align: center;
+      .oneCol {
+        margin-top: 45px;
+        font-size: 1.2rem;
+      }
+      .img {
+        margin: 10px 0;
+      }
+    }
+  }
+}
 </style>

+ 3 - 3
src/views/task/subtask/index.vue

@@ -163,9 +163,9 @@ const columns = reactive<ColumnProps<any>[]>([
   {
     prop: 'type',
     label: '任务类型',
-    search: {
-      el: 'input'
-    }
+    tag: true,
+    enum: () => getDictsApi('biz_ag_type'),
+    fieldNames: { label: 'dictLabel', value: 'dictValue' }
   },
   {
     prop: 'parameters',