隐患信息

- 添加物体编号信息
- 隐患等级为重大隐患时标红
- 置信度为疑似时标黄
时间线
- 鼠标悬停隐患按钮时显示隐患名称
This commit is contained in:
yueliuli 2026-04-22 16:32:49 +08:00
parent 4b20be4b7a
commit b3af3f8aa9
3 changed files with 47 additions and 9 deletions

View File

@ -6,6 +6,7 @@ import { computed, nextTick, ref, watch } from 'vue'
export interface HazardData {
ranges: number[]
level: number
tip: string
}
export interface TimelineProps {
@ -39,6 +40,7 @@ export interface HazardRow {
end: number
ranges: number[]
level: number
tip: string
}
export function useTimeline(
@ -174,6 +176,7 @@ export function useTimeline(
id,
level: frames.level || 0,
ranges: frames.ranges,
tip: frames.tip || '',
}
})
.sort((a, b) => {
@ -198,6 +201,7 @@ export function useTimeline(
end: hazard.ranges[1] as number,
ranges: hazard.ranges.map(range => range as number),
level: hazard.level || 0,
tip: hazard.tip || '',
})
assigned = true
break
@ -210,6 +214,7 @@ export function useTimeline(
end: hazard.ranges[1] as number,
ranges: hazard.ranges.map(range => range as number),
level: hazard.level || 0,
tip: hazard.tip || '',
}])
}
})

View File

@ -132,8 +132,27 @@ onUnmounted(() => {
:style="getHazardStyle(hazard.start, hazard.end)"
@click="handleHazardClick(hazard.id)"
>
<el-tooltip :content="hazard.tip" placement="top">
<div style="width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;">
{{ parseInt(hazard.id) + 1 }}
</div>
</el-tooltip>
</div>
<!-- <div
v-for="hazard in row"
:key="hazard.id"
>
<el-tooltip :content="hazard.tip" placement="top">
<div
class="hazard-block"
:class="{ primary: hazard.level === 0, danger: hazard.level === 1 }"
:style="getHazardStyle(hazard.start, hazard.end)"
@click="handleHazardClick(hazard.id)"
>
{{ parseInt(hazard.id) + 1 }}
</div>
</el-tooltip>
</div> -->
</div>
</div>
</ElScrollbar>

View File

@ -6,6 +6,7 @@ import { useRouter } from 'vue-router'
interface HazardItem {
隐患编号: string
物体编号: string
物体类型: string
隐患名称: string
隐患等级: string
@ -19,7 +20,7 @@ interface HazardItem {
interface DataFormat {
隐患列表: [number, string, string][]
隐患范围字典: Record<string, { ranges: number[], level: number }>
隐患范围字典: Record<string, { ranges: number[], level: number, tip: string }>
隐患数据: HazardItem[]
}
@ -141,9 +142,14 @@ function getData() {
data.value.隐患范围字典 = {}
;(objects || []).forEach((obj: any) => {
const 编号 = String(obj.hazard_track_id)
if (!data.value.隐患范围字典[编号])
data.value.隐患范围字典[编号] = { ranges: [], level: obj.level }
data.value.隐患范围字典[编号].ranges = [obj.start_frame, obj.end_frame]
if (!data.value.隐患范围字典[编号]) {
data.value.隐患范围字典[编号] = {
ranges: [obj.start_frame, obj.end_frame],
level: obj.level,
tip: `${tag?.[obj.tag_id] || ''}`, //
// tip: `(${resultData.value.class_list?.[obj.class_id] || ''}) ${tag?.[obj.tag_id] || ''}`,
}
}
})
// data.value. = (objects || []).map((_: any, i: number) => `${i + 1}`)
@ -155,6 +161,7 @@ function getData() {
return {
隐患编号: obj.hazard_track_id || '',
物体编号: obj.track_id || '',
物体类型: resultData.value.class_list?.[obj.class_id] || '',
隐患名称: tag?.[obj.tag_id] || '',
隐患等级: obj.level === 0 ? '一般隐患' : '重大隐患',
@ -203,11 +210,12 @@ function handleJumpToTimePoint(index: number) {
// transform:
const hazardFields = [
{ label: '隐患编号', key: '隐患编号', group: 1, transform: (val: any) => val !== undefined ? val + 1 : '无' },
{ label: '物体编号', key: '物体编号', group: 1 },
{ label: '物体类型', key: '物体类型', group: 1 },
{ label: '隐患等级', key: '隐患等级', group: 2 },
{ label: '置信度', key: '置信度', group: 2 },
{ label: '时间点', key: '时间点', group: 2 },
{ label: '隐患名称', key: '隐患名称', group: 3 },
{ label: '时间点', key: '时间点', group: 3 },
{ label: '隐患描述', key: '隐患描述', group: 4 },
{ label: '依据', key: '依据', group: 5 },
{ label: '整改建议', key: '整改建议', group: 6 },
@ -283,7 +291,7 @@ onMounted(() => {
track_id: '18',
hazard_track_id: 0,
class_id: 0,
conf: 1,
conf: 0,
level: 0,
start_frame: 551,
end_frame: 581,
@ -446,7 +454,7 @@ onMounted(() => {
style="height: 100%;"
:current-frame="currentFrame"
:total-frames="totalFrames"
:hazard-ranges="data.隐患范围字典 as Record<string, { ranges: number[]; level: number; }>"
:hazard-ranges="data.隐患范围字典 as Record<string, { ranges: number[]; level: number; tip: string }>"
@hazard-click="(id: number) => handleTimelineHazardClick(String(id))"
@frame-change="handleFrameChange"
/>
@ -465,7 +473,13 @@ onMounted(() => {
</el-text>
</el-row>
<el-row class="result-content">
<el-text>
<el-text v-if="field.key === '隐患等级' && getFieldValue(field) === '重大隐患'" type="danger">
{{ getFieldValue(field) }}
</el-text>
<el-text v-else-if="field.key === '置信度' && getFieldValue(field) === '疑似'" type="warning">
{{ getFieldValue(field) }}
</el-text>
<el-text v-else>
{{ getFieldValue(field) }}
</el-text>
</el-row>