fix 实时监控收集

This commit is contained in:
Ironsp
2026-05-14 17:32:58 +08:00
parent 4c9cd63ac0
commit d4129d66b1
3 changed files with 59 additions and 14 deletions

View File

@@ -88,3 +88,13 @@ export interface DemoQuery extends PageQuery {
*/
value?: string;
}
export interface DrawFrom {
x?: string | number;
y?: string | number;
w?: string | number;
h?: string | number;
}

View File

@@ -1,7 +1,7 @@
import request from '@/utils/request';
import type { EquipmentList, DeviceInfoForm } from '@/api/equipmentList/types';
import { AxiosPromise } from 'axios';
import { DemoVO, DemoForm, DemoQuery } from '@/api/demo/demo/types';
import { DemoVO, DemoForm, DemoQuery, DrawFrom } from '@/api/demo/demo/types';
/**
* 新增设备
* @param data 设备数据
@@ -52,7 +52,7 @@ export const delDevice = (id: string | number | Array<string | number>) => {
});
};
/**
* 唤醒设备
* 激活设备
* @param id 单个主键或主键数组与删除相同POST + Queryids=1,2,3
*/
export const actDevice = (id: string | number | Array<string | number>) => {
@@ -75,3 +75,16 @@ export const updateDeviceInfo = (data: DeviceInfoForm) => {
data
});
};
/**
* todo绘制区域
* @param data 绘制信息
* /device/info/draw
*/
export const drawInfo = (data: DrawFrom) => {
return request({
url: '/device/info/draw',
method: 'post',
data: data
});
};

View File

@@ -104,7 +104,11 @@
<template #header>
<div class="flex w-full items-center justify-between gap-2 min-w-0 pr-8">
<span class="truncate">实时监控-北门出入门监控</span>
<el-button type="primary" class="shrink-0" @click="drawImage()">绘制区域</el-button>
<div>
<el-button v-if="!drawStart" type="primary" class="shrink-0" @click="drawImage()">绘制区域</el-button>
<el-button v-if="drawStart" type="primary" class="shrink-0" @click="clearImage()">清空区域</el-button>
<el-button v-if="drawStart" type="primary" class="shrink-0" @click="saveImage()">保存区域</el-button>
</div>
</div>
</template>
<div class="monitor-video-wrap">
@@ -120,10 +124,11 @@
</template>
<script setup name="Demo" lang="ts">
import { addEquipment, getDevicetList, getDeviceInfo, delDevice, actDevice, updateDeviceInfo } from '@/api/equipmentList/index';
import { addEquipment, getDevicetList, getDeviceInfo, delDevice, actDevice, updateDeviceInfo, drawInfo } from '@/api/equipmentList/index';
import { EquipmentList, DeviceInfoForm } from '@/api/equipmentList/types';
import { listDemo, getDemo, delDemo, addDemo, updateDemo } from '@/api/demo/demo';
import { DemoVO, DemoQuery, DemoForm } from '@/api/demo/demo/types';
import { log } from 'node:console';
const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -336,6 +341,9 @@ const displayToVideoPixel = (px: number, py: number, video: HTMLVideoElement): {
};
/** 开始采集:视频上点击两个对角点 */
const drawStart = ref(false);
const payload = ref();
const drawImage = () => {
resetMonitorDraw();
monitorDrawCollecting.value = true;
@@ -395,17 +403,31 @@ const onMonitorDrawClick = (e: MouseEvent) => {
const rectWidthPctOfWidth = (rw / VW) * 100;
const rectHeightPctOfHeight = (rh / VH) * 100;
const payload = {
videoIntrinsicSize: { width: VW, height: VH },
firstPointTopOffset_pctOfVideoHeight: Number(firstTopPctOfHeight.toFixed(4)),
firstPointDistanceToRight_pctOfVideoWidth: Number(firstRightPctOfWidth.toFixed(4)),
rectWidth_pctOfVideoWidth: Number(rectWidthPctOfWidth.toFixed(4)),
rectHeight_pctOfVideoHeight: Number(rectHeightPctOfHeight.toFixed(4))
payload.value = {
// videoIntrinsicSize: { width: VW, height: VH },
// firstPointTopOffset_pctOfVideoHeight: Number(firstTopPctOfHeight.toFixed(4)),
// firstPointDistanceToRight_pctOfVideoWidth: Number(firstRightPctOfWidth.toFixed(4)),
// rectWidth_pctOfVideoWidth: Number(rectWidthPctOfWidth.toFixed(4)),
// rectHeight_pctOfVideoHeight: Number(rectHeightPctOfHeight.toFixed(4))
x: Number(firstRightPctOfWidth.toFixed(4)),
y: Number(firstTopPctOfHeight.toFixed(4)),
w: Number(rectWidthPctOfWidth.toFixed(4)),
h: Number(rectHeightPctOfHeight.toFixed(4))
};
console.log('[监控区域] 四点百分比(相对视频原始宽高 videoWidth/videoHeight):', payload);
proxy?.$modal.msgSuccess(
`已采集(相对原视频):顶距${payload.firstPointTopOffset_pctOfVideoHeight}% 右距${payload.firstPointDistanceToRight_pctOfVideoWidth}% 框宽${payload.rectWidth_pctOfVideoWidth}% 框高${payload.rectHeight_pctOfVideoHeight}%`
);
console.log('[监控区域] 四点百分比', payload.value);
//proxy?.$modal.msgSuccess(`已采集(相对原视频)x右距${payload.value.x}% y顶距${payload.value.y}% w框宽${payload.value.w}% h框高${payload.value.h}%`);
drawStart.value = true;
};
const clearImage = () => {
payload.value = {};
console.log(payload.value);
drawStart.value = false;
};
const saveImage = async () => {
await drawInfo(payload.value);
drawStart.value = false;
};
/** 删除按钮操作 */