设备数据检测

This commit is contained in:
wangxk 2025-04-29 14:23:16 +08:00
parent 347c33bd95
commit d394b565e2
16 changed files with 15156 additions and 53 deletions

View File

@ -0,0 +1,34 @@
import request from '@/utils/request';
//异常点位查询
export function getDeviceSignalTree(params:any){
return request({
url: '/basedata/substation-maindevice/getDeviceSignalTree' ,
method: 'get',
params:params
});
}
//查询信号信息{}
export function querySignalDataById(params:any){
return request({
url: '/auxcontrol/device-signal/querySignalDataById' ,
method: 'get',
params:params
});
}
//分页查询变电站辅控设备告警记录
export function workpage(params:any){
return request({
url: '/auxcontrol/device-work-data/page' ,
method: 'get',
params:params
});
}
//查询历史曲线
export function getHistoricalCurve(params:any){
return request({
url: '/auxcontrol/device-work-data/getHistoricalCurve' ,
method: 'get',
params:params
});
}

View File

@ -240,4 +240,12 @@ export function deleteDictItems(ids: string) {
method: 'delete'
});
}
// 查询字典项
export function getDictItemByCode(params:any) {
return request({
url: '/system/dictionaryItems/list',
method: 'post',
params:params
});
}

View File

@ -0,0 +1,99 @@
import request from '@/utils/request';
//新增变电站辅控设备信号
export function addDeviceSignal(data:any){
return request({
url: '/monitorConfig/DeviceSignal/addDeviceSignal',
method: 'post',
data
});
}
//分页查询变电站辅控设备信号
export function queryDeviceSignal(params:any){
return request({
url: '/monitorConfig/DeviceSignal/page',
method: 'get',
params:params
});
}
//通过辅控设备ID查询所有变电站辅控设备信号
export function listDeviceSignal(params:any){
return request({
url: '/monitorConfig/DeviceSignal/list',
method: 'post',
params:params
});
}
//修改变电站辅控设备信号
export function updateDeviceSignal(data:any){
return request({
url: '/monitorConfig/DeviceSignal/updateDeviceSignal',
method: 'post',
data
});
}
//根据ID删除变电站辅控设备信号
export function deleteDeviceSignalById(params:any){
return request({
url: '/monitorConfig/DeviceSignal/deleteDeviceSignalById',
method: 'post',
params:params
});
}
//批量删除变电站辅控设备信号
export function deleteDeviceByIds(params:any){
return request({
url: '/monitorConfig/DeviceSignal/deleteDeviceSignalByIds',
method: 'post',
params:params
});
}
//查询所有变电站辅控设备
export function getDeviceTree(params:any){
return request({
url: '/monitorConfig/Device/getDeviceTree',
method: 'post',
params:params
});
}
// 新增变电站辅控设备告警参数设置
export function addDeviceAlarmParameter(data:any){
return request({
url: '/monitorConfig/DeviceAlarmParameter/addDeviceAlarmParameter',
method: 'post',
data
});
}
//根据ID删除变电站辅控设备告警参数设置
export function deleteDeviceAlarmParameterById(params:any){
return request({
url: '/monitorConfig/DeviceAlarmParameter/deleteDeviceAlarmParameterById',
method: 'post',
params:params
});
}
//批量删除变电站辅控设备告警参数设置
export function deleteDeviceAlarmParameterByIds(params:any){
return request({
url: '/monitorConfig/DeviceAlarmParameter/deleteDeviceAlarmParameterByIds',
method: 'post',
params:params
});
}
//分页查询变电站辅控设备告警参数设置
export function DeviceAlarmParameter(params:any){
return request({
url: '/monitorConfig/DeviceAlarmParameter/page',
method: 'get',
params:params
});
}
//修改变电站辅控设备告警参数设置
export function updateDeviceAlarmParameter(data:any){
return request({
url: '/monitorConfig/DeviceAlarmParameter/updateDeviceAlarmParameter',
method: 'post',
data
});
}

View File

@ -0,0 +1,115 @@
import request from '@/utils/request';
//查询变电站辅控设备联动方案设置
export function listDeviceLinkagePlan(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/listDeviceLinkagePlan' ,
method: 'post',
params:params
});
}
//新增变电站辅控设备联动方案设置
export function addDeviceLinkagePlan(data:any){
return request({
url: '/monitorConfig/DeviceLinkage/addDeviceLinkagePlan' ,
method: 'post',
data
});
}
//修改变电站辅控设备联动方案设置
export function updateDeviceLinkagePlan(data:any){
return request({
url: '/monitorConfig/DeviceLinkage/updateDeviceLinkagePlan' ,
method: 'post',
data
});
}
//根据ID删除变电站辅控设备
export function deleteDeviceLinkagePlanById(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/deleteDeviceLinkagePlanById' ,
method: 'post',
params:params
});
}
//查询所有变电站辅控设备联动方案设置(联动操作列表)
export function listDeviceLinkageOperate(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/listDeviceLinkageOperate' ,
method: 'post',
params:params
});
}
//新增变电站辅控设备联动方案设置--联动操作列表
export function addDeviceLinkageOperate(data:any){
return request({
url: '/monitorConfig/DeviceLinkage/addDeviceLinkageOperate' ,
method: 'post',
data
});
}
//修改变电站辅控设备联动方案设置--联动操作列表
export function updateDeviceLinkageOperate(data:any){
return request({
url: '/monitorConfig/DeviceLinkage/updateDeviceLinkageOperate' ,
method: 'post',
data
});
}
//删除变电站辅控设备联动方案设置--联动操作列表
export function deleteDeviceLinkageOperate(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/deleteDeviceLinkageOperate' ,
method: 'post',
params:params
});
}
//修改变电站辅控设备联动方案设置--联动顺序号
export function updateOrderno(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/updateOrderno' ,
method: 'post',
params:params
});
}
//根据所属系统查询配置了联动任务的设备信号(运行监控)
export function listDeviceIdBySystemcode(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/listSignalIdBySystemcode' ,
method: 'post',
params:params
});
}
//根据设备信号查询所有的联动任务(运行监控)
export function listDeviceLinkageBySignalId(params:any){
return request({
url: '/monitorConfig/DeviceLinkage/listDeviceLinkageBySignalId' ,
method: 'post',
params:params
});
}
//根据设备信号查询所有的联动任务(运行监控)
export function sendTestData(params){
return request({
url: '/test/data/'+ params.name,
method: 'get',
params:params
});
}
//关闭WebSocket
export function closeWebSocket(params:any){
return request({
url: '/test/data/closeWebSocket',
method: 'post',
params:params
});
}

View File

@ -4,8 +4,8 @@ import request from '@/utils/request';
export function getdata(params:any){
return request({
url: '/basedata/substation-patroldevice/getPatrolDeviceList' ,
method: 'get',
params:params
method: 'post',
data:params
});
}
//新增设备

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<svg version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" width="14px" height="14px" xmlns="http://www.w3.org/2000/svg">
<g transform="matrix(1 0 0 1 -1871 -339 )">
<path d="M 2.00199999999995 4.49400000000003 C 2.00199999999995 4.16500000000002 2.17000000000007 3.99700000000001 2.49900000000002 3.99700000000001 L 6.49600000000009 3.99700000000001 C 6.83199999999988 3.99700000000001 6.99299999999994 4.16500000000002 6.99299999999994 4.49400000000003 C 6.99299999999994 4.82999999999998 6.82500000000005 4.99099999999999 6.49600000000009 4.99099999999999 L 2.49900000000002 4.99099999999999 C 2.16300000000001 4.99099999999999 2.00199999999995 4.82299999999998 2.00199999999995 4.49400000000003 Z M 2.00199999999995 6.49599999999998 C 2.00199999999995 6.16700000000003 2.17000000000007 5.99900000000002 2.49900000000002 5.99900000000002 L 5.50199999999995 5.99900000000002 C 5.83799999999997 5.99900000000002 5.99900000000002 6.16700000000003 5.99900000000002 6.49599999999998 C 5.99900000000002 6.83199999999999 5.8309999999999 6.993 5.50199999999995 6.993 L 2.49900000000002 6.993 C 2.16300000000001 6.993 2.00199999999995 6.82499999999999 2.00199999999995 6.49599999999998 Z M 2.00199999999995 8.49799999999999 C 2.00199999999995 8.16899999999998 2.17000000000007 8.00099999999998 2.49900000000002 8.00099999999998 L 4.50099999999998 8.00099999999998 C 4.83699999999999 8.00099999999998 4.99800000000005 8.16899999999998 4.99800000000005 8.49799999999999 C 4.99800000000005 8.834 4.82999999999993 8.995 4.50099999999998 8.995 L 2.49900000000002 8.995 C 2.16300000000001 8.995 2.00199999999995 8.827 2.00199999999995 8.49799999999999 Z M 9.49900000000002 12.992 L 9.49900000000002 14 L 1.49800000000005 14 C 0.672000000000025 14 0 13.328 0 12.502 L 0 1.49799999999999 C 0 0.672000000000025 0.672000000000025 0 1.49800000000005 0 L 9.99600000000009 0 C 10.8219999999999 0 11.4939999999999 0.672000000000025 11.4939999999999 1.49799999999999 L 11.4939999999999 5.99900000000002 L 10.5 5.99900000000002 L 10.5 1.49799999999999 C 10.5 1.22500000000002 10.2760000000001 1.00099999999998 10.0029999999999 1.00099999999998 L 1.49800000000005 1.00099999999998 C 1.22499999999991 1.00099999999998 1.00099999999998 1.22500000000002 1.00099999999998 1.49799999999999 L 1 12.495 C 1.00099999999998 12.768 1.22499999999991 12.992 1.49800000000005 12.992 L 9.49900000000002 12.992 Z M 9.75099999999998 14 C 7.40599999999995 14 5.50199999999995 12.096 5.50199999999995 9.75099999999998 C 5.50199999999995 7.40600000000001 7.40599999999995 5.50200000000001 9.75099999999998 5.50200000000001 C 12.096 5.50200000000001 14 7.40600000000001 14 9.75099999999998 C 14 12.096 12.096 14 9.75099999999998 14 Z M 12.999 9.75099999999998 C 12.999 7.959 11.5430000000001 6.50299999999999 9.75099999999998 6.50299999999999 C 7.95900000000006 6.50299999999999 6.50299999999993 7.959 6.50299999999993 9.75099999999998 C 6.50299999999993 11.543 7.95900000000006 12.999 9.75099999999998 12.999 C 11.5430000000001 12.999 12.999 11.543 12.999 9.75099999999998 Z M 11.501 10.5 L 9.00199999999995 10.5 L 9.00199999999995 7.49700000000001 C 9.00199999999995 7.22399999999999 9.22599999999989 7 9.49900000000002 7 C 9.77199999999993 7 9.99600000000009 7.22399999999999 9.99600000000009 7.49700000000001 L 9.99600000000009 9.49900000000002 L 11.4939999999999 9.49900000000002 C 11.7670000000001 9.49900000000002 11.991 9.72300000000001 11.991 9.99599999999998 C 11.998 10.276 11.7740000000001 10.5 11.501 10.5 Z " fill-rule="nonzero" fill="#00ffff" stroke="none" transform="matrix(1 0 0 1 1871 339 )" />
</g>
</svg>

View File

@ -397,6 +397,7 @@ watch(() => props.CloseNav, (newValue, oldValue) => {
background-size: 100% 100%;
width: 100%;
height: 62px;
z-index:99999 !important;
.times {
font-family: '微软雅黑';

View File

@ -10,3 +10,33 @@ export function isExternal(path: string) {
const isExternal = /^(https?:|http?:|mailto:|tel:)/.test(path);
return isExternal;
}
export function publicTree(equiptrees:any,equipname:any) {
let arr:any = []
let newequiptree = JSON.parse(JSON.stringify(equiptrees))
if(equipname !=''&& equipname !=null){
newequiptree.forEach((item:any) => {
if(item.name.toLowerCase().indexOf(equipname.toLowerCase()) !== -1){
arr.push(item)
}
})
}else{
// debugger
arr = newequiptree
}
if(!Array.isArray(arr) || !arr.length) return;
let map:any = {};
arr.forEach(item => {//建立每个数组元素id和该对象的关系
map[item.id] = item //这里可以理解为浅拷贝,共享引用
})
let roots:any = [];
arr.forEach(item => {
const parent = map[item.parentid];
if(parent){
(parent.children || (parent.children=[])).push(item);
}
else{
roots.push(item);
}
})
return roots
}

View File

@ -479,7 +479,7 @@
<el-table v-if="selType == '01'" :data="tableData" :row-class-name="tableRowClassName" class="PatrolMonitoring"
v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;height:570px;overflow: auto;margin:10px 0"
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }" @row-click="rowClick">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }" @row-click="rowClick">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="areaName" label="区域" align="center" width="100" />
<el-table-column prop="patroldeviceCode" label="设备编码" align="center" width="200" />
@ -547,7 +547,7 @@
<el-table v-if="selType == '02' || lineDrapStart == true || isUAVdropLine == true" class="PatrolMonitoring"
:data="daviceData" :row-class-name="tableRowClassName" v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;height:570px;overflow: auto;margin:10px 0"
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }" @row-click="rowClick">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }" @row-click="rowClick">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="deviceName" label="点位名称" width="140" />
<el-table-column prop="mainDeviceName" label="所属主设备" width="160" />
@ -596,7 +596,7 @@
<el-table v-if="selType == '04' || selType == '06'" :data="robotData" :row-class-name="tableRowClassName"
class="PatrolMonitoring" v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;height:570px;overflow: auto;margin:10px 0"
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }" @row-click="rowClick">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }" @row-click="rowClick">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="patroldeviceCode" label="设备编码" width="140" />
<el-table-column prop="patroldeviceName" label="设备名称" width="160" />
@ -610,7 +610,7 @@
<el-table v-if="selType == '05' && associationTitle == '关联部件'" :data="componentData" class="PatrolMonitoring"
:row-class-name="tableRowClassName" v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;height:570px;overflow: auto;margin:10px 0"
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }" @row-click="rowClick">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }" @row-click="rowClick">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="areaName" label="所属区域" width="140" />
<el-table-column prop="bayName" label="所属间隔" width="160" />
@ -654,7 +654,7 @@
<el-table v-if="selType == '05' && associationTitle == '关联设备'" :data="mainDeviceData" class="PatrolMonitoring"
:row-class-name="tableRowClassName" v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;height:570px;overflow: auto;margin:10px 0"
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }" @row-click="rowClick">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }" @row-click="rowClick">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="areaName" label="所属区域" width="140" />
<el-table-column prop="bayName" label="所属间隔" width="160" />
@ -731,7 +731,7 @@
<el-table ref="multipleTable" :tree-props="{ children: 'children', hasChildren: 'hasChildren' }" row-key="id"
:data="associationLineData" class="PatrolMonitoring" :row-class-name="tableRowClassName" highlight-current-row
style="width: 100%;margin:auto;position: relative;height:400px;overflow: auto;margin:10px 0"
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }"
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }"
@selection-change="associationTableChange">
<el-table-column type="selection" align="center" width="60" />
<el-table-column type="index" align="center" label="序号" width="60" />
@ -4848,6 +4848,7 @@ function getData() {
areaIdType.value = res.data
})
getdata(params).then((res) => {
console.log(res)
tableData.value = res.data.records
getinfo.value.size = res.data.size
getinfo.value.current = res.data.current

View File

@ -0,0 +1,545 @@
<script lang="ts">
export default {
name: "equipment",
};
</script>
<script setup lang="ts">
import { ref, onMounted, nextTick } from "vue";
import { Search } from '@element-plus/icons-vue';
import { getDeviceSignalTree, querySignalDataById, workpage, getHistoricalCurve } from "@/api/datasurvey/index";
import { useUserStore } from '@/store/modules/user';
import Page from '@/components/Pagination/page.vue'
import * as echarts from 'echarts'
const userStore = useUserStore();
//
interface Tree {
[x: string]: any;
label: string;
children?: Tree[];
}
const signaform = ref({
signalName: '',
stationCode: userStore.stationCode,
})
const defaultProps = {
children: "children",
label: "name"
};
const treedata: any = ref([]);
const treeRef = ref();
const treeloading = ref(true)
const currentNodeKey = ref("")
const signaId = ref('')
//
const signName = ref('')
function getTreeData() {
treeloading.value = true
getDeviceSignalTree(signaform.value).then((res: any) => {
if (res.code == 0) {
treedata.value = res.data
signaId.value = res.data[0].children[0].children[0].children[0].children[0].id
signName.value = res.data[0].children[0].children[0].children[0].children[0].name
nextTick(() => {
treeRef.value?.setCurrentKey(signaId.value);
});
getsignadata()
gettabledata()
getechartdata()
}
treeloading.value = false
})
}
function handleNodeClick(data: any, node: any) {
if (data.children.length > 0) {
node.isCurrent = false
currentNodeKey.value = ""
nextTick(() => {
currentNodeKey.value = signaId.value
})
} else {
console.log(data)
signaId.value = data.id
signName.value = data.name
getsignadata()
gettabledata()
getechartdata()
}
}
const loading = ref(false)
const tableData = ref([])
const total = ref(0)
const detaall: any = ref([])
const tableform = ref({
size: 10,
current: 1,
startDate: '',
endDate: '',
signalId: '',
})
const tableRowClassName = ({
row,
rowIndex,
}: {
row: any
rowIndex: number
}) => {
if (rowIndex % 2 === 0) {
return 'warning-row'
} else if (rowIndex % 2 === 1) {
return 'success-row'
}
return ''
}
const signaldata: any = ref({})
const dignaloading = ref(false)
function getsignadata() {
dignaloading.value = true
querySignalDataById({ signalId: signaId.value }).then((res: any) => {
if (res.data) {
signaldata.value = res.data
} else {
signaldata.value = {}
}
dignaloading.value = false
})
}
function gettabledata() {
if (detaall.value.length > 0) {
tableform.value.startDate = formatDate(detaall.value[0])
tableform.value.endDate = formatDate(detaall.value[1])
} else {
tableform.value.startDate = ''
tableform.value.endDate = ''
}
tableform.value.signalId = signaId.value
loading.value = true
workpage(tableform.value).then((res: any) => {
tableData.value = res.data.records
tableform.value.size = res.data.size
tableform.value.current = res.data.current
total.value = res.data.total
loading.value = false
})
}
function formatDate(isoString: any) {
const date = new Date(isoString);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
const hours = String(date.getHours()).padStart(2, '0');
const minutes = String(date.getMinutes()).padStart(2, '0');
const seconds = String(date.getSeconds()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}
//线
const echartdata: any = ref({})
function getechartdata() {
getHistoricalCurve({ signalId: signaId.value }).then((res: any) => {
echartdata.value = res.data
drawEchart()
})
}
//线
function drawEchart() {
let myChart = echarts.init(document.getElementById("deviceEachers") as HTMLDivElement);
myChart.setOption({
title: {
text: ''
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['Step Start', 'Step Middle', 'Step End']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: echartdata.value.xAxis,
yAxis: echartdata.value.yAxis,
series: echartdata.value.series
})
}
onMounted(() => {
getTreeData()
})
</script>
<template>
<div class="faulttemplate-box">
<aside id="silderLeft">
<div class="displayflex" style="margin: 10px 0px 5px 0px;padding-left: 8px;height: 30px;">
<img src="@/assets/navigation/ty_bq.png" />
<div class="title">数据列表</div>
</div>
<el-input v-model="signaform.signalName" style="width: 240px" placeholder="请输入信号名称" :suffix-icon="Search"
@change="getTreeData()" />
<el-scrollbar height="calc(80vh)" style="width:99%;">
<el-tree-v2 v-loading="treeloading" style="width: 100%;" :data="treedata" :props="defaultProps"
:height="800" ref="treeRef" node-key="id" :current-node-key="currentNodeKey"
:highlight-current="true" @node-click="handleNodeClick" />
</el-scrollbar>
</aside>
<section class="silderRight1">
<div class="right_top">
<div class="top_left">
<div class="title_right">
<img src="@/assets/navigation/ty_bq.png" alt="">
<div>信号信息</div>
</div>
<div class="text_top">
<div class="text_top_title">
<div></div>所属网关机信息
</div>
<div class="text_top_content" v-loading="dignaloading">
<div class="content_one">
<div class="content_one_title">设备类型</div>
<div class="content_one_text">{{ signaldata.deviceType }}</div>
</div>
<div class="content_one">
<div class="content_one_title">设备名称</div>
<div class="content_one_text">{{ signaldata.deviceName }}</div>
</div>
<div class="content_one">
<div class="content_one_title">设备型号</div>
<div class="content_one_text">{{ signaldata.deviceModel }}</div>
</div>
<div class="content_one">
<div class="content_one_title">ip地址</div>
<div class="content_one_text">{{ signaldata.ipAddr }}</div>
</div>
<div class="content_one">
<div class="content_one_title">协议类型</div>
<div class="content_one_text">{{ signaldata.protocol }}</div>
</div>
<div class="content_one">
<div class="content_one_title">采集频率</div>
<div class="content_one_text">{{ signaldata.frequency }}</div>
</div>
</div>
</div>
<div class="text_top">
<div class="text_top_title">
<div></div>型号信息
</div>
<div class="text_top_content" v-loading="dignaloading">
<div class="content_one">
<div class="content_one_title">信号编号</div>
<div class="content_one_text">{{ signaldata.signalCode }}</div>
</div>
<div class="content_one">
<div class="content_one_title">信号名称</div>
<div class="content_one_text">{{ signaldata.signalName }}</div>
</div>
<div class="content_one">
<div class="content_one_title">信号类型</div>
<div class="content_one_text">{{ signaldata.signalType }}</div>
</div>
<div class="content_one">
<div class="content_one_title">信号单位</div>
<div class="content_one_text">{{ signaldata.signalUnit }}</div>
</div>
<div class="content_one">
<div class="content_one_title">正常范围</div>
<div class="content_one_text">{{ signaldata.normalRange }}</div>
</div>
<div class="content_one">
<div class="content_one_title">遥控遥调类型</div>
<div class="content_one_text">{{ signaldata.ykytType }}</div>
</div>
</div>
</div>
</div>
<div class="top_left">
<div class="title_right">
<img src="@/assets/navigation/ty_bq.png" alt="">
<div>监测数据</div>
</div>
<div class="cont_top">
<div class="cont_top_left">
<el-date-picker v-model="detaall" type="datetimerange" start-placeholder="开始时间"
end-placeholder="结束时间" @change="gettabledata" />
<el-button style="margin-left: 10px;" @click="gettabledata"
value-format="YYYY-MM-DD HH:mm:ss" class="searchButton">搜索</el-button>
</div>
<div class="cont_top_right"> <el-button class="searchButton">导出</el-button></div>
</div>
<div class="cont_bottom">
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(30vh);
overflow: auto;;margin-bottom: 15px;" row-key="id" default-expand-all
:row-class-name="tableRowClassName"
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
<el-table-column type="index" label="序号" width="50px" align="center" />
<el-table-column label="监测数值" prop="value"></el-table-column>
<el-table-column label="单位" prop="unit"></el-table-column>
<el-table-column label="采集时间" prop="startTime" width="120"></el-table-column>
</el-table>
<Page :total="total" v-model:size="tableform.size" v-model:current="tableform.current"
@pagination="gettabledata()">
</Page>
</div>
</div>
</div>
<div class="right_bottom">
<div class="title_right">
<img src="@/assets/navigation/ty_bq.png" alt="">
<div>历史曲线</div>
</div>
<div id="deviceEachers" :style="{ width: '100%', height: '90%' }"></div>
</div>
</section>
</div>
</template>
<style scoped lang="scss">
.faulttemplate-box {
height: 100%;
display: flex;
display: -webkit-flex;
padding: 5px 20px;
// background-color: #f2f4f9;
.silderRight1 {
flex: 1;
width: 100%;
height: calc(90vh);
overflow: auto;
background-color: rgba(255, 255, 255, 0);
border-radius: 3px;
padding: 0px 15px 15px 15px;
padding-bottom: 0px;
box-sizing: border-box;
display: flex;
flex-direction: column;
justify-content: space-between;
// margin-left: 15px;
// background: #17212e;
.right_top {
width: 100%;
height: 487px;
display: flex;
align-items: center;
justify-content: space-between;
.top_left {
width: 787px;
height: 488px;
background: url(@/assets/navigation/sbjc_488.png);
background-size: 100% 100%;
box-sizing: border-box;
padding: 20px;
.text_top {
width: 100%;
.text_top_title {
display: flex;
align-items: center;
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
font-weight: 700;
font-style: normal;
font-size: 16px;
color: #00CCFF;
padding: 20px 0px;
div {
width: 3px;
height: 12px;
background: #00ffff;
margin-right: 5px;
}
}
.text_top_content {
width: 100%;
display: flex;
flex-wrap: wrap;
align-items: center;
border-bottom: 1px solid #00397c;
border-right: 1px solid #00397c;
.content_one {
width: 50%;
display: flex;
align-items: center;
.content_one_title {
width: 114px;
height: 50px;
text-align: center;
line-height: 50px;
border-top: 1px solid #00397c;
border-left: 1px solid #00397c;
background-color: #002562;
font-size: 14px;
color: #B5D7FF;
}
.content_one_text {
width: 267px;
height: 50px;
text-align: center;
line-height: 50px;
border-top: 1px solid #00397c;
border-left: 1px solid #00397c;
font-size: 14px;
color: #B5D7FF;
}
}
}
}
.cont_top {
display: flex;
align-items: center;
justify-content: space-between;
margin: 20px 0px;
.cont_top_left {
width: 60%;
display: flex;
align-items: center;
justify-content: space-between;
}
}
}
}
.right_bottom {
box-sizing: border-box;
padding: 20px;
margin-top: 15px;
width: 100%;
height: calc(36vh);
background: url(@/assets/navigation/sbjc_485.png);
background-size: 100% 100%;
}
.title_right {
width: 100%;
display: flex;
align-items: center;
// padding-bottom: 10px;
div {
font-size: 18px;
font-weight: bold;
color: #fff;
margin-left: 5px;
}
}
}
}
:deep(.el-tree-node.is-current>.el-tree-node__content) {
width: 100%;
height: 40px;
// color: #fff !important;
}
:deep(.el-tree-node__content) {
width: 100% !important;
height: 40px !important;
margin: auto !important;
}
.el-message-box {
width: 300px !important;
}
:deep(.el-form-item__label) {
width: 105px !important;
}
:deep(.el-tooltip__trigger) {
width: 100%;
}
.displayflex {
display: flex;
align-items: center;
// margin-top:15px;
.title {
margin-left: 5px;
text-decoration: none !important;
font-family: "阿里妈妈数黑体 Bold";
font-weight: 700;
font-style: normal;
font-size: 16px !important;
color: rgb(255, 255, 255);
line-height: 12px;
}
}
:deep(.el-tree) {
background-color: #ffffff00 !important;
--el-tree-node-hover-bg-color: #0099ff09;
}
#silderLeft {
width: 260px;
box-sizing: border-box;
// background: #ffffff00;
border-radius: 3px;
position: relative;
background: url(@/assets/navigation/ty_260x988.png);
background-size: 100% 100%;
padding: 0px 10px;
&:hover {
.moveBtn {
opacity: 1;
}
}
}
:deep(.el-table__inner-wrapper::before) {
background-color: #0099ff00;
}
:deep(.el-table:not(.el-table--border) .el-table__cell) {
border: none;
}
:deep(.el-input__wrapper) {
background-color: rgba(19, 26, 37, 0);
}
:deep(.el-select:hover:not(.el-select--disabled) .el-input__wrapper) {
box-shadow: 0 0 0 1px #009bff inset;
}
:deep(.el-select) {
--el-select-input-focus-border-color: #009bff !important;
}
:deep(.el-tree-node__label) {
white-space: pre-wrap;
}
</style>

View File

@ -382,7 +382,7 @@ function currency(list: any, itemcode: any) {
<el-table v-if="selectedId == '1'" :data="tableData1" :row-class-name="tableRowClassName" class="PatrolMonitoring"
v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(100% - 79px); overflow: auto "
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="patroldeviceName" label="摄像机名称" align="center" min-width="130" />
<el-table-column prop="nvrname" label="所属NVR" align="center" min-width="130" />
@ -427,7 +427,7 @@ function currency(list: any, itemcode: any) {
<el-table v-if="selectedId == '2'" :data="tableData2" :row-class-name="tableRowClassName" class="PatrolMonitoring"
v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(100% - 79px); overflow: auto "
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="patroldeviceCode" label="设备编号" align="center" min-width="130" />
<el-table-column prop="patroldeviceName" label="设备名称" align="center" min-width="130" />
@ -466,7 +466,7 @@ function currency(list: any, itemcode: any) {
<el-table v-if="selectedId == '3'" :data="tableData3" :row-class-name="tableRowClassName" class="PatrolMonitoring"
v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(100% - 79px); overflow: auto "
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="patroldeviceCode" label="设备编号" align="center" min-width="130" />
<el-table-column prop="patroldeviceName" label="设备名称" align="center" min-width="130" />
@ -497,7 +497,7 @@ function currency(list: any, itemcode: any) {
<el-table v-if="selectedId == '4'" :data="tableData4" :row-class-name="tableRowClassName" class="PatrolMonitoring"
v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(100% - 79px); overflow: auto "
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="patroldeviceCode" label="设备编号" align="center" min-width="130" />
<el-table-column prop="patroldeviceName" label="设备名称" align="center" min-width="130" />
@ -533,7 +533,7 @@ function currency(list: any, itemcode: any) {
<el-table v-if="selectedId == '5'" :data="tableData5" :row-class-name="tableRowClassName" class="PatrolMonitoring"
v-loading="loading" highlight-current-row
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(100% - 79px); overflow: auto "
:header-cell-style="{ background: '#253b51', color: '#B5D7FF', height: '43px' }">
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
<el-table-column type="index" align="center" label="序号" width="60" />
<el-table-column prop="date" label="时间" align="center" min-width="150" />
<el-table-column prop="count1" label="巡视点位漏检率" align="center" min-width="150">

View File

@ -71,7 +71,6 @@ function handleNodeClick(data: Tree, node: any) {
orgId.value = data.id;
dialog.value = true
getdata();
}

View File

@ -0,0 +1,9 @@
export default class PointBean{
x:number;
y:number;
constructor(x:number,y:number){
this.x = x;
this.y = y;
}
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -15,13 +15,14 @@
? '开始' : '结束' }}测距</el-button>
<el-button v-show="!isroam" :style="{ right: isRightList ? '490px' : '150px' }" @click="reset"
class="THREE-button">恢复初始态</el-button>
<el-button class="THREE-button" :style="{ right: isRightList ? '350px' : '10px' }" @click.stop="roamClick">{{ !isroam
<el-button class="THREE-button" :style="{ right: isRightList ? '350px' : '10px' }" @click.stop="roamClick">{{
!isroam
? '开始' : '结束' }}漫游</el-button>
<div v-show="isRightList" class="THREE-right-list" @click.stop>
<div class="THREE-right-list-title">
<span>
<span v-show="selType == '01'">摄像机列表</span>
<span v-show="selType == '04'">无人车列表</span>
<span v-show="selType == '02'">点位列表</span>
<span v-show="selType == '05'">设备列表</span></span>
<img src="@/assets/3d/u523.png" style="cursor: pointer;margin:0" alt="" @click.stop="isRightList = false">
</div>
@ -34,9 +35,12 @@
</el-input>
<div v-if="selType == '01'" class="THREE-right-list-main-tab">
<div :class="isOnLine == '01' ? 'THREE-right-list-main-tab-hov' : ''" @click.stop="rightTabClik('01')">全部</div>
<div :class="isOnLine == '02' ? 'THREE-right-list-main-tab-hov' : ''" @click.stop="rightTabClik('02')">在线</div>
<div :class="isOnLine == '03' ? 'THREE-right-list-main-tab-hov' : ''" @click.stop="rightTabClik('03')">离线</div>
<div :class="isOnLine == '01' ? 'THREE-right-list-main-tab-hov' : ''" @click.stop="rightTabClik('01')">全部
</div>
<div :class="isOnLine == '02' ? 'THREE-right-list-main-tab-hov' : ''" @click.stop="rightTabClik('02')">在线
</div>
<div :class="isOnLine == '03' ? 'THREE-right-list-main-tab-hov' : ''" @click.stop="rightTabClik('03')">离线
</div>
</div>
</div>
<ul v-show="selType != '04'" :style="{ height: selType == '01' ? 'calc(100vh - 260px)' : 'calc(100vh - 220px)' }">
@ -84,15 +88,26 @@
src="@/assets/3d/sc_dis.png" title="实时视频" alt="实时视频">
<img v-if="i.objinfo != undefined && i.objinfo.channelList != undefined && i.objinfo.online == 1"
src="@/assets/3d/ks.png" title="实时视频-1" alt="实时视频-1" @click.stop="realTimeVideo(i, 0)">
<img v-if="i.objinfo != undefined && i.objinfo.channelList != undefined && i.objinfo.channelList.length == 2"
<img
v-if="i.objinfo != undefined && i.objinfo.channelList != undefined && i.objinfo.channelList.length == 2"
src="@/assets/3d/ks.png" title="实时视频-2" alt="实时视频-2" @click.stop="realTimeVideo(i, 1)">
<img v-show="i.type == 'Camera' && !i.start" src="@/assets/3d/ange.png" title="摄像机范围" alt="摄像机范围"
@click.stop="listange(i)">
<img v-show="i.type == 'Camera' && i.start" src="@/assets/3d/ange1.png" title="摄像机范围" alt="摄像机范围"
@click.stop="listange(i)">
</div>
<div v-show="selType == '02'" class="three-right-list-main-icon">
<img v-show="i.objinfo != undefined" src="@/assets/3d/xq.png" title="巡视点位信息" alt="巡视点位信息"
@click.stop="informationClick(i), listClick(i, index)">
<img v-if="!i.objinfo && !i.objinfo.patroldeviceJson" src="@/assets/3d/sc_dis.png" title="实时视频" alt="实时视频">
<img v-else src="@/assets/3d/ks.png" title="实时视频-1" alt="实时视频-1" @click.stop="getDeviceVideo(i, 0)">
<img v-show="i.objinfo == undefined" @click.stop src="@/assets/3d/xq_dis.png" title="巡视点位信息" alt="巡视点位信息">
<img src="@/assets/sytlechange/u157.svg" alt="" title="历史记录"
@click.stop="historicalRecords(i), listClick(i, index)">
</div>
<div v-show="selType == '05'" class="THREE-right-list-main-icon">
<img src="@/assets/3d/xq.png" @click.stop="informationClick(i), listClick(i, index)" title="部件信息" alt="部件信息">
<img src="@/assets/3d/xq.png" @click.stop="informationClick(i), listClick(i, index)" title="部件信息"
alt="部件信息">
</div>
</li>
</ul>
@ -111,7 +126,8 @@
<span class="THREE-right-list-main-icon" style="display:flex;margin-right:10px">
<img v-show="data.objinfo != undefined" src="@/assets/3d/xq.png" title="无人车信息" alt="无人车信息"
@click.stop="informationClick(data), handleNodeClick(data, node)">
<img v-show="data.objinfo == undefined" @click.stop src="@/assets/3d/xq_dis.png" title="无人车信息" alt="无人车信息">
<img v-show="data.objinfo == undefined" @click.stop src="@/assets/3d/xq_dis.png" title="无人车信息"
alt="无人车信息">
<img v-if="data.objinfo == undefined || data.objinfo.channelList == undefined || data.objinfo.online == 0"
src="@/assets/3d/sc_dis.png" title="实时视频" alt="实时视频">
<img v-if="data.objinfo != undefined && data.objinfo.channelList != undefined" src="@/assets/3d/ks.png"
@ -131,20 +147,21 @@
</div>
<div v-show="isSelType" id="context-operate" @click.stop>
<div :class="selType == '05' ? 'context-operate-hov' : ''" @click="selTypeChange('05')">
<span v-show="selType == '05'"><img src="@/assets/3d/sb1.png" alt=""></span>
<span v-show="selType != '05'"><img src="@/assets/3d/sb.png" alt=""></span>
<span v-show="selType == '05'"><img src="@/assets/navigation/swxs_sz_sb1.png" alt=""></span>
<span v-show="selType != '05'"><img src="@/assets/navigation/swxs_sz_sb.png" alt=""></span>
<span>设备</span>
</div>
<div :class="selType == '01' ? 'context-operate-hov' : ''" @click="selTypeChange('01')">
<span v-show="selType == '01'"><img src="@/assets/3d/sxj1.png" alt=""></span>
<span v-show="selType != '01'"><img src="@/assets/3d/sxj.png" alt=""></span>
<span v-show="selType == '01'"><img src="@/assets/navigation/swxs_sz_sxt1.png" alt=""></span>
<span v-show="selType != '01'"><img src="@/assets/navigation/swxs_sz_sxt.png" alt=""></span>
<span>摄像机</span>
</div>
<div :class="selType == '04' ? 'context-operate-hov' : ''" @click="selTypeChange('04')">
<span v-show="selType == '04'"><img src="@/assets/3d/wrc1.png" alt=""></span>
<span v-show="selType != '04'"><img src="@/assets/3d/wrc.png" alt=""></span>
<span>无人车</span>
<div :class="selType == '02' ? 'context-operate-hov' : ''" @click="selTypeChange('02')">
<span v-show="selType == '02'"><img src="@/assets/navigation/swxs_sz_sj1.png" alt=""></span>
<span v-show="selType != '02'"><img src="@/assets/navigation/swxs_sz_sj.png" alt=""></span>
<span>点位</span>
</div>
</div>
<!-- 详细信息弹窗 -->
<div class="detailed-information" v-if="information">
@ -169,6 +186,46 @@
<div class="examination-contont-text">生产厂家{{ objRow.userData.objinfo.manufacturer }}</div>
<div class="examination-contont-text">安装位置{{ objRow.userData.objinfo.place }}</div>
</div>
<div class="examination-contont" v-if="selType == '02'">
<div class="examination-contont-text">点位名称{{ objRow.userData.objinfo.deviceName }}</div>
<div class="examination-contont-text">所属主设备{{ objRow.userData.objinfo.mainDeviceName }}</div>
<div class="examination-contont-text">所属部件{{ objRow.userData.objinfo.componentName }}</div>
<div class="examination-contont-text">关联摄像机/预置位
<!-- {{ objRow.userData.objinfo.patroldeviceJson.device_code }}/ {{ objRow.userData.objinfo.patroldeviceJson.device_pos }} -->
</div>
<div class="examination-contont-text">识别类型
<span v-if="objRow.userData.objinfo.recognitionTypeList == 1">表计读取</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 2">位置状态识别</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 3">设备外观查看</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 4">红外测温</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 5">声音检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 6">闪烁检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 13">局放特高频检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 12">局放地电压检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 11">局放超声波检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 101">环境温度检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 102">环境湿度检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 103">氧气浓度检测</span>
<span v-if="objRow.userData.objinfo.recognitionTypeList == 104">SF6浓度检测</span>
</div>
<div class="examination-contont-text">表计类型{{ objRow.userData.objinfo.meterType }}</div>
<div class="examination-contont-text">分析类型{{ objRow.userData.objinfo.manufacturer }}
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'isolator'">刀闸状态</span>
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'switch'">开关/压板状态</span>
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'meter'">仪表读数</span>
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'infrared'">红外温度</span>
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'sound'">声音</span>
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'light'">指示灯</span>
<span
v-if="objRow.userData.objinfo.pictureAnalysisTypeList && objRow.userData.objinfo.pictureAnalysisTypeList.PictureAnalysisType == 'qrcode'">实物ID</span>
</div>
</div>
<div class="examination-contont" v-if="selType == '04'">
<div class="examination-contont-text">设备编码{{ objRow.userData.objinfo.patroldeviceCode }}</div>
<div class="examination-contont-text">设备名称{{ objRow.userData.objinfo.patroldeviceName }}</div>
@ -294,6 +351,97 @@
</div>
</template>
</Eldialog>
<!-- 历史点位信息 -->
<Eldialog v-if="history" title="历史巡视记录" :zIndex="2000" :width="'1540px'" @before-close="history = false">
<template v-slot:PopFrameContent>
<div>
<el-date-picker v-model="timeSlot" type="daterange" range-separator="" start-placeholder="开始时间"
end-placeholder="结束时间" style="margin-right: 10px;" value-format="YYYY-MM-DD" />
<el-button class="searchButton" @click="historicalRecords(deviceIdone)">搜索</el-button>
<el-button class="searchButton" @click="hisreset()">重置</el-button>
</div>
<el-table v-loading="hisloading" :data="historydata" style="width: 100%;height: calc(70vh);
overflow: auto;;margin: 15px 0px;" row-key="id" default-expand-all :row-class-name="tableRowClassName"
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
<el-table-column type="index" align="center" label="序号" width="60px" />
<el-table-column prop="mainDeviceName" label="设备名称" />
<el-table-column prop="componentName" label="部件名称" />
<el-table-column prop="deviceName" label="点位名称" />
<el-table-column prop="meterType" label="表计类型" align="center">
<template #default="scope">
<span
v-if="currency(MeterTypeList, scope.row.meterType) != undefined && currency(MeterTypeList, scope.row.meterType) != ''">{{
currency(MeterTypeList, scope.row.meterType) }}</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column prop="time" label="巡视时间" width="110px" align="center" />
<el-table-column prop="flag" label="状态" width="100px" align="center">
<template #default="scope">
<span v-if="scope.row.flag == '0'">未巡视</span>
<span v-if="scope.row.flag == '1'">已巡视</span>
<span v-if="scope.row.flag == '2'">已完成</span>
<span v-if="scope.row.flag == '3'">设备检修中</span>
<span v-if="scope.row.flag == '4'">巡视失败</span>
<span v-if="scope.row.flag == '5'">已修正</span>
<span v-if="scope.row.flag == '6'">采集失败</span>
</template>
</el-table-column>
<el-table-column prop="materialId" label="实物id" align="center">
</el-table-column>
<el-table-column prop="desc" label="识别类型" width="140px">
<template #default="scope">
<span v-if="scope.row.desc != null && scope.row.desc != ''">{{ scope.row.desc
}}</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column label="识别值" width="100px">
<template #default="scope">
<span v-if="scope.row.valueType == 'meter' || scope.row.valueType == 'infrared'">
<span v-if="scope.row.analysisResult == '异常'" style="color: red;font-size: 16px;font-weight: bold;">
{{
scope.row.value }}
{{ scope.row.unit }}</span>
<span v-else> {{ scope.row.value }} {{ scope.row.unit }}</span>
</span>
<span v-else>
<span v-if="scope.row.conf != null && scope.row.conf != ''">{{ scope.row.conf
}}</span>
<span v-else>--</span>
</span>
</template>
</el-table-column>
<el-table-column prop="analysisResult" label="巡视结论" align="center" width="80px">
<template #default="scope">
<span v-if="scope.row.analysisResult == '正常'" style="color: rgb(0, 249, 162)">正常</span>
<span v-if="scope.row.analysisResult == '异常'"
style="color: rgb(255, 51, 0);color: red;font-size: 16px;font-weight: bold;">异常</span>
<span v-if="scope.row.analysisResult == '设备检修'" style="color: rgb(0, 153, 255)">设备检修</span>
<span v-if="scope.row.analysisResult == '失败'" style="color: rgb(255, 189, 0)">失败</span>
<span v-if="scope.row.analysisResult == '成功'" style="color: rgb(0, 249, 162)">成功</span>
<span v-if="scope.row.analysisResult == '' || scope.row.analysisResult == null">--</span>
</template>
</el-table-column>
<el-table-column prop="reviseValue" label="修正值" align="center">
<template #default="scope">
<span v-if="scope.row.reviseValid == null">--</span>
<span v-else> {{ scope.row.reviseValue }} {{ scope.row.unit }}</span>
</template>
</el-table-column>
<el-table-column prop="reviseValid" label="修正结论" align="center">
<template #default="scope">
<span v-if="scope.row.reviseValid == 0">正常</span>
<span v-if="scope.row.reviseValid == 1">异常</span>
<span v-if="scope.row.reviseValid == null">--</span>
</template>
</el-table-column>
</el-table>
<Page :total="histotal" v-model:size="historParams.size" v-model:current="historParams.current"
@pagination="historicalRecords(deviceIdone)">
</Page>
</template>
</Eldialog>
<div id="contextimg">
<img src="@/assets/3d/luminescence.svg" alt="">
</div>
@ -310,6 +458,9 @@
v-if="isVideo && dataSel.userData != undefined && dataSel.userData.objinfo != undefined && dataSel.userData.objinfo.channelList != undefined && dataSel.userData.objinfo.channelList.length == 2 && dataSel.userData.objinfo.online == 1"
@click.stop="realTimeVideo(1, 1)">实时视频-2</li>
</ul>
<ul v-show="selType == '02'">
<li @click.stop="CameraInformation">巡视点位信息</li>
</ul>
<ul v-show="selType == '04'">
<li @click.stop="CameraInformation">无人车信息</li>
<li
@ -343,24 +494,24 @@ import { getDeviceByType } from "@/api/device";
import JessibucaPlayer from '@/components/jessibuca/index1.vue' //
import { useUserStore } from '@/store/modules/user'
import axios from 'axios'
import { getSubstationById } from '@/api/substation'
import { getSubstationById, getHistoryDevice } from '@/api/substation'
import { setAlarmLogStatus } from "@/api/alarmInfo";//
import { getNotCheckAlarmCount } from '@/api/home';
import { onMounted, ref, reactive, onBeforeUnmount, nextTick, watch } from 'vue'
import * as THREE from 'THREE'
import * as THREE from 'three'
import TWEEN from 'tween'
import { OrbitControls } from 'THREE/examples/jsm/controls/OrbitControls' //
import { GLTFLoader } from 'THREE/examples/jsm/loaders/GLTFLoader.js' //
import { DRACOLoader } from 'THREE/examples/jsm/loaders/DRACOLoader.js' //
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls' //
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js' //
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js' //
import { ElMessage } from 'element-plus'
import { EffectComposer } from "THREE/examples/jsm/postprocessing/EffectComposer"
import { RenderPass } from "THREE/examples/jsm/postprocessing/RenderPass"
import { OutlinePass } from "THREE/examples/jsm/postprocessing/OutlinePass"
import { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer"
import { RenderPass } from "three/examples/jsm/postprocessing/RenderPass"
import { OutlinePass } from "three/examples/jsm/postprocessing/OutlinePass"
// Shader
import { GammaCorrectionShader } from 'THREE/examples/jsm/shaders/GammaCorrectionShader'
import { ShaderPass } from "THREE/examples/jsm/postprocessing/ShaderPass"
import { GammaCorrectionShader } from 'three/examples/jsm/shaders/GammaCorrectionShader'
import { ShaderPass } from "three/examples/jsm/postprocessing/ShaderPass"
// SMAA齿
import { SMAAPass } from 'THREE/examples/jsm/postprocessing/SMAAPass'
import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass'
import jt from '@/assets/3d/jt.png'
import gaojing from '@/assets/3d/gaojing.png'
import gaojing1 from '@/assets/3d/gaojing1.png'
@ -369,6 +520,7 @@ import { PathPointList } from '@/utils/PathPointList.js'
import { PathGeometry } from '@/utils/PathGeometry.js'
import position from '../3DModelSet/index.json'
import Eldialog from '@/components/seccmsdialog/eldialog.vue'
import Page from '@/components/Pagination/page.vue'
const userStore = useUserStore()
const taskName = ref()
const tableData = ref([])
@ -1339,6 +1491,15 @@ function initData() {
}
loadModel('UV', dataJson.value.UV, is)
}
if (dataJson.value.DevicePoint != '') {
let is = false
if (selType.value == '02') {
data.value = dataJson.value.DevicePoint
searchdata.value = JSON.parse(JSON.stringify(data.value))
is = true
}
loadModel('DevicePoint', dataJson.value.DevicePoint, is)
}
if (dataJson.value.EquipmentComponentSettings != '') {
if (selType.value == '05') {
data.value = dataJson.value.EquipmentComponentSettings
@ -2012,6 +2173,18 @@ function selTypeChange(str) {
})
}
}
} else if (str == '02') {
if (dataJson.value.DevicePoint) data.value = dataJson.value.DevicePoint
searchdata.value = JSON.parse(JSON.stringify(data.value))
for (let i = 0; i < scene.children.length; i++) {
if (scene.children[i].userData.type == 'DevicePoint') {
scene.children[i].traverse(function (obj) {
if (obj.type === 'Mesh') {
obj.material.visible = true
}
})
}
}
} else if (str == '04') {
if (dataJson.value.UV) data.value = dataJson.value.UV
searchdata.value = JSON.parse(JSON.stringify(data.value))
@ -2227,20 +2400,39 @@ const channelId = ref('')
const videofmp4 = ref('')
//
function getVideoUrl(row, index) {
if (index == 'camera') {
deviceId.value = row.patroldevice_code
channelId.value = row.patroldevice_channelcode
} else {
deviceId.value = row.channelList[index].deviceid
channelId.value = row.channelList[index].channelid
if (row.channelList[index].deviceid == undefined) {
deviceId.value = row.channelList[index].deviceId
channelId.value = row.channelList[index].channelId
}
}
axios.get(userStore.webApiMonitorUrl + '/api/play/start/' + deviceId.value + '/' + channelId.value, {}).then((res) => {
if (res.data.data != undefined) {
videoUrl.value = res.data.data.ws_flv
videofmp4.value = res.data.data.fmp4
if (index == 'camera') {
presetPosition(130,row.patroldevice_pos)
}
}
}).catch(function (error) {
})
}
function presetPosition(cmdCode,presetPos) { // ---
axios.get(userStore.webApiBaseUrl + '/basedata/substation-patroldevice/isWorkingOfPatrolDevice?stationcode=' + userStore.stationCode + "&devicecode=" + deviceId.value, {}).then((resize) => {
if (res.data.data == "0") {
console.log("预置位")
axios.post(userStore.webApiMonitorUrl + '/api/ptz/front_end_command/' + deviceId.value + '/' + channelId.value + '?cmdCode=' + cmdCode + '&parameter1=0&parameter2=' + presetPos + '&combindCode2=0', {}).then((res) => { })
}
})
}
//--
const videoChannelList = ref([])
function realTimeVideo(row, index) {
@ -2277,6 +2469,12 @@ function realTimeVideo(row, index) {
}
// }
}
function getDeviceVideo(row) {
let camera = JSON.parse(row.objinfo.patroldeviceJson)
console.log(camera)
getVideoUrl(camera[0], 'camera')
videoShow.value = true
}
//-
function informationClick(row) {
information.value = true
@ -2290,6 +2488,79 @@ function informationClick(row) {
})
clearDiv()
}
//
const history = ref(false)
const histotal = ref(0)
const historParams = ref({
size: 10,
current: 1,
deviceId: '',
startDate: '',
endDate: ''
})
const historydata = ref([])
const hisloading = ref(false)
const timeSlot = ref([])
const deviceIdone = ref('')
function historicalRecords(row) {
console.log(row)
getType()
deviceIdone.value = row
historParams.value.deviceId = row.objinfo.deviceId
console.log(timeSlot.value)
if (timeSlot.value.length > 0) {
historParams.value.startDate = timeSlot.value[0]
historParams.value.endDate = timeSlot.value[1]
} else {
historParams.value.startDate = ''
historParams.value.endDate = ''
}
hisloading.value = true
history.value = true
getHistoryDevice(historParams.value).then(res => {
if (res.code == 0) {
historydata.value = res.data.records
historParams.value.size = res.data.records
historParams.value.current = res.data.current
histotal.value = res.data.total
hisloading.value = false
// history.value = false
}
})
}
function hisreset() {
timeSlot.value.length = 0
historicalRecords(deviceIdone.value)
}
const tableRowClassName = ({
row,
rowIndex,
}) => {
if (rowIndex % 2 === 0) {
return 'warning-row'
} else if (rowIndex % 2 === 1) {
return 'success-row'
}
return ''
}
function currency(list, itemcode) {
let dictname = ''
list.forEach((element) => {
if (element.itemcode == itemcode) {
dictname = element.dictname
}
})
return dictname
}
const MeterTypeList = ref([])
function getType() {
const paramstypes = {
dictcode: 'MeterType'
}
getDeviceByType(paramstypes).then((res) => {
MeterTypeList.value = res.data
})
}
//
function animateCamera(current1, target1, current2, target2) {
// current1
@ -2717,9 +2988,9 @@ function nextPage() {
}
.context-operate-hov {
color: #009bff !important;
box-shadow: 0 0 4px #009bff;
border: 1px solid #009bff !important;
color: #00ffff !important;
box-shadow: 0 0 4px #00ffff;
border: 1px solid #00ffff !important;
}
#context-operate {