front-end/src/views/modules/monitoring/warning.vue

392 lines
12 KiB
Vue
Raw Normal View History

2023-03-23 11:32:38 +08:00
<template>
<div class="warning">
<div class="conditions-div">
<el-form ref="formRef" :model="formData" :inline="true">
<el-form-item label="抓拍时间" prop="dateValue">
<el-date-picker v-model="formData.dateValue" type="datetimerange" range-separator="" start-placeholder=""
end-placeholder="结束时间" clearable>
</el-date-picker>
</el-form-item>
<el-form-item label="任务" prop="taskIds">
<el-select v-model="formData.taskIds" placeholder="请选择任务列表" clearable @change="taskChange">
<el-option v-for="item in taskList" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="摄像头" prop="cameraIds">
<el-select v-model="formData.cameraIds" placeholder="请选择摄像头列表" clearable>
<el-option v-for="item in cameraOptions" :key="item.value" :label="item.label" :value="item.value">
</el-option>
</el-select>
</el-form-item>
<el-form-item style="float:right">
<el-button type="primary" @click="clickSearch()"></el-button>
<el-button @click="resetClick('formRef')"></el-button>
<!-- <el-button type="primary" icon="el-icon-map-location" @click="openMapClick"></el-button> -->
</el-form-item>
</el-form>
</div>
<el-row :gutter="20" style="margin-top: 20px;">
<el-col :span="8" v-for="(item,index) in warningList" :key=index.libId>
<div style="background-color: #FFF;margin-bottom: 20px;border-radius: 2px;cursor: pointer;" @click="openTask(item)">
<div style="height:40px;line-height:40px;display:flex;justify-content: space-between;border-bottom: 1px solid #F1F8FF;box-sizing: border-box;">
<i>
<i class="font-fourteen" style="font-weight: bold;color: #333333;margin-left: 20px">{{item.cameraRegion}}</i>
</i>
<i style="font-weight: bold;color: #333333;margin-right: 20px;margin-left: 20px">{{item.time}}</i>
</div>
<div style="position: relative;">
<div style="display: flex;align-items: center;height: 150px;margin-left: 30px;">
<div style="width: 120px;height: 120px;background: #F1F6F9;">
<canvas width=120 height=120 :ref="'warningImage'+index">
</canvas>
</div>
<!-- 可考虑用背景图 -->
<div style="width: 120px;height: 120px;background: #F1F6F9;margin: 0 20px;text-align: center;">
<img :src="$replaceImgUrl(item.faceUrl)" alt="目标图片" height="100%">
</div>
<div style="height: 120px;display: flex;flex-direction: column;justify-content: space-around;">
<span><i>姓名{{item.name}}</i></span>
<span><i>性别{{item.sex}}</i></span>
<span><i>来源{{item.libName}}</i></span>
<span><i>相似度</i><i style="font-size: 30px;font-weight: 600;color: #FF343E;font-family:Bahnschrift;">{{(item.score*100).toFixed(2)}}%</i></span>
</div>
</div>
<div style="position: absolute;top:20px;right: 30px;">
<img v-if="item.taskType=='3'" src="../../../assets/img/warning/ts.png" alt="提示">
<img v-if="item.taskType=='2'" src="../../../assets/img/warning/jk.png" alt="监控">
<img v-if="item.taskType=='1'" src="../../../assets/img/warning/zb.png" alt="抓捕">
</div>
</div>
</div>
</el-col>
</el-row>
<!-- 弹窗 任务详情 -->
<task v-if="taskVisible" ref="task" @refreshTaskList></task>
<!-- 地图详情 -->
<warning-map ref="mapRef" @mapRefClick="mapRefClick"> </warning-map>
<el-pagination @current-change="handleCurrentChange" :current-page.sync="pageObj.page.pageNo" :page-size="pageObj.page.pageSize"
layout="total,prev, pager, next, jumper" :total="total">
</el-pagination>
</div>
</template>
<script>
import Task from './barrier-task'
import warningMap from './warning-map'
export default {
name: "watch",
data() {
return {
// 任务列表
taskList: [],
// 摄像头列表
cameraOptions: [],
formData: {
// dateValue如果设置为null,点击重置后dateValue的值为[null];dateValue如果设置为[],点击重置后dateValue的值为[]
dateValue: [],
taskIds: "",
cameraIds: "",
},
// 分页变量
pageObj: {
"cameraIds": [],
"page": {
"pageNo": 1,
"pageSize": 9,
"startTimestamp": null,
"stopTimestamp": null,
},
taskIds: [],
},
total: 0,
// 任务Id
taskId: "",
// 预警列表
warningList: [],
// 详情
taskVisible: false,
val: {}
}
},
components: {
Task,
warningMap
},
// activated
created() {
// 第一次加载(非路由跳转)
if (this.$route.params.taskId === undefined) {
// 任务列表
this.commonGetTaskList()
// 预警列表
this.getWarningList()
}
// 第一次加载(路由跳转,来自卡口)
else if (this.$route.params.taskId === "") {
// 任务列表
this.commonGetTaskList()
// 预警列表
this.getWarningList()
}
// 第一次加载(路由跳转,来自布控)
else {
this.formData.taskIds = this.$route.params.taskId
this.pageObj.taskIds = this.formData.taskIds.split()
this.getWarningList()
this.$http.post("/control/tasklist", {
"pageNo": 1,
"pageSize": 9999,
}).then(res => {
let taskList = res.data.data.records
this.taskList = []
taskList.forEach(item => {
this.taskList.push({
label: item.taskName,
value: item.taskNo
})
})
this.commonGetCameraList(this.formData.taskIds)
})
}
},
watch: {
$route(to, from) {
if ((from.name === "monitoring-barrier" || from.name === "monitoring-surveillance") && to.name ==
"monitoring-warning") {
this.formData = {
dateValue: [],
taskIds: "",
cameraIds: "",
}
this.pageObj = {
"cameraIds": [],
"page": {
"pageNo": 1,
"pageSize": 9,
"startTimestamp": null,
"stopTimestamp": null,
},
taskIds: [],
}
this.cameraOptions = []
// 非路由跳转
if (this.$route.params.taskId === undefined) {
return
}
// 路由跳转
else {
this.formData.taskIds = this.$route.params.taskId
this.$http.post("/control/tasklist", {
"pageNo": 1,
"pageSize": 9999,
}).then(res => {
if (res.data.code == 0) {
let taskList = res.data.data.records
this.taskList = []
taskList.forEach(item => {
this.taskList.push({
label: item.taskName,
value: item.taskNo
})
})
this.commonGetCameraList(this.formData.taskIds)
let dateArr = this.formData.dateValue
if (dateArr != null && dateArr.length != 0) {
let startDate = dateArr[0].getTime()
let endDate = dateArr[1].getTime()
this.pageObj.page.pageNo = 1
this.pageObj.page.startTimestamp = startDate
this.pageObj.page.stopTimestamp = endDate
}
if (this.formData.taskIds != "") {
this.pageObj.page.pageNo = 1
this.pageObj.taskIds = this.formData.taskIds.split()
if (this.formData.cameraIds != "") {
this.pageObj.page.pageNo = 1
this.pageObj.cameraIds = this.formData.cameraIds.split()
} else {
this.pageObj.cameraIds = []
}
} else {
this.pageObj.taskIds = []
}
this.getWarningList()
}
})
}
}
}
},
methods: {
// 打开单个预警信息
openTask(val) {
this.taskVisible = true
this.$nextTick(() => {
this.$refs.task.init(JSON.stringify(val))
})
},
// 搜索
clickSearch() {
let dateArr = this.formData.dateValue
if (dateArr == null || dateArr.length == 0) {
this.pageObj.page.startTimestamp = null
this.pageObj.page.stopTimestamp = null
this.pageObj.page.pageNo = 1
} else if (dateArr.length != 0) {
let startDate = dateArr[0].getTime()
let endDate = dateArr[1].getTime()
this.pageObj.page.pageNo = 1
this.pageObj.page.startTimestamp = startDate
this.pageObj.page.stopTimestamp = endDate
}
if (this.formData.taskIds != "") {
this.pageObj.page.pageNo = 1
this.pageObj.taskIds = this.formData.taskIds.split()
// if (this.formData.cameraIds != "") {
// this.pageObj.page.pageNo = 1
// this.pageObj.cameraIds = this.formData.cameraIds.split()
// } else {
// this.pageObj.cameraIds = []
// }
} else {
this.pageObj.taskIds = []
}
if (this.formData.cameraIds != "") {
this.pageObj.page.pageNo = 1
this.pageObj.cameraIds = this.formData.cameraIds.split()
} else {
this.pageObj.cameraIds = []
}
this.getWarningList()
},
// 页码
handleCurrentChange(val) {
this.pageObj.page.pageNo = val
let dateArr = this.formData.dateValue
if (dateArr == null || dateArr.length == 0) {
this.pageObj.page.startTimestamp = null
this.pageObj.page.stopTimestamp = null
} else if (dateArr.length != 0) {
let startDate = dateArr[0].getTime()
let endDate = dateArr[1].getTime()
this.pageObj.page.startTimestamp = startDate
this.pageObj.page.stopTimestamp = endDate
}
if (this.formData.taskIds != "") {
this.pageObj.taskIds = this.formData.taskIds.split()
// if (this.formData.cameraIds != "") {
// this.pageObj.cameraIds = this.formData.cameraIds.split()
// } else {
// this.pageObj.cameraIds = []
// }
} else {
this.pageObj.taskIds = []
}
if (this.formData.cameraIds != "") {
this.pageObj.cameraIds = this.formData.cameraIds.split()
} else {
this.pageObj.cameraIds = []
}
this.getWarningList()
},
// 表单重置
resetClick(rueleName) {
this.$refs[rueleName].resetFields()
},
// 切换任务
taskChange() {
this.cameraOptions = []
this.formData.cameraIds = ""
if (this.formData.taskIds != "") {
this.commonGetCameraList(this.formData.taskIds)
}
},
// 获取预警列表
getWarningList(obj = this.pageObj) {
this.$http.post("/warning/alarm", obj).then(res => {
if (res.data.code === 0) {
let warningList = res.data.data.records
this.warningList = warningList
this.total = Number(res.data.data.total);
this.warningList.forEach((item, index, arr) => {
this.$nextTick(() => {
let canvas = this.$refs[`warningImage${index}`][0]
let cxt = canvas.getContext("2d");
cxt.clearRect(0, 0, 120, 120);
let img = new Image();
img.src = item.bgImg;
img.onload = function() {
cxt.drawImage(img, item.positionVO.x, item.positionVO.y, item.positionVO.w, item.positionVO.h, 0, 0,
120,
120);
}
})
})
}
})
},
// 获取任务列表
commonGetTaskList() {
this.$http.post("/control/tasklist", {
"pageNo": 1,
"pageSize": 9999,
}).then(res => {
if (res.data.code == 0) {
this.taskList = []
let taskList = res.data.data.records
taskList.forEach(item => {
this.taskList.push({
label: item.taskName,
value: item.taskNo
})
})
}
})
},
// 获取摄像头列表
commonGetCameraList(taskId) {
this.$http.get(`/control/gettaskcamera/${taskId}`).then(res => {
console.log(res)
if (res.data.code == 0) {
let cameraList = res.data.data
cameraList.forEach(item => {
this.cameraOptions.push({
label: item.cameraName,
value: item.idFaceCamera
})
})
}
})
},
// 预警地图模式
openMapClick() {
this.$nextTick(() => {
this.$refs.mapRef.init()
})
},
// 地图模式回调
mapRefClick() {}
},
}
</script>
<style scoped>
i {
font-style: normal;
font-family: "Noto Sans SC";
}
.conditions-div {
background-color: #FFF;
border-radius: 2px;
}
.conditions-div>>>.el-form-item {
margin: 10px
}
</style>