CMVR-IOT-UI/src/views/is/project/evaluate/index.vue

161 lines
3.9 KiB
Vue
Raw Normal View History

2026-02-05 10:42:16 +08:00
<template>
<div class="container">
<Info :infoData="projectData" />
<div class="test-container">
<div class="title">测试结果</div>
2026-03-10 16:56:34 +08:00
<div class="report-container">
<div class="report-item">成功率 {{ reportData?.successRate || '' }}</div>
<div class="report-item">成功率得分 {{ reportData?.successRateScore || '' }}</div>
<!-- <el-button @click="handler('重庆')">生成报告</el-button>
<el-button>导出结果</el-button> -->
2026-02-05 10:42:16 +08:00
</div>
</div>
<el-table :data="tableData" style="width: 100%">
2026-03-10 16:56:34 +08:00
<el-table-column prop="aeId" width="150" show-overflow-tooltip label="结果ID" />
<el-table-column prop="content" label="功能" width="260" show-overflow-tooltip />
<el-table-column prop="status" label="状态" show-overflow-tooltip>
<template #default="{ row }">
<el-tag :type="statusType[row.status] || 'info'">{{ statusTypeContext[row.status] }}</el-tag>
</template>
</el-table-column>
<el-table-column prop="videoPath" label="视频路径" show-overflow-tooltip>
<template #default="{ row }">
<el-text class="mx-1" type="primary" @click="openVideoDialog(row)">播放视频</el-text>
</template>
</el-table-column>
<el-table-column prop="itemResponseTime" label="响应时间" />
<el-table-column prop="failureReason" label="失败原因"></el-table-column>
<el-table-column prop="executionDetail" label="执行详情" />
</el-table>
<el-dialog v-model="centerDialogVisible" title="播放视频" width="800" center>
<Video :src="videoSrc" />
</el-dialog>
2026-02-05 10:42:16 +08:00
</div>
</template>
<script setup>
import Info from './info.vue';
2026-03-10 16:56:34 +08:00
import { getValuationProject } from '@/api/is/project'
import Video from '@/components/Video/index.vue'
2026-02-05 10:42:16 +08:00
const route = useRoute();
const projectData = route.query.data
? JSON.parse(route.query.data)
: {};
const tableData = ref([]);
2026-03-10 16:56:34 +08:00
const reportData = ref(null)
const getListScheme = async () => {
const res = await getValuationProject(projectData.projectId)
if (res.code === 200) {
reportData.value = {
successRate: res.data.successRate,
successRateScore: res.data.successRateScore
}
tableData.value = res.data.itemDetails
}
}
const statusType = {
0: 'info',
1: 'conductedState',
2: 'successfulState',
3: 'danger'
}
const statusTypeContext = {
0: '待评估',
1: '评估中',
2: '评估成功',
3: '评估失败'
}
const centerDialogVisible = ref(false)
const videoSrc = ref('')
const openVideoDialog = (row) => {
videoSrc.value = row.videoPath
centerDialogVisible.value = true
}
onMounted(() => {
getListScheme()
})
2026-02-05 10:42:16 +08:00
</script>
<style lang="scss" scoped>
.container {
width: 100%;
height: 100%;
.btn-container {
background: #fff;
margin: 4px 0;
padding: 4px 0;
}
.test-container {
height: 40px;
display: flex;
align-items: center;
justify-content: space-between;
.title {
font-size: 20px;
font-weight: bold;
}
2026-03-10 16:56:34 +08:00
.report-container {
display: flex;
gap: 12px;
}
2026-02-05 10:42:16 +08:00
}
.context-container {
height: calc(100% - 200px);
display: flex;
gap: 10px;
.left {
width: 300px;
.title {
height: 40px;
display: flex;
align-items: center;
background: #fff;
padding-left: 12px;
border: 1px solid #e4e7ed;
margin-bottom: 2px;
}
.schemaList {
height: calc(100% - 40px);
overflow-y: auto;
background: #fff;
border: 1px solid #e4e7ed;
.schema {
display: flex;
justify-content: space-between;
align-items: center;
padding: 12px;
&:hover {
background: #f0ecec;
}
}
.activeItem {
background: #f0ecec;
}
}
}
.right {
flex: 1;
}
}
}
</style>