天气,告警状态改变

This commit is contained in:
wangxk 2025-05-12 09:07:46 +08:00
parent b961a45d4c
commit 2511b18167
41 changed files with 2382 additions and 611 deletions

View File

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.7 KiB

After

Width:  |  Height:  |  Size: 5.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -2,5 +2,6 @@ window.webConfig = {
"webApiBaseUrl": "http://192.168.1.20:8090/", "webApiBaseUrl": "http://192.168.1.20:8090/",
"wsApiBaseUrl": "ws://192.168.1.20:8090/", "wsApiBaseUrl": "ws://192.168.1.20:8090/",
"webApiMonitorUrl": "http://192.168.1.20:18080", "webApiMonitorUrl": "http://192.168.1.20:18080",
"answeringUrl":"http://121.37.111.42:8083/ui/chat/431e83302d0bbfbe",
"webSystemTitle":"标题" "webSystemTitle":"标题"
} }

View File

@ -19,6 +19,14 @@ export function getAlarmLogPage(params:any){
data:params data:params
}); });
} }
//辅控告警信息核查
export function setAlarmRecordStatus(params:any){
return request({
url: '/auxcontrol/device-alarm-record/setAlarmRecordStatus' ,
method: 'post',
data:params
});
}
//告警信息批量核查 //告警信息批量核查
export function setBatchAlarmLogStatus(params:any){ export function setBatchAlarmLogStatus(params:any){

View File

@ -15,10 +15,19 @@ export function getSubstation (){
}); });
} }
//批量修改警告阈值 //批量修改警告阈值
export function updateAlarm(params:any){ export function setAlgorithmModel(params:any){
return request({ return request({
url: 'basedata/substation-device/updateAlarmThreshold' , url: '/basedata/alarm-threshold/setAlgorithmModel' ,
method: 'post', method: 'post',
data:params data:params
}); });
} }
//批量修改警告阈值
export function getAlgorithmModelById(params:any){
return request({
url: '/basedata/alarm-threshold/getAlgorithmModelById' ,
method: 'get',
params:params
});
}

View File

@ -129,6 +129,13 @@ export function getDeviceByType(params: any) {
params: params params: params
}); });
} }
export function getDictionaryItems(params: any) {
return request({
url: '/system/dictionaryItems/getDictionaryItems',
method: 'get',
params: params
});
}
//根据条件获取部件(分页) //根据条件获取部件(分页)
export function getComponentByBayPage(params: any) { export function getComponentByBayPage(params: any) {
return request({ return request({

View File

@ -7,6 +7,13 @@ export function getWeatherLogPage(params:any){
params:params params:params
}); });
} }
export function getdeviceworkdata(params:any){
return request({
url: '/auxcontrol/device-work-data/page' ,
method: 'get',
params:params
});
}
//分页查看主辅设备监控数据 //分页查看主辅设备监控数据
export function getMainassistDeviceLogPage(params:any){ export function getMainassistDeviceLogPage(params:any){
return request({ return request({

View File

@ -24,6 +24,13 @@ export function getWeatherLogList(params:any){
params:params params:params
}); });
} }
export function getDeviceWorkData(params:any){
return request({
url: '/auxcontrol/device-work-data/getDeviceWorkData' ,
method: 'get',
params:params
});
}
// 查询报警信息 // 查询报警信息
export function getAlarmLogList(params:any){ export function getAlarmLogList(params:any){

View File

@ -74,7 +74,7 @@ export function getTreelist(params: any) {
//获取变电站信息 //获取变电站信息
export function getTreeList(params:any){ export function getTreeList(params:any){
return request({ return request({
url: '/basedata/substation/getSubstationAreaNaviTree' , url: '/basedata/substation/getSubstationAreaTree' ,
method: 'get', method: 'get',
params:params params:params
}); });

View File

@ -10,7 +10,7 @@ export function getdata(params: any) {
//根据任务执行情况ID查询点位查询 //根据任务执行情况ID查询点位查询
export function getTableData(params: any) { export function getTableData(params: any) {
return request({ return request({
url: '/patroltasks/task-todo/getTaskDevicePage', url: '/patroltasks/task-todo/getTaskDeviceList',
method: 'get', method: 'get',
params: params params: params
}); });

View File

@ -81,7 +81,7 @@ export function setExaminePlanStatus(params:any){
//获取区域下所有间隔 //获取区域下所有间隔
export function getSubstationBayByArea(params: any) { export function getSubstationBayByArea(params: any) {
return request({ return request({
url: '/basedata/substation/getSubstationBay', url: '/basedata/substation/getSubstationBayByArea',
method: 'get', method: 'get',
params: params params: params
}); });

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

View File

@ -1,6 +1,6 @@
<template> <template>
<div class="audio-spectrum"> <div class="audio-spectrum">
<el-scrollbar height="700px"> <el-scrollbar height="680px">
<!-- 分贝图表容器 --> <!-- 分贝图表容器 -->
<div ref="dbChartContainer" class="spectrum-chart-db"></div> <div ref="dbChartContainer" class="spectrum-chart-db"></div>
<!-- 频率图表容器 --> <!-- 频率图表容器 -->
@ -452,7 +452,7 @@ watch(() => props.fileUrl, async () => {
.spectrum-chart, .spectrum-chart,
.spectrum-chart-db { .spectrum-chart-db {
width: 100%; width: 100%;
height: 500px; height: 320px;
background: rgba(255, 255, 255, 0.144); background: rgba(255, 255, 255, 0.144);
border-radius: 8px; border-radius: 8px;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);

View File

@ -41,6 +41,7 @@ export const useUserStore = defineStore('user', () => {
const webApiMonitorUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_URL:window.webConfig.webApiMonitorUrl const webApiMonitorUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_URL:window.webConfig.webApiMonitorUrl
const webApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_API:window.webConfig.webApiBaseUrl const webApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_API:window.webConfig.webApiBaseUrl
const wsApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_WS:window.webConfig.wsApiBaseUrl const wsApiBaseUrl:any = process.env.NODE_ENV=='development'? import.meta.env.VITE_APP_BASE_WS:window.webConfig.wsApiBaseUrl
const answeringUrl:any = window.webConfig.answeringUrl
const promptTitle:any = ref('') const promptTitle:any = ref('')
// actions // actions
@ -250,6 +251,7 @@ export const useUserStore = defineStore('user', () => {
webApiMonitorUrl, webApiMonitorUrl,
webApiBaseUrl, webApiBaseUrl,
wsApiBaseUrl, wsApiBaseUrl,
answeringUrl
}; };
}); });

View File

@ -3,23 +3,19 @@ export default {
name: "alarminterval", name: "alarminterval",
}; };
</script> </script>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, nextTick } from "vue"; import { ref, onMounted } from "vue";
import { getAlarm, getSubstation, updateAlarm } from "@/api/alarminterval"; import { getAlarm, getSubstation, setAlgorithmModel, getAlgorithmModelById } from "@/api/alarminterval";
import { getDeviceByType, getaccType, getMainEquipment } from "@/api/device"; import { getDeviceByType, getaccType, getMainEquipment } from "@/api/device";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import Page from '@/components/Pagination/page.vue'
import Eldialog from '@/components/seccmsdialog/eldialog.vue'; import Eldialog from '@/components/seccmsdialog/eldialog.vue';
import Page from '@/components/Pagination/page.vue'
// //
const tableData: any = ref() const tableData: any = ref()
const loading = ref(false) const loading = ref(false)
const deviceName = ref() const deviceName = ref()
const params = ref({ const params = ref({
size: 20, size: 10,
current: 1, current: 1,
stationId: '', stationId: '',
areaId: '', areaId: '',
@ -45,7 +41,7 @@ function getData() {
}) })
} }
// //
const treeAll = ref() const treeAll = ref([])
function notification() { function notification() {
getSubstation().then((res: any) => { getSubstation().then((res: any) => {
treeAll.value = res.data treeAll.value = res.data
@ -103,6 +99,7 @@ function getCompont() {
//&& //&&
const recognitionTypeList: any = ref([]) const recognitionTypeList: any = ref([])
const meterType: any = ref([]) const meterType: any = ref([])
const EquipmentType: any = ref([])
function getType() { function getType() {
const paramsall = { const paramsall = {
dictcode: 'recognition_type' dictcode: 'recognition_type'
@ -116,6 +113,9 @@ function getType() {
getDeviceByType(paramsid).then((res: any) => { getDeviceByType(paramsid).then((res: any) => {
meterType.value = res.data meterType.value = res.data
}) })
getDeviceByType({ dictcode: 'EquipmentType' }).then((res: any) => {
EquipmentType.value = res.data
})
} }
// //
function resetting() { function resetting() {
@ -143,19 +143,22 @@ function handleSelectionChange(val: any) {
const dialogVisible = ref(false) const dialogVisible = ref(false)
// //
const info: any = ref({ const info: any = ref({
earlyMin: '', commonLower: '',
earlyMax: '', commonUpper: '',
sameMin: '', seriousLower: '',
sameMax: '', seriousUpper: '',
seriousMin: '', dangerLower: '',
seriousMax: '', dangerUpper: '',
criticalMin: '', alarmClass: '1',
criticalMax: '' isLastContrast: '1',
baseValue: '',
isenable: '1',
alarmType: '',
}) })
function isAllEqual(array: any) { function isAllEqual(array: any) {
let is = true let is = true
for (let i = 0; i < array.length; i++) { for (let i = 0; i < array.length; i++) {
if (array.every((item: any) => item.unit === array[i].unit) === false) { if (array.every((item: any) => item.recognitionTypeList === array[i].recognitionTypeList) === false) {
is = false is = false
break break
} }
@ -163,22 +166,33 @@ function isAllEqual(array: any) {
} }
return is return is
} }
const alarmTypeList: any = ref([])
function setClick() { function setClick() {
if (deviceInfos.value.length == 1) { if (deviceInfos.value.length == 1) {
info.value = JSON.parse(JSON.stringify(deviceInfos.value[0])) getAlgorithmModelById({ id: deviceInfos.value[0].deviceId }).then((res: any) => {
if (info.value.earlyMin == undefined || info.value.earlyMax == undefined || info.value.sameMin == undefined || info.value.sameMax == undefined || info.value.seriousMin == undefined || info.value.seriousMax == undefined || info.value.criticalMin == undefined || info.value.criticalMax == undefined) { if (res.data) {
info.value = { info.value = res.data
earlyMin: '',
earlyMax: '', } else {
sameMin: '', info.value = {
sameMax: '', commonLower: '',
seriousMin: '', commonUpper: '',
seriousMax: '', seriousLower: '',
criticalMin: '', seriousUpper: '',
criticalMax: '', dangerLower: '',
unit: deviceInfos.value[0].unit dangerUpper: '',
alarmClass: '1',
isLastContrast: '1',
baseValue: '',
isenable: '1',
alarmType: '',
unit: deviceInfos.value[0].unit
}
} }
}
})
} else { } else {
if (isAllEqual(deviceInfos.value) == false) { if (isAllEqual(deviceInfos.value) == false) {
ElMessage({ ElMessage({
@ -188,78 +202,256 @@ function setClick() {
return return
} }
info.value = { info.value = {
earlyMin: '', commonLower: '',
earlyMax: '', commonUpper: '',
sameMin: '', seriousLower: '',
sameMax: '', seriousUpper: '',
seriousMin: '', dangerLower: '',
seriousMax: '', dangerUpper: '',
criticalMin: '', unit: '',
criticalMax: '', alarmClass: '1',
unit: '' isLastContrast: '1',
baseValue: '',
isenable: '1',
alarmType: '',
} }
} }
const paramsall = {
dictcode: 'AlarmType'
}
getDeviceByType(paramsall).then((res: any) => {
alarmTypeList.value = res.data
})
dialogVisible.value = true dialogVisible.value = true
} }
// //
function confirmClick() { function confirmClick() {
if (info.value.earlyMin === 0) {
info.value.earlyMin = '0' if (((info.value.commonLower && info.value.commonUpper == '') || (info.value.commonUpper && info.value.commonLower == ''))) {
}
if (info.value.earlyMin == '' || info.value.earlyMax == '' || info.value.sameMin == '' || info.value.sameMax == '' || info.value.seriousMin == '' || info.value.seriousMax == ''
|| info.value.criticalMin == '' || info.value.criticalMax == '') {
ElMessage({ ElMessage({
type: "warning", type: "warning",
message: "区间数值不能为空", message: "一般阈值下限和上限不能有一方为空!",
}); });
return
}
if (((info.value.seriousLower && info.value.seriousUpper == '') || (info.value.seriousUpper && info.value.seriousLower == ''))) {
ElMessage({
type: "warning",
message: "严重阈值下限和上限不能有一方为空!",
});
return
}
if (((info.value.dangerLower && info.value.dangerUpper == '') || (info.value.dangerUpper && info.value.dangerLower == ''))) {
ElMessage({
type: "warning",
message: "危急阈值下限和上限不能有一方为空!",
});
return
}
if (info.value.commonLower) {
if (Number(info.value.commonLower) > Number(info.value.commonUpper)) {
ElMessage({
type: "warning",
message: "一般阈值下限不能大于上限!",
});
return
}
}
if (info.value.seriousLower) {
if (Number(info.value.seriousLower) > Number(info.value.seriousUpper)) {
ElMessage({
type: "warning",
message: "严重阈值下限不能大于上限!",
});
return
}
}
if (info.value.dangerLower) {
if (Number(info.value.dangerLower) > Number(info.value.dangerUpper)) {
ElMessage({
type: "warning",
message: "危急阈值下限不能大于上限!",
});
return
}
}
if (info.value.seriousLower && info.value.dangerLower) {
if (isRangeNotInOtherRange([Number(info.value.seriousLower), Number(info.value.seriousUpper)], [Number(info.value.dangerLower), Number(info.value.dangerUpper)]) == false) {
ElMessage({
type: "warning",
message: "阈值不能有交叉!",
});
return
}
}
if (info.value.commonLower && info.value.dangerLower) {
if (isRangeNotInOtherRange([Number(info.value.commonLower), Number(info.value.commonUpper)], [Number(info.value.dangerLower), Number(info.value.dangerUpper)]) == false) {
ElMessage({
type: "warning",
message: "阈值不能有交叉!",
});
return
}
}
if (info.value.commonLower && info.value.seriousLower) {
if (isRangeNotInOtherRange([Number(info.value.commonLower), Number(info.value.commonUpper)], [Number(info.value.seriousLower), Number(info.value.seriousUpper)]) == false) {
ElMessage({
type: "warning",
message: "阈值不能有交叉!",
});
return
}
} }
else if (isNaN(Number(info.value.earlyMin)) || isNaN(Number(info.value.earlyMax)) || isNaN(Number(info.value.sameMin)) || const infoAll: any = ref({})
isNaN(Number(info.value.sameMax)) || isNaN(Number(info.value.seriousMin)) || isNaN(Number(info.value.seriousMax)) || const infoAllList: any = ref([])
isNaN(Number(info.value.criticalMin)) || isNaN(Number(info.value.criticalMax))) { infoAll.value = JSON.parse(JSON.stringify(info.value))
ElMessage({ if (infoAll.value.commonLower) infoAll.value.commonLower = Number(infoAll.value.commonLower).toFixed(2);
type: "warning", if (infoAll.value.commonUpper) infoAll.value.commonUpper = Number(infoAll.value.commonUpper).toFixed(2);
message: "只能输入数字和浮点数", if (infoAll.value.seriousLower) infoAll.value.seriousLower = Number(infoAll.value.seriousLower).toFixed(2);
}); if (infoAll.value.seriousUpper) infoAll.value.seriousUpper = Number(infoAll.value.seriousUpper).toFixed(2);
} if (infoAll.value.dangerLower) infoAll.value.dangerLower = Number(infoAll.value.dangerLower).toFixed(2);
else if (Number(info.value.sameMin) < Number(info.value.earlyMax) || Number(info.value.seriousMin) < Number(info.value.sameMax) || Number(info.value.criticalMin) < Number(info.value.seriousMax)) { if (infoAll.value.dangerUpper) infoAll.value.dangerUpper = Number(infoAll.value.dangerUpper).toFixed(2);
ElMessage({
type: "warning", deviceInfos.value.forEach((element: any) => {
message: "不得小于上一项的最大值", const infoAllOne:any = ref({})
}); infoAllOne.value = JSON.parse(JSON.stringify(infoAll.value))
} else if (Number(info.value.earlyMax) > Number(info.value.earlyMin) && Number(info.value.sameMax) > Number(info.value.sameMin) && Number(info.value.seriousMax) > Number(info.value.seriousMin) && Number(info.value.criticalMax) > Number(info.value.criticalMin)) { infoAllOne.value['stationName'] = element.stationName
const infoAll: any = ref({}) infoAllOne.value['deviceName'] = element.deviceName
infoAll.value = JSON.parse(JSON.stringify(info.value)) infoAllOne.value['stationCode'] = element.stationCode
infoAll.value.earlyMin = Number(infoAll.value.earlyMin).toFixed(2); infoAllOne.value.deviceId = element.deviceId
infoAll.value.earlyMax = Number(infoAll.value.earlyMax).toFixed(2); infoAllOne.value.alarmThresholdId = element.stationId + element.deviceId + JSON.parse(element.pictureAnalysisTypeList).PictureDefectAnalysisType + infoAll.value.alarmType
infoAll.value.sameMin = Number(infoAll.value.sameMin).toFixed(2); if (JSON.parse(element.pictureAnalysisTypeList).PictureDefectAnalysisType) {
infoAll.value.sameMax = Number(infoAll.value.sameMax).toFixed(2); infoAllOne.value['defectType'] = JSON.parse(element.pictureAnalysisTypeList).PictureDefectAnalysisType
infoAll.value.seriousMin = Number(infoAll.value.seriousMin).toFixed(2); }
infoAll.value.seriousMax = Number(infoAll.value.seriousMax).toFixed(2);
infoAll.value.criticalMin = Number(infoAll.value.criticalMin).toFixed(2); infoAllList.value.push(infoAllOne.value)
infoAll.value.criticalMax = Number(infoAll.value.criticalMax).toFixed(2);
const deviceId: any = ref([]) });
deviceInfos.value.forEach((element: any) => { const infoList: any = ref([])
deviceId.value.push(element.deviceId) const newinfo: any = ref({
}); deviceId: '',
infoAll.value['deviceId'] = deviceId.value.toString() deviceName: '',
updateAlarm(infoAll.value).then((res: any) => { defectType: '',
if (res.code != 1) { stationCode: '',
ElMessage({ stationName: '',
type: "success", decideRule: '',
message: "修改成功", decisionValueClass: '',
}); alarmDesc: '',
dialogVisible.value = false alarmType: '',
getData() baseValue: '',
alarmLevel: '',
alarmClass: '',
isenable: '',
})
infoAllList.value.forEach((element: any) => {
newinfo.value.alarmClass = element.alarmClass
newinfo.value.isenable = element.isenable
newinfo.value.defectType = element.defectType
newinfo.value.stationCode = element.stationCode
newinfo.value.stationName = element.stationName
newinfo.value.alarmType = element.alarmType
newinfo.value.isLastContrast = element.isLastContrast
newinfo.value.baseValue = element.baseValue
if (element.alarmClass == 2) {
const inallList = JSON.parse(JSON.stringify(newinfo.value))
inallList.deviceId = element.deviceId
inallList.deviceName = element.deviceName
infoList.value.push(inallList)
} else {
if (element.commonLower) {
const inallList = JSON.parse(JSON.stringify(newinfo.value))
inallList.deviceId = element.deviceId
inallList.deviceName = element.deviceName
inallList.decideRule = '6'//
inallList.decisionValueClass = '1'
inallList.alarmDesc = ''//
inallList.baseLineValue = element.commonLower
inallList.alarmLevel = '2'
infoList.value.push(inallList)
} }
}) if (element.commonUpper) {
} else { const inallList = JSON.parse(JSON.stringify(newinfo.value))
ElMessage({ inallList.deviceId = element.deviceId
type: "warning", inallList.deviceName = element.deviceName
message: "区间最大值不能小于等于最小值", inallList.decideRule = '7'//
}); inallList.decisionValueClass = '1'
} inallList.alarmDesc = ''//
inallList.baseLineValue = element.commonUpper
inallList.alarmLevel = '2'
infoList.value.push(inallList)
}
if (element.seriousLower) {
const inallList = JSON.parse(JSON.stringify(newinfo.value))
inallList.deviceId = element.deviceId
inallList.deviceName = element.deviceName
inallList.decideRule = '6'//
inallList.decisionValueClass = '1'
inallList.alarmDesc = ''//
inallList.baseLineValue = element.seriousLower
inallList.alarmLevel = '3'
infoList.value.push(inallList)
}
if (element.seriousUpper) {
const inallList = JSON.parse(JSON.stringify(newinfo.value))
inallList.deviceId = element.deviceId
inallList.deviceName = element.deviceName
inallList.decideRule = '7'//
inallList.decisionValueClass = '1'
inallList.alarmDesc = ''//
inallList.baseLineValue = element.seriousUpper
inallList.alarmLevel = '3'
infoList.value.push(inallList)
}
if (element.dangerLower) {
const inallList = JSON.parse(JSON.stringify(newinfo.value))
inallList.deviceId = element.deviceId
inallList.deviceName = element.deviceName
inallList.decideRule = '6'//
inallList.decisionValueClass = '1'
inallList.alarmDesc = ''//
inallList.baseLineValue = element.dangerLower
inallList.alarmLevel = '4'
infoList.value.push(inallList)
}
if (element.dangerUpper) {
const inallList = JSON.parse(JSON.stringify(newinfo.value))
inallList.deviceId = element.deviceId
inallList.deviceName = element.deviceName
inallList.decideRule = '7'//
inallList.decisionValueClass = '1'
inallList.alarmDesc = ''//
inallList.baseLineValue = element.dangerUpper
inallList.alarmLevel = '4'
infoList.value.push(inallList)
}
}
})
setAlgorithmModel(JSON.stringify(infoList.value)).then((res: any) => {
if (res.code != 1) {
ElMessage({
type: "success",
message: "修改成功",
});
dialogVisible.value = false
getData()
}
})
} }
// 1-23-9
function isRangeNotInOtherRange([start1, end1]: any, [start2, end2]: any) {
//
// 12
// 1212
return end1 <= start2 || start1 >= end2;
}
// 1-23-99-12
// //
function handleClose() { function handleClose() {
dialogVisible.value = false dialogVisible.value = false
@ -270,6 +462,7 @@ function handleClose() {
// //
onMounted(() => { onMounted(() => {
getData() getData()
getType()
}); });
// //
@ -288,19 +481,24 @@ const tableRowClassName = ({
return '' return ''
} }
function currency(list: any, itemcode: any) {
let dictname = ''
list.forEach((element: any) => {
if (element.itemcode == itemcode) {
dictname = element.dictname
}
})
return dictname
}
function radiochange(row: any) {
if(row == 1){
info.value.baseValue = ''
}
}
</script> </script>
<template> <template>
<div style="height: 10px;padding:0px 15px;"></div>
<div class="faulttemplate-box"> <div class="faulttemplate-box">
<!-- 设置阈值弹窗 -->
<!-- <div class="custom2" v-if="dialogVisible == true">
<div class="custom2-back" v-drag>
<div class="custom2-close" @click="handleClose">x</div>
<div class="custom2-title">设置阈值</div>
</div>
</div> -->
<section class="silderRight"> <section class="silderRight">
<div <div
style="display: flex;display: -webkit-flex; justify-content: space-between; -webkit-justify-content: space-between; margin:15px 0px"> style="display: flex;display: -webkit-flex; justify-content: space-between; -webkit-justify-content: space-between; margin:15px 0px">
@ -315,14 +513,16 @@ const tableRowClassName = ({
</el-select> </el-select>
<el-select :disabled="params.stationId == ''" clearable v-model="params.areaId" placeholder="所属区域" <el-select :disabled="params.stationId == ''" clearable v-model="params.areaId" placeholder="所属区域"
style="margin-right:5px ;width: 25%;" @visible-change="getStation" @change="getData()"> style="margin-right:5px ;width: 25%;" @visible-change="getStation" @change="getData()">
<el-option v-for="item in areaAll" :key="item.areaId" :label="item.areaName" :value="item.areaId" /> <el-option v-for="item in areaAll" :key="item.areaId" :label="item.areaName"
:value="item.areaId" />
</el-select> </el-select>
<el-select :disabled="params.areaId == ''" clearable v-model="params.bayId" placeholder="所属间隔" <el-select :disabled="params.areaId == ''" clearable v-model="params.bayId" placeholder="所属间隔"
style="margin-right:5px ;width: 25%;" @visible-change="getStation" @change="getData()"> style="margin-right:5px ;width: 25%;" @visible-change="getStation" @change="getData()">
<el-option v-for="item in bayAll" :key="item.bayId" :label="item.bayName" :value="item.bayId" /> <el-option v-for="item in bayAll" :key="item.bayId" :label="item.bayName" :value="item.bayId" />
</el-select> </el-select>
<el-select :disabled="params.bayId == ''" clearable v-model="params.mainDeviceId" placeholder="所属主设备" <el-select :disabled="params.bayId == ''" clearable v-model="params.mainDeviceId"
style="margin-right:5px ;width: 25%;" @visible-change="gatMain" @change="getData()"> placeholder="所属主设备" style="margin-right:5px ;width: 25%;" @visible-change="gatMain"
@change="getData()">
<el-option v-for="item in Masterdata" :key="item.mainDeviceId" :label="item.mainDeviceName" <el-option v-for="item in Masterdata" :key="item.mainDeviceId" :label="item.mainDeviceName"
:value="item.mainDeviceId" /> :value="item.mainDeviceId" />
</el-select> </el-select>
@ -342,204 +542,159 @@ const tableRowClassName = ({
<el-option v-for="item in meterType" :key="item.itemcode" :label="item.dictname" <el-option v-for="item in meterType" :key="item.itemcode" :label="item.dictname"
:value="item.itemcode" /> :value="item.itemcode" />
</el-select> </el-select>
<el-button class="searchButton" type="primary" @click="getData()">搜索</el-button> <el-button type="primary" @click="getData()">搜索</el-button>
<el-button class="searchButton" @click="resetting()">重置</el-button> <el-button @click="resetting()">重置</el-button>
</div> </div>
<div> <div>
<el-button class="searchButton" @click="setClick" :disabled="deviceInfos.length == 0" <el-button @click="setClick" :disabled="deviceInfos.length == 0" v-hasPerm="['update:alarminterval']"
:type="deviceInfos.length > 0 ? 'primary' : ''"> :type="deviceInfos.length > 0 ? 'primary' : ''">
<img v-show="deviceInfos.length != 0" src="@/assets/MenuIcon/yvzhi1.png"
style="margin-right:5px;" alt="">
<img v-show="deviceInfos.length == 0" src="@/assets/MenuIcon/yvzhi2.png"
style="margin-right:5px;" alt="">
设置阈值</el-button> 设置阈值</el-button>
</div> </div>
</div> </div>
<div class="draggable"> <div class="draggable">
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(75vh);
overflow: auto;margin-bottom: 15px;" row-key="deviceId" @selection-change="handleSelectionChange"
default-expand-all :row-class-name="tableRowClassName"
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(100vh - 255px);
overflow: auto;margin-bottom: 15px;" row-key="deviceId" border
@selection-change="handleSelectionChange" default-expand-all :row-class-name="tableRowClassName"
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px'}"> :header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px'}">
<el-table-column type="selection" width="30" align="center" /> <el-table-column type="selection" width="50" align="center" />
<el-table-column type="index" label="序号" width="50px" align="center" /> <el-table-column type="index" label="序号" width="80px" align="center" />
<el-table-column label="巡视点位名称" prop="deviceName" width="140" show-overflow-tooltip></el-table-column> <el-table-column label="巡视点位名称" prop="deviceName" width="140"
<el-table-column label="所属变电站" prop="stationName" width="140" show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column label="所属变电站" prop="stationName" width="140"
show-overflow-tooltip></el-table-column>
<el-table-column label="所属区域" prop="areaName" width="100" show-overflow-tooltip></el-table-column> <el-table-column label="所属区域" prop="areaName" width="100" show-overflow-tooltip></el-table-column>
<el-table-column label="所属间隔" prop="bayName" width="110" show-overflow-tooltip></el-table-column> <el-table-column label="所属间隔" prop="bayName" width="110" show-overflow-tooltip></el-table-column>
<el-table-column label="所属主机设备" prop="mainDeviceName" width="140" <el-table-column label="所属主机设备" prop="mainDeviceName" width="140"
show-overflow-tooltip></el-table-column> show-overflow-tooltip></el-table-column>
<el-table-column label="主设备类型" prop="mainDeviceType" width="120" <el-table-column label="主设备类型" prop="deviceType" width="120" show-overflow-tooltip>
show-overflow-tooltip></el-table-column> <template #default="scope">
<span>{{ currency(EquipmentType, scope.row.deviceType) }}</span>
</template>
</el-table-column>
<el-table-column label="所属部件" prop="componentName" show-overflow-tooltip></el-table-column> <el-table-column label="所属部件" prop="componentName" show-overflow-tooltip></el-table-column>
<el-table-column label="表计类型" prop="meterType" show-overflow-tooltip></el-table-column> <el-table-column label="表计类型" prop="meterType" show-overflow-tooltip>
<el-table-column label="识别类型" prop="recognitionTypeNameList" show-overflow-tooltip></el-table-column>
<el-table-column label="预警区间" width="110px">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.sameMin != undefined">{{ scope.row.earlyMin + '~' + <span>{{ currency(meterType, scope.row.meterType) }}</span>
scope.row.earlyMax }}</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column label="一般区间" width="110px">
<template #default="scope">
<span v-if="scope.row.sameMin != undefined">{{ scope.row.sameMin + '~' +
scope.row.sameMax }}</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column label="严重区间" width="110px">
<template #default="scope">
<span v-if="scope.row.seriousMin != undefined">{{ scope.row.seriousMin + '~' +
scope.row.seriousMax }}</span>
<span v-else>--</span>
</template>
</el-table-column>
<el-table-column label="危急区间" width="110px">
<template #default="scope">
<span v-if="scope.row.criticalMin != undefined">{{ scope.row.criticalMin + '~' +
scope.row.criticalMax }}</span>
<span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="识别类型" prop="recognitionTypeNameList"
show-overflow-tooltip></el-table-column>
<el-table-column label="单位" prop="unit" show-overflow-tooltip></el-table-column> <el-table-column label="单位" prop="unit" show-overflow-tooltip></el-table-column>
</el-table> </el-table>
<Page :total="total" v-model:size="params.size" v-model:current="params.current" @pagination="getData()"> <Page :total="total" v-model:size="params.size" v-model:current="params.current"
@pagination="getData()">
</Page> </Page>
</div> </div>
</section> </section>
<Eldialog v-if="dialogVisible" :title="'设置阈值'" :zIndex="2000" :width="'600px'" :height="'600px'" <Eldialog v-if="dialogVisible" :title="'设置阈值'" class="AngleBox" :zIndex="2000" :width="'800px'"
@before-close="handleClose"> @before-close="handleClose">
<template v-slot:PopFrameContent> <template v-slot:PopFrameContent>
<div class="inputDiv" style="margin-top:15px;"> <div style="height:400px;" v-if="info">
<span>预警区间</span> <div>
<el-input class="input" v-model="info.earlyMin" placeholder="预警区间最小值" /> <span>规则类型</span>
<span>~</span> <el-radio-group v-model="info.alarmClass">
<el-input class="input" v-model="info.earlyMax" placeholder="预警区间最大值" /> <el-radio :value="'1'" :label="'1'">阈值类</el-radio>
<span>{{ info.unit }}</span> <el-radio :value="'2'" :label="'2'">状态类</el-radio>
</div> <el-radio :value="'3'" :label="'3'">趋势类</el-radio>
<div class="inputDiv"> </el-radio-group>
<span>一般区间</span>
<el-input class="input" v-model="info.sameMin" placeholder="一般区间最小值" />
<span>~</span> <el-input class="input" v-model="info.sameMax" placeholder="一般区间最大值" />
<span>{{ info.unit }}</span>
</div>
<div class="inputDiv">
<span>严重区间</span>
<el-input class="input" v-model="info.seriousMin" placeholder="严重区间最小值" />
<span>~</span>
<el-input class="input" v-model="info.seriousMax" placeholder="严重区间最大值" />
<span>{{ info.unit }}</span>
</div> </div>
<div class="inputDiv"> <div style="margin-top: 10px;">
<span>危急区间</span> <span>告警类型</span>
<el-input class="input" v-model="info.criticalMin" placeholder="危急区间最小值" /> <el-select clearable v-model="info.alarmType" placeholder="请选择"
<span>~</span> style="margin-right:5px ;width:335px;">
<el-input class="input" v-model="info.criticalMax" placeholder="危急区间最大值" /> <el-option v-for="item in alarmTypeList" :key="item.itemcode" :label="item.dictname"
<span>{{ info.unit }}</span> :value="item.itemcode" />
</el-select>
</div> </div>
<span class="dialog-footer" <div v-if="info.alarmClass == 2 || info.alarmClass == 3">
style="width: 100%;margin: auto; display: flex;display: -webkit-flex; justify-content: center;-webkit-justify-content: center;margin: 10px 0px;"> <span>上次点位比较</span>
<!-- <el-button @click="handleClose"> </el-button> <el-radio-group v-model="info.isLastContrast" @change="radiochange">
<el-button type="primary" @click="confirmClick">保存</el-button> --> <el-radio value="1" :label="'1'" size="large"></el-radio>
<div class="details-button" @click="handleClose">取消</div> <el-radio value="0" :label="'0'" size="large"></el-radio>
<div class="details-button" @click="confirmClick">确定</div> </el-radio-group>
</span> </div>
<div style="margin-top: 10px;" v-if="info.alarmClass == 2 || info.alarmClass == 3">
<span v-if="info.alarmClass == 3">基准值A0</span>
<span v-if="info.alarmClass == 2">基准值</span>
<el-input v-model="info.baseValue" clearable placeholder="请输入基准值A0"
:disabled="info.isLastContrast == '1'" style="margin-right:5px ;width: 335px;" />
<span style="color: red;" v-if="info.alarmClass == 3">偏差率 = (A1-A0)/A0*100%</span>
</div>
<div v-if="info.alarmClass == 1 || info.alarmClass == 3" style="margin-top: 10px;">
<span>阈值范围</span>
<div class="inputDiv">
<span>一般区间</span>
<el-input class="input" v-model="info.commonLower" placeholder="一般区间最小值" />
<span>~</span> <el-input class="input" v-model="info.commonUpper" placeholder="一般区间最大值" />
<span>{{ info.unit }}</span>
</div>
<div class="inputDiv">
<span>严重区间</span>
<el-input class="input" v-model="info.seriousLower" placeholder="严重区间最小值" />
<span>~</span>
<el-input class="input" v-model="info.seriousUpper" placeholder="严重区间最大值" />
<span>{{ info.unit }}</span>
</div>
<div class="inputDiv">
<span>危急区间</span>
<el-input class="input" v-model="info.dangerLower" placeholder="危急区间最小值" />
<span>~</span>
<el-input class="input" v-model="info.dangerUpper" placeholder="危急区间最大值" />
<span>{{ info.unit }}</span>
</div>
</div>
<div>
<span>是否启用</span>
<el-radio-group v-model="info.isenable">
<el-radio value="1" :label="'1'" size="large">启用</el-radio>
<el-radio value="0" :label="'0'" size="large">禁用</el-radio>
</el-radio-group>
</div>
</div>
<span class="dialog-footer"
style="width: 100%;margin: auto; display: flex;display: -webkit-flex; justify-content: flex-end;-webkit-justify-content: flex-end;margin-top: 20px;">
<el-button @click="handleClose"> </el-button>
<el-button type="primary" @click="confirmClick">保存</el-button>
</span>
</template> </template>
</Eldialog> </Eldialog>
<!-- <el-dialog v-model="dialogVisible" :close-on-click-modal="false" :before-close="handleClose" title="设置阈值"
append-to-body width="600px" draggable>
</el-dialog> -->
</div> </div>
</template> </template>
<style scoped lang="scss"> <style scoped lang="scss">
.custom2 {
color: #fff;
.custom2-back {
width: 600px;
max-height: 360px;
background: url(@/assets/newimg/jcpz_xz.png);
background-size: 100% 100%;
position: absolute;
z-index: 2023;
top: 0px;
left: 0px;
bottom: 0px;
right: 0px;
margin: auto;
padding: 70px 20px 0px 0px;
.custom2-title {
position: absolute;
color: #fff;
top: 3px;
left: 265px;
font-size: 16px;
}
.custom2-close {
position: absolute;
color: #fff;
top: 30px;
right: 20px;
font-size: 18px;
cursor: pointer;
}
}
}
.faulttemplate-box {
padding: 5px 15px;
}
.silderRight { .silderRight {
width: 100%; width: 100%;
height: calc(100vh - 160px); height: calc(100vh - 135px);
overflow: auto; overflow: auto;
background-color: #17212e; background-color: rgba(255, 255, 255, 1);
border-radius: 3px; border-radius: 3px;
padding: 0px 15px 15px 15px; padding: 0px 15px 15px 15px;
padding-bottom: 0px; padding-bottom: 0px;
box-sizing: border-box; box-sizing: border-box;
background: url(@/assets/newimg/cjrw_1890.png);
background-size: 100% 100%;
} }
.inputDiv { .inputDiv {
text-align: center; text-align: center;
margin-left: 40px;
.input { .input {
width: 35%; width: 35%;
margin: 10px; margin: 10px;
} }
} }
:deep(.el-table:not(.el-table--border) .el-table__cell) {
border: none;
}
// :deep(.el-tree-node.is-current > .el-tree-node__content) {
// background:none !important;
// background-image: url(@/assets/images/u324.png) !important;
// background-size: 100% 100%;
// color: #009bff !important;
// background-repeat: no-repeat !important;
// }
: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;
}
</style> </style>

View File

@ -8,8 +8,8 @@ export default {
import { ref, onMounted, onBeforeUnmount, } from 'vue' import { ref, onMounted, onBeforeUnmount, } from 'vue'
import Page from '@/components/Pagination/page.vue' import Page from '@/components/Pagination/page.vue'
import { useUserStore } from '@/store/modules/user'; import { useUserStore } from '@/store/modules/user';
import { getWeatherLogList } from "@/api/home"; import { getWeatherLogList,getDeviceWorkData } from "@/api/home";
import { getWeatherLogPage} from "@/api/environmentalMonitoring"; import { getWeatherLogPage,getdeviceworkdata} from "@/api/environmentalMonitoring";
import { getDeviceByType } from "@/api/device"; import { getDeviceByType } from "@/api/device";
const userStore = useUserStore(); const userStore = useUserStore();
const tableData = ref([]) const tableData = ref([])
@ -52,7 +52,7 @@ function getEnvironment() {
environment_params.value.startDate = '' environment_params.value.startDate = ''
environment_params.value.endDate = '' environment_params.value.endDate = ''
} }
getWeatherLogPage(environment_params.value).then((res: any) => { getdeviceworkdata(environment_params.value).then((res: any) => {
environment_data.value = res.data.records environment_data.value = res.data.records
environment_params.value.size = res.data.size environment_params.value.size = res.data.size
environment_params.value.current = res.data.current environment_params.value.current = res.data.current
@ -69,101 +69,69 @@ function environmentReset(){
// WebSocket // WebSocket
const environment = ref() const environment = ref()
const environmentInfo:any = ref({ const environmentInfo:any = ref([])
temperature: "", // const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/vibe_run_data_' + userStore.userId);
humidity: "", // function setupWebSocket() {
rainfall: "",
windSpeed: "",
windDirection: "",
pressure: ""
})
const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/vibe_run_data_' + userStore.userId);
function setupWebSocket() {
ws1.onopen = () => { // ws1.onopen = () => {
}; // };
ws1.onerror = (error: any) => { // ws1.onerror = (error: any) => {
}; // };
ws1.onmessage = (e: any) => { // ws1.onmessage = (e: any) => {
if (e.data != 0) { // if (e.data != 0) {
environment.value = JSON.parse(e.data) // environment.value = JSON.parse(e.data)
if (environment.value.type == 1) { // if (environment.value.type == 1) {
environmentInfo.value.temperature = environment.value.value // environmentInfo.value.temperature = environment.value.value
} // }
if (environment.value.type == 2) { // if (environment.value.type == 2) {
environmentInfo.value.humidity = environment.value.value // environmentInfo.value.humidity = environment.value.value
} // }
if (environment.value.type == 3) { // if (environment.value.type == 3) {
environmentInfo.value.windSpeed = environment.value.value // environmentInfo.value.windSpeed = environment.value.value
} // }
if (environment.value.type == 4) { // if (environment.value.type == 4) {
environmentInfo.value.rainfall = environment.value.value // environmentInfo.value.rainfall = environment.value.value
} // }
if (environment.value.type == 5) { // if (environment.value.type == 5) {
environmentInfo.value.windDirection = environment.value.value // environmentInfo.value.windDirection = environment.value.value
} // }
if (environment.value.type == 6) { // if (environment.value.type == 6) {
environmentInfo.value.pressure = environment.value.value // environmentInfo.value.pressure = environment.value.value
} // }
if (environment.value.type == 7) { // if (environment.value.type == 7) {
environmentInfo.value.oxygen = environment.value.value // environmentInfo.value.oxygen = environment.value.value
} // }
if (environment.value.type == 8) { // if (environment.value.type == 8) {
environmentInfo.value.sf6 = environment.value.value // environmentInfo.value.sf6 = environment.value.value
} // }
} // }
} // }
ws1.onclose = () => { // ws1.onclose = () => {
}; // };
} // }
function getInit() { function getInit() {
let params = { let params = {
stationId: userStore.stationId stationId: userStore.stationId
} }
getWeatherLogList(params).then((res: any) => { getDeviceWorkData(params).then((res: any) => {
environmentInfo.value = res.data environmentInfo.value = res.data
if (!res.data.temperature ) {
environmentInfo.value.temperature = "无"
}
if (!res.data.humidity ) {
environmentInfo.value.humidity = "无"
}
if (!res.data.rainfall ) {
environmentInfo.value.rainfall = "无"
}
if (!res.data.windSpeed ) {
environmentInfo.value.windSpeed = "无"
}
if (!res.data.windDirection ) {
environmentInfo.value.windDirection = "无"
}
if (!res.data.pressure) {
environmentInfo.value.pressure = "无"
}
if (!res.data.oxygen) {
environmentInfo.value.oxygen = "无"
}
if (!res.data.sf6) {
environmentInfo.value.sf6 = "无"
}
}) })
} }
onMounted(() => { onMounted(() => {
getInit() getInit()
setupWebSocket() //setupWebSocket()
getEnvironment() getEnvironment()
gettype() gettype()
}); });
onBeforeUnmount(() => { // onBeforeUnmount(() => {
if (ws1 != null) { // if (ws1 != null) {
ws1.close() // ws1.close()
} // }
}) // })
function currency(list: any, itemcode: any) { function currency(list: any, itemcode: any) {
let dictname = '' let dictname = ''
list.forEach((element: any) => { list.forEach((element: any) => {
@ -173,75 +141,24 @@ function currency(list: any, itemcode: any) {
}) })
return dictname return dictname
} }
const EquipmentType= ref([]) const EquipmentType:any= ref([])
function gettype(){ function gettype(){
getDeviceByType({ dictcode: 'EnvironmentType' }).then((res: any) => { getDeviceByType({ dictcode: 'system' }).then((res: any) => {
EquipmentType.value = res.data EquipmentType.value = res.data
}) })
} }
</script> </script>
<template> <template>
<div class="all_box"> <div class="all_box">
<div class="img_box"> <div class="img_box">
<div class="img_box_one"> <div class="img_box_one" v-for="(item,index) in environmentInfo">
<div><img src="@/assets/navigation/hjjc_sj1.png" alt=""></div> <div><img :src="`/environment/${item.itemcode}.png`" alt=""></div>
<div class="img_box_nei"> <div class="img_box_nei">
<div class="img_text1">空气温度</div> <div class="img_text1">{{ item.dictname }}</div>
<div class="img_text2">{{ environmentInfo.temperature }}<span class="img_unit"> </span></div> <div class="img_text2">{{ item.value }}<span class="img_unit"> {{ item.unit }}</span></div>
</div> </div>
</div> </div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj2.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">空气湿度</div>
<div class="img_text2">{{ environmentInfo.humidity }} <span class="img_unit"> RH</span></div>
</div>
</div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj3.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">降雨量</div>
<div class="img_text2">{{ environmentInfo.rainfall }} <span class="img_unit"> mm</span></div>
</div>
</div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj4.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">风速</div>
<div class="img_text2">{{ environmentInfo.windSpeed }} <span class="img_unit"> </span></div>
</div>
</div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj5.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">风向</div>
<div class="img_text2">{{ environmentInfo.windDirection }} </div>
</div>
</div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj6.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">气压</div>
<div class="img_text2">{{ environmentInfo.pressure }} <span class="img_unit"> hpa</span></div>
</div>
</div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj7.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">氧气</div>
<div class="img_text2">{{ environmentInfo.oxygen }} <span class="img_unit"> %</span></div>
</div>
</div>
<div class="img_box_one">
<div><img src="@/assets/navigation/hjjc_sj8.png" alt=""></div>
<div class="img_box_nei">
<div class="img_text1">SF6</div>
<div class="img_text2">{{ environmentInfo.sf6 }} <span class="img_unit"> %</span></div>
</div>
</div>
</div> </div>
<div class="environment_table"> <div class="environment_table">
<div class="table-title"> <div class="table-title">
@ -263,19 +180,19 @@ function gettype(){
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(56vh); overflow: auto " style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(56vh); overflow: auto "
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }"> :header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
<el-table-column type="index" label="序号" width="80px" align="center" /> <el-table-column type="index" label="序号" width="80px" align="center" />
<el-table-column property="patroldeviceCode" label="设备编号" align="center" /> <el-table-column property="deviceName" label="监控设备名称" align="center" />
<el-table-column property="patroldeviceName" label="设备名称" align="center" /> <el-table-column property="signalName" label="监控信号名称" align="center" />
<el-table-column property="type" label="环境 类型" align="center"> <el-table-column property="systemcode" label="所属系统" align="center" width="100px">
<template #default="scope"> <template #default="scope">
<span>{{ currency(EquipmentType, scope.row.type) }}</span> <span>{{ currency(EquipmentType, scope.row.systemcode) }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="taskName" label="监测数值" align="center"> <el-table-column property="taskName" label="监测数值" align="center" width="100px">
<template #default="scope"> <template #default="scope">
<div v-if="scope.row.value">{{ scope.row.value }}{{scope.row.unit}}</div> <div v-if="scope.row.value">{{ scope.row.value }}{{scope.row.unit}}</div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column property="time" label="监测时间" align="center" /> <el-table-column property="startTime" label="采集时间" align="center" width="160px" />
</el-table> </el-table>
<div style="width:100%;display:flex;align-items:center;margin-top:10px;"> <div style="width:100%;display:flex;align-items:center;margin-top:10px;">
<Page style="margin:0 auto ;" :total="hutotal" v-model:size="environment_params.size" :jumper="'hide'" <Page style="margin:0 auto ;" :total="hutotal" v-model:size="environment_params.size" :jumper="'hide'"

View File

@ -372,7 +372,7 @@ function open(row: any) {
} }
.videomonitor_right { .videomonitor_right {
width: 100%; width: 85%;
height: calc(90vh); height: calc(90vh);
margin-left: 20px; margin-left: 20px;
display: flex; display: flex;

View File

@ -9,7 +9,7 @@
position: fixed; position: fixed;
top: 60px; top: 60px;
"> ">
<Modelset v-if="isModelset" :isautoRotate="isautoRotate" /> <!-- <Modelset v-if="isModelset" :isautoRotate="isautoRotate" /> -->
</div> </div>
<div class="three_button" @click="autoRotateClick"> <div class="three_button" @click="autoRotateClick">
<span v-if="isautoRotate == true">暂停</span> <span v-if="isautoRotate == true">暂停</span>
@ -448,42 +448,42 @@ function getInit() {
const tourTaskInfo: any = ref({}) const tourTaskInfo: any = ref({})
// //
const url = userStore.webApiBaseUrl; const url = userStore.webApiBaseUrl;
const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/vibe_run_data_' + userStore.userId); // const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/vibe_run_data_' + userStore.userId);
// var source = new EventSource(url + "/sse/connect/vibe_run_data_" + userStore.userId,) // // var source = new EventSource(url + "/sse/connect/vibe_run_data_" + userStore.userId,)
function setupWebSocket() { // function setupWebSocket() {
ws1.onopen = () => { // ws1.onopen = () => {
console.log('WebSocket连接成功'); // console.log('WebSocket');
}; // };
ws1.onerror = (error: any) => { // ws1.onerror = (error: any) => {
}; // };
ws1.onmessage = (e: any) => { // ws1.onmessage = (e: any) => {
if (e.data != 0) { // if (e.data != 0) {
environment.value = JSON.parse(e.data) // environment.value = JSON.parse(e.data)
if (environment.value.type == 1) { // if (environment.value.type == 1) {
environmentInfo.value.temperature = environment.value.value // environmentInfo.value.temperature = environment.value.value
} // }
if (environment.value.type == 2) { // if (environment.value.type == 2) {
environmentInfo.value.humidity = environment.value.value // environmentInfo.value.humidity = environment.value.value
} // }
if (environment.value.type == 3) { // if (environment.value.type == 3) {
environmentInfo.value.windSpeed = environment.value.value // environmentInfo.value.windSpeed = environment.value.value
} // }
if (environment.value.type == 4) { // if (environment.value.type == 4) {
environmentInfo.value.rainfall = environment.value.value // environmentInfo.value.rainfall = environment.value.value
} // }
if (environment.value.type == 5) { // if (environment.value.type == 5) {
environmentInfo.value.windDirection = environment.value.value // environmentInfo.value.windDirection = environment.value.value
} // }
if (environment.value.type == 6) { // if (environment.value.type == 6) {
environmentInfo.value.pressure = environment.value.value // environmentInfo.value.pressure = environment.value.value
} // }
} // }
}; // };
ws1.onclose = () => { // ws1.onclose = () => {
}; // };
} // }
const environmentInfo = ref({ const environmentInfo = ref({
temperature: "", temperature: "",
@ -509,16 +509,16 @@ onMounted(() => {
bsGetProductProcess() bsGetProductProcess()
getInit() getInit()
tourTaskInit('1') tourTaskInit('1')
setupWebSocket() // setupWebSocket()
getEquipment() getEquipment()
getgetConfirmationRate() getgetConfirmationRate()
alarmCount.value = userStore.alarmCount alarmCount.value = userStore.alarmCount
}); });
onBeforeUnmount(() => { onBeforeUnmount(() => {
if (ws1 != null) { // if (ws1 != null) {
ws1.close() // ws1.close()
} // }
clearInterval(tableTimer) clearInterval(tableTimer)
}) })
const isautoRotate = ref(true) const isautoRotate = ref(true)
@ -916,6 +916,7 @@ const tabs = ref(1)
font-size: 24px; font-size: 24px;
color: #00FFFF; color: #00FFFF;
line-height: 23px; line-height: 23px;
margin-right: 10px;
} }
.three_bottom_two { .three_bottom_two {

View File

@ -65,9 +65,9 @@ const initlist = ref({
convert_urls: false, convert_urls: false,
branding: false, branding: false,
}) })
let isDark: any = useDark().value == true ? '1' : '2' let isDark: any = '1'
watch(useDark(), () => { watch(useDark(), () => {
isDark = useDark().value == true ? '1' : '2' isDark = '1'
if (useDark().value == true) { if (useDark().value == true) {
initlist.value.skin_url = produrl.value + '/tinymce/skins/ui/oxide-dark' initlist.value.skin_url = produrl.value + '/tinymce/skins/ui/oxide-dark'
contentstyleval.value = 'body { background-color: #282828;color:#fff;border:none;}' contentstyleval.value = 'body { background-color: #282828;color:#fff;border:none;}'

View File

@ -20,6 +20,7 @@ function getInit() {
getAlarmLogById(params).then((res: any) => { getAlarmLogById(params).then((res: any) => {
res.data.checkResult = '1' res.data.checkResult = '1'
examinationInfo.value = res.data examinationInfo.value = res.data
examinationInfo.value
}) })
} }
@ -98,7 +99,7 @@ const num = ref(0)
<div> <div>
<div class="public-overlay"> <div class="public-overlay">
<div class="newexamination"> <div class="newexamination">
<div class="public-examination" :style="examinationInfo.systemType == '02'?'' : 'height: 520px;'" > <div class="public-examination">
<img v-if="examinationInfo.checkFlag == 1" style="position:absolute;top: 0px;left: 0px;" <img v-if="examinationInfo.checkFlag == 1" style="position:absolute;top: 0px;left: 0px;"
src="@/assets/giveanalarm/hecha.png" alt=""> src="@/assets/giveanalarm/hecha.png" alt="">
<img style="position:absolute;top: 15px;right: 20px;cursor:pointer;" src="@/assets/giveanalarm/x.png" alt="" <img style="position:absolute;top: 15px;right: 20px;cursor:pointer;" src="@/assets/giveanalarm/x.png" alt=""
@ -109,32 +110,24 @@ const num = ref(0)
<div class="public-details-title">告警信息{{ examinationInfo.status }}</div> <div class="public-details-title">告警信息{{ examinationInfo.status }}</div>
</div> </div>
<div style="display: flex;"> <div style="display: flex;">
<div :style="examinationInfo.systemType == '02'?'width:370px;height: 250px;' : 'width:370px;height: 150px;'"> <div style="width:370px;height: 250px;">
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'"> <div class="public-details-conent" >
<div class="public-details-name">点位名称</div> <div class="public-details-name">点位名称</div>
<div>{{ examinationInfo.bayName }}</div> <div>{{ examinationInfo.bayName }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '01'"> <div class="public-details-conent" >
<div class="public-details-name">信号名称</div>
<div>{{ examinationInfo.signalName }}</div>
</div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'" >
<div class="public-details-name">设备名称</div> <div class="public-details-name">设备名称</div>
<div>{{ examinationInfo.patroldeviceName }}</div> <div>{{ examinationInfo.patroldeviceName }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '01'" >
<div class="public-details-name">主设备名称</div>
<div>{{ examinationInfo.mainDeviceName }}</div>
</div>
<div class="public-details-conent"> <div class="public-details-conent">
<div class="public-details-name">部件名称</div> <div class="public-details-name">部件名称</div>
<div>{{ examinationInfo.componentName }}</div> <div>{{ examinationInfo.componentName }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'"> <div class="public-details-conent">
<div class="public-details-name">告警来源</div> <div v-if="examinationInfo.alarmSourceType == 1" class="public-details-name">告警来源</div>
<div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div> <div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'"> <div class="public-details-conent">
<div class="public-details-name">告警阈值</div> <div class="public-details-name">告警阈值</div>
<span style="display:block;" > <span style="display:block;" >
<span style="display: inline-block;width: 50%;text-align: left;"><span>预警</span><span>{{ <span style="display: inline-block;width: 50%;text-align: left;"><span>预警</span><span>{{
@ -154,11 +147,10 @@ const num = ref(0)
<div class="public-details-conent"> <div class="public-details-conent">
<div class="public-details-name">告警时间</div> <div class="public-details-name">告警时间</div>
<div v-if="examinationInfo.systemType == '02'" >{{ examinationInfo.alarmDate }}</div> <div >{{ examinationInfo.alarmDate }}</div>
<div v-if="examinationInfo.systemType == '01'" >{{ examinationInfo.alarmTime }}</div>
</div> </div>
</div> </div>
<div v-if="examinationInfo.systemType == '02'" style="width:290px;height: 200px;"> <div v-if="examinationInfo.alarmSourceType == 1" style="width:290px;height: 200px;">
<div style="width:100%;height:100%; position: relative;"> <div style="width:100%;height:100%; position: relative;">
<div title="查看图片" style="position: absolute; <div title="查看图片" style="position: absolute;
right: 5px; right: 5px;
@ -197,14 +189,11 @@ const num = ref(0)
</div> </div>
<div class="public-details-conent"> <div class="public-details-conent">
<div class="public-details-name">告警描述</div> <div class="public-details-name">告警描述</div>
<div v-if="examinationInfo.systemType == '02'" :title="examinationInfo.content" style="height:63px;width: 560px;display: -webkit-box; <div :title="examinationInfo.content" style="height:63px;width: 560px;display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 3; -webkit-line-clamp: 3;
overflow: hidden;">{{ examinationInfo.content }}</div> overflow: hidden;">{{ examinationInfo.content }}</div>
<div v-if="examinationInfo.systemType == '01'" :title="examinationInfo.alarmMessage" style="height:63px;width: 560px;display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;">{{ examinationInfo.alarmMessage }}</div>
</div> </div>
<div style="display:flex;align-items: center;"> <div style="display:flex;align-items: center;">

View File

@ -162,7 +162,7 @@ const handleChange = (value: any) => {
<img src="@/assets/giveanalarm/jg_wz.png" alt="" style="width:180px ;"> <img src="@/assets/giveanalarm/jg_wz.png" alt="" style="width:180px ;">
<div style="font-size: 60px; color: red;">[{{ examinationData.length }}]</div> <div style="font-size: 60px; color: red;">[{{ examinationData.length }}]</div>
</div> </div>
<div class="public-examination" :style="examinationInfo.systemType == '02'?'' : 'height: 560px;'"> <div class="public-examination">
<img v-if="examinationInfo.checkFlag == 1" style="position:absolute;top: 0px;left: 0px;" <img v-if="examinationInfo.checkFlag == 1" style="position:absolute;top: 0px;left: 0px;"
src="@/assets/giveanalarm/hecha.png" alt=""> src="@/assets/giveanalarm/hecha.png" alt="">
<img style="position:absolute;top: 15px;right: 20px;cursor:pointer;" src="@/assets/giveanalarm/x.png" alt="" <img style="position:absolute;top: 15px;right: 20px;cursor:pointer;" src="@/assets/giveanalarm/x.png" alt=""
@ -195,32 +195,24 @@ const handleChange = (value: any) => {
<div class="public-details-title">告警信息{{ examinationInfo.status }}</div> <div class="public-details-title">告警信息{{ examinationInfo.status }}</div>
</div> </div>
<div style="display: flex;"> <div style="display: flex;">
<div :style="examinationInfo.systemType == '02'?'width:370px;height: 250px;' : 'width:370px;height: 150px;'"> <div style="width:370px;height: 250px;">
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'"> <div class="public-details-conent">
<div class="public-details-name">点位名称</div> <div class="public-details-name">点位名称</div>
<div>{{ examinationInfo.bayName }}</div> <div>{{ examinationInfo.bayName }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '01'"> <div class="public-details-conent">
<div class="public-details-name">信号名称</div>
<div>{{ examinationInfo.signalName }}</div>
</div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'" >
<div class="public-details-name">设备名称</div> <div class="public-details-name">设备名称</div>
<div>{{ examinationInfo.patroldeviceName }}</div> <div>{{ examinationInfo.patroldeviceName }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '01'" >
<div class="public-details-name">主设备名称</div>
<div>{{ examinationInfo.mainDeviceName }}</div>
</div>
<div class="public-details-conent"> <div class="public-details-conent">
<div class="public-details-name">部件名称</div> <div class="public-details-name">部件名称</div>
<div>{{ examinationInfo.componentName }}</div> <div>{{ examinationInfo.componentName }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'"> <div class="public-details-conent" v-if="examinationInfo.alarmSourceType == 1">
<div class="public-details-name">告警来源</div> <div class="public-details-name">告警来源</div>
<div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div> <div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div>
</div> </div>
<div class="public-details-conent" v-if="examinationInfo.systemType == '02'"> <div class="public-details-conent">
<div class="public-details-name">告警阈值</div> <div class="public-details-name">告警阈值</div>
<span style="display:block;" > <span style="display:block;" >
<span style="display: inline-block;width: 50%;text-align: left;"><span>预警</span><span>{{ <span style="display: inline-block;width: 50%;text-align: left;"><span>预警</span><span>{{
@ -241,11 +233,10 @@ const handleChange = (value: any) => {
<div class="public-details-conent"> <div class="public-details-conent">
<div class="public-details-name">告警时间</div> <div class="public-details-name">告警时间</div>
<div v-if="examinationInfo.systemType == '02'" >{{ examinationInfo.alarmDate }}</div> <div>{{ examinationInfo.alarmDate }}</div>
<div v-if="examinationInfo.systemType == '01'" >{{ examinationInfo.alarmTime }}</div>
</div> </div>
</div> </div>
<div style="width:290px;height: 200px;" v-if="examinationInfo.systemType == '02'"> <div v-if="examinationInfo.alarmSourceType == 1" style="width:290px;height: 200px;">
<div style="width:100%;height:100%; position: relative;"> <div style="width:100%;height:100%; position: relative;">
<div title="查看图片" style="position: absolute; <div title="查看图片" style="position: absolute;
right: 5px; right: 5px;
@ -282,15 +273,11 @@ const handleChange = (value: any) => {
</div> </div>
</div> </div>
<div class="public-details-conent"> <div class="public-details-conent">
<div class="public-details-name">告警描述</div> <div class="public-details-name">告警描述</div>
<div v-if="examinationInfo.systemType == '02'" :title="examinationInfo.content" style="height:63px;width: 560px;display: -webkit-box; <div :title="examinationInfo.content" style="height:63px;width: 560px;display: -webkit-box;
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
-webkit-line-clamp: 3; -webkit-line-clamp: 3;
overflow: hidden;">{{ examinationInfo.content }}</div> overflow: hidden;">{{ examinationInfo.content }}</div>
<div v-if="examinationInfo.systemType == '01'" :title="examinationInfo.alarmMessage" style="height:63px;width: 560px;display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;">{{ examinationInfo.alarmMessage }}</div>
</div> </div>
<div style="display:flex;align-items: center;"> <div style="display:flex;align-items: center;">
<div class="public-details-line"></div> <div class="public-details-line"></div>

View File

@ -0,0 +1,16 @@
<script lang="ts">
export default {
name: 'answering' //
};
</script>
<script setup lang="ts">
import { useUserStore } from '@/store/modules/user';
const userStore = useUserStore();
// answeringUrl answeringUrl
</script>
<template>
<iframe :src="userStore.answeringUrl" style="width:100%; height:calc(90vh);margin-top: 10px;" frameborder="0" allow="microphone" >
</iframe>
</template>
<style scoped lang="scss"></style>

View File

@ -0,0 +1,504 @@
<script lang="ts">
export default {
name: 'editvideo' //
};
</script>
<script setup lang="ts">
import { ref, onMounted } from "vue";
import { ElMessageBox, ElMessage } from "element-plus";
import axios from 'axios';
import JessibucaPlayer from '@/components/jessibuca/index1.vue'
import { useUserStore } from '@/store/modules/user';
const userStore = useUserStore();
const videoUrl = ref("")
const props = defineProps({
rowInfo: {
required: false,
type: Object,
default: false
},
online: {
required: false,
type: String,
default: false
},
});
const controSpeed = ref(100) // 30
function ptzCamera(command: any) { //
isGaoliang.value = command
if (props.online != "1") {
return
}
if (channelId.value == "" || channelId.value == undefined) {
ElMessage({
type: 'error',
message: '暂时无法调试,请先检查视频监控是否正常!',
})
return
}
axios.get(userStore.webApiBaseUrl + '/basedata/substation-patroldevice/isWorkingOfPatrolDevice?stationcode=' + userStore.stationCode + "&devicecode=" + deviceId.value, {}).then((res: any) => {
if (res.data.data == "0") {
axios.post(userStore.webApiMonitorUrl + '/api/ptz/control/' + deviceId.value + '/' + channelId.value + '?command=' + command +
'&horizonSpeed=' + controSpeed.value + '&verticalSpeed=' + controSpeed.value + '&zoomSpeed=' + controSpeed.value, {}).then((res: any) => { })
}
})
}
function condensationChang(command: any) { //
if (props.online != "1") {
return
}
if (channelId.value == "" || channelId.value == undefined) {
ElMessage({
type: 'error',
message: '暂时无法调试,请先检查视频监控是否正常!',
})
return
}
// 42H 66 41H 65
const cmdCode = ref()
if (command == '加') {
cmdCode.value = 65
isGaoliang.value = '65'
} else if (command == '减') {
cmdCode.value = 66
isGaoliang.value = '66'
}
axios.get(userStore.webApiBaseUrl + '/basedata/substation-patroldevice/isWorkingOfPatrolDevice?stationcode=' + userStore.stationCode + "&devicecode=" + deviceId.value, {}).then((res: any) => {
if (res.data.data == "0") {
axios.post(userStore.webApiMonitorUrl + '/api/ptz/front_end_command/' + deviceId.value + '/' + channelId.value + '?cmdCode=' + cmdCode.value + '&parameter1=80&parameter2=0&combindCode2=0', {}).then((res: any) => { })
}
})
}
function apertureChang(command: any) { //
if (props.online != "1") {
return
}
if (channelId.value == "" || channelId.value == undefined) {
ElMessage({
type: 'error',
message: '暂时无法调试,请先检查视频监控是否正常!',
})
return
}
// 48H 72 44H 70
const cmdCode = ref(72)
if (command == '加') {
cmdCode.value = 70
isGaoliang.value = '70'
} else if (command == '减') {
cmdCode.value = 72
isGaoliang.value = '72'
}
axios.get(userStore.webApiBaseUrl + '/basedata/substation-patroldevice/isWorkingOfPatrolDevice?stationcode=' + userStore.stationCode + "&devicecode=" + deviceId.value, {}).then((res: any) => {
if (res.data.data == "0") {
axios.post(userStore.webApiMonitorUrl + '/api/ptz/front_end_command/' + deviceId.value + '/' + channelId.value + '?cmdCode=' + cmdCode.value + '&parameter1=0&parameter2=80&combindCode2=0', {}).then((res: any) => { })
}
})
}
function videoRefresh() {
videoUrl.value = videoUrl.value + '?Math=' + Math.random()
}
const deviceId = ref("")
const channelId = ref("")
const videofmp4 = ref('')
onMounted(() => {
if (props.rowInfo.deviceId == undefined) {
deviceId.value = props.rowInfo.deviceid
channelId.value = props.rowInfo.channelid
} else {
deviceId.value = props.rowInfo.deviceId
channelId.value = props.rowInfo.channelId
}
axios.get(userStore.webApiMonitorUrl + '/api/play/start/' + deviceId.value + '/' + channelId.value, {}).then((ress: any) => {
if (ress.data.data != undefined) {
videoUrl.value = ress.data.data.ws_flv
videofmp4.value = ress.data.data.fmp4
}
}).catch(function (error: any) {
})
})
const isGaoliang: any = ref("")
function quxiao() {
isGaoliang.value = ''
}
</script>
<template>
<div class="editvideo-box">
<div style="width: 98%; height: 650px; margin: auto;">
<JessibucaPlayer :isClose="false" :_uid="'editvideo1'" :visible.sync="true" :videoUrl="videoUrl"
:videofmp4="videofmp4" :hasAudio="true" fluent autoplay live></JessibucaPlayer>
</div>
<div class="Camera-buttons-box1">
<div class="Camera-buttons-box">
<div class="Camera-left-button1" @mousedown="ptzCamera('up')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button2" @mousedown="ptzCamera('upright')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button3" @mousedown="ptzCamera('right')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button4" @mousedown="ptzCamera('downright')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button5" @mousedown="ptzCamera('down')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button6" @mousedown="ptzCamera('downleft')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button7" @mousedown="ptzCamera('left')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button8" @mousedown="ptzCamera('upleft')" @mouseup="ptzCamera('stop')"></div>
<div class="Camera-left-button9" @click="videoRefresh"></div>
</div>
<div>
<div class="focallengthbox">
<div class="focallength1" :class="{ 'gaolaing': isGaoliang == 'zoomout' }"
@mousedown="ptzCamera('zoomout')" @mouseup="ptzCamera('stop')">
<img src="@/assets/videoimg/left.png" style="width:8px;height:12px" alt="">
</div>
<div class="focallength2">缩放</div>
<div class="focallength1" :class="{ 'gaolaing': isGaoliang == 'zoomin' }"
@mousedown="ptzCamera('zoomin')" @mouseup="ptzCamera('stop')">
<img src="@/assets/videoimg/right.png" style="width:8px;height:12px" alt="">
</div>
</div>
<div class="focallengthbox">
<div class="focallength1" :class="{ 'gaolaing': isGaoliang == '66' }"
@mousedown="condensationChang('减')" @mouseup="quxiao">
<img src="@/assets/videoimg/left.png" style="width:8px;height:12px" alt="">
</div>
<div class="focallength2">光聚</div>
<div class="focallength1" :class="{ 'gaolaing': isGaoliang == '65' }"
@mousedown="condensationChang('加')" @mouseup="quxiao">
<img src="@/assets/videoimg/right.png" style="width:8px;height:12px" alt="">
</div>
</div>
<div class="focallengthbox">
<div class="focallength1" :class="{ 'gaolaing': isGaoliang == '72' }"
@mousedown="apertureChang('减')" @mouseup="quxiao">
<img src="@/assets/videoimg/left.png" style="width:8px;height:12px" alt="">
</div>
<div class="focallength2">光圈</div>
<div class="focallength1" :class="{ 'gaolaing': isGaoliang == '70' }"
@mousedown="apertureChang('加')" @mouseup="quxiao">
<img src="@/assets/videoimg/right.png" style="width:8px;height:12px" alt="">
</div>
</div>
</div>
</div>
</div>
</template>
<style scoped lang="scss">
.Camera-buttons-box1 {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.Camera-buttons-box {
position: relative;
width: 180px;
height: 165px;
// margin-top: 20px;
// margin-left: 50px;
// margin-bottom: 10px;
// display: flex;
// flex-wrap: wrap;
// justify-content: center;
}
.Camera-left-button1 {
cursor: pointer;
position: absolute;
top: 29px;
left: 65px;
width: 44px;
height: 35px;
background: url(@/assets/navigation/sxj_01.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button2 {
cursor: pointer;
position: absolute;
top: 33px;
left: 100px;
width: 44px;
height: 44px;
background: url(@/assets/navigation/sxj_02.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button3 {
cursor: pointer;
position: absolute;
top: 65px;
left: 116px;
width: 34px;
height: 44px;
background: url(@/assets/navigation/sxj_03.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button4 {
cursor: pointer;
position: absolute;
top: 100px;
left: 103px;
width: 44px;
height: 44px;
background: url(@/assets/navigation/sxj_04.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button5 {
cursor: pointer;
position: absolute;
top: 117px;
left: 70px;
width: 44px;
height: 34px;
background: url(@/assets/navigation/sxj_05.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button6 {
cursor: pointer;
position: absolute;
top: 103px;
left: 35px;
width: 43px;
height: 44px;
background: url(@/assets/navigation/sxj_06.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button7 {
cursor: pointer;
position: absolute;
top: 69px;
left: 28px;
width: 35px;
height: 44px;
background: url(@/assets/navigation/sxj_07.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button8 {
cursor: pointer;
position: absolute;
top: 35px;
left: 33px;
width: 43px;
height: 43px;
background: url(@/assets/navigation/sxj_08.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button9 {
cursor: pointer;
position: absolute;
top: 63px;
left: 63px;
width: 54px;
height: 54px;
background: url(@/assets/navigation/sxj_09.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button1:hover {
background: url(@/assets/navigation/sxj_01.png) no-repeat center center;
background: url(@/assets/navigation/sxj_011.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button2:hover {
background: url(@/assets/navigation/sxj_02.png) no-repeat center center;
background: url(@/assets/navigation/sxj_022.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button3:hover {
background: url(@/assets/navigation/sxj_03.png) no-repeat center center;
background: url(@/assets/navigation/sxj_033.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button4:hover {
background: url(@/assets/navigation/sxj_04.png) no-repeat center center;
background:url(@/assets/navigation/sxj_044.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button5:hover {
background: url(@/assets/navigation/sxj_05.png) no-repeat center center;
background: url(@/assets/navigation/sxj_055.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button6:hover {
background: url(@/assets/navigation/sxj_06.png) no-repeat center center;
background: url(@/assets/navigation/sxj_066.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button7:hover {
background: url(@/assets/navigation/sxj_07.png) no-repeat center center;
background: url(@/assets/navigation/sxj_077.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button8:hover {
background: url(@/assets/navigation/sxj_08.png) no-repeat center center;
background: url(@/assets/navigation/sxj_088.png) no-repeat center center;
background-size: 100% 100%;
}
.Camera-left-button9:hover {
background: url(@/assets/navigation/sxj_09.png) no-repeat center center;
background: url(@/assets/navigation/sxj_099.png) no-repeat center center;
background-size: 100% 100%;
}
.gaolaing {
background: rgba(50, 177, 245, 0.4)
}
.focallengthbox {
display: flex;
// padding-left: 40px;
padding-top: 5px;
.focallength1 {
border: 1px solid rgba(50, 177, 245, 0.4);
width: 30px;
height: 30px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
}
.focallength2 {
pointer-events: none;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
border-top: 1px solid rgba(50, 177, 245, 0.4);
border-bottom: 1px solid rgba(50, 177, 245, 0.4);
width: 120px;
height: 30px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
color: #B5D7FF;
}
}
.Camera-left-buttons {
position: relative;
width: 156px;
height: 156px;
margin-right: 10px;
.Camera-left-input {
width: 130px;
height: 36px;
}
.Camera-left-button {
position: absolute;
width: 44px;
height: 44px;
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
.img {
width: 12px;
height: 12px;
}
}
.Camera1 {
top: 16px;
left: 16px;
}
.Camera2 {
top: 0px;
left: 54px;
}
.Camera3 {
top: 16px;
right: 16px;
}
.Camera4 {
top: 54px;
left: 0px;
}
.Camera5 {
top: 54px;
left: 54px;
}
.Camera6 {
top: 54px;
right: 0px;
}
.Camera7 {
bottom: 16px;
left: 16px;
}
.Camera8 {
bottom: 0px;
left: 54px;
}
.Camera9 {
bottom: 16px;
right: 16px;
}
.Camera-left-button:hover {
// background-color: rgba(33, 191, 149, 0.2);
}
}
.Camera-right-buttons {
display: flex;
justify-content: space-between;
flex-wrap: wrap;
width: 102px;
height: 156px;
.buttonurl-box {
width: 100%;
height: 48px;
// background-color: rgba(53, 222, 176,0.4);
border: 1px solid rgba(0, 249, 162, 1);
border-radius: 4px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
.buttonurl-imgbox {
width: 50%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
.buttonurl-imgbox:hover {
background-color: rgba(33, 191, 149, 0.2);
}
}
}
</style>

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,7 @@ import {
editTask, editTask,
delTask, delTask,
getelect, getelect,
getSubstationNaviTree, getBayTree,
getmaintype, getmaintype,
getmaindata, getmaindata,
QueryTour, QueryTour,
@ -713,7 +713,7 @@ function getbaytree() {
const params = { const params = {
stationId: info.value.stationAll stationId: info.value.stationAll
} }
getSubstationNaviTree(params).then((res: any) => { getBayTree(params).then((res: any) => {
if (res.data.length == 0) { if (res.data.length == 0) {
MainvalData.value = [] MainvalData.value = []
componentData.value = [] componentData.value = []
@ -1449,18 +1449,18 @@ function delTour(row: any) {
} }
// //
const tableRowClassName = ({ const tableRowClassName = ({
row, row,
rowIndex, rowIndex,
}: { }: {
row: any row: any
rowIndex: number rowIndex: number
}) => { }) => {
if (rowIndex % 2 === 0) { if (rowIndex % 2 === 0) {
return 'warning-row' return 'warning-row'
} else if (rowIndex % 2 === 1) { } else if (rowIndex % 2 === 1) {
return 'success-row' return 'success-row'
} }
return '' return ''
} }
// // // //
// const tableRowClassName = ({ // const tableRowClassName = ({
@ -2165,8 +2165,8 @@ const open = () => {
</div> </div>
<div> <div>
<el-table ref="multipleTableRef" :data="tableDataList" style="width: 100%;margin-bottom: 10px;height: calc(70vh); <el-table ref="multipleTableRef" :data="tableDataList" style="width: 100%;margin-bottom: 10px;height: calc(70vh);
overflow: auto;" :header-cell-style="tableBg" stripe @selection-change="handleSelectionChange" v-loading="treeloading" overflow: auto;" :header-cell-style="tableBg" stripe @selection-change="handleSelectionChange" :row-class-name="tableRowClassName"
> v-loading="treeloading">
<el-table-column type="selection" width="30" align="center" /> <el-table-column type="selection" width="30" align="center" />
<el-table-column type="index" label="序号" width="50px" align="center" /> <el-table-column type="index" label="序号" width="50px" align="center" />
<el-table-column property="stationName" label="变电站名称"> <el-table-column property="stationName" label="变电站名称">
@ -2887,8 +2887,8 @@ const open = () => {
width: 300px; width: 300px;
padding: 5px 0px 10px; padding: 5px 0px 10px;
box-sizing: border-box; box-sizing: border-box;
// background: #fff; // background: #fff; riis-web/src/assets/navigation/ty_260x988.png
background-image: url(@/assets/newimg/jcpz_260.png); background-image: url(@/assets/navigation/ty_260x988.png);
background-size: 100% 100%; background-size: 100% 100%;
border-radius: 3px; border-radius: 3px;
position: relative; position: relative;
@ -2928,11 +2928,11 @@ const open = () => {
width: 100%; width: 100%;
height: calc(100vh - 290px); height: calc(100vh - 290px);
overflow: auto; overflow: auto;
// background-color: rgba(255, 255, 255, 1); // background-color: rgba(255, 255, 255, 1); navigation/ty_260x988.png riis-web/src/assets/navigation/ty_1614x988.png
border-radius: 3px; border-radius: 3px;
box-sizing: border-box; box-sizing: border-box;
margin-left: 15px; margin-left: 15px;
background: url(@/assets/newimg/cjrw_1890.png); background: url(@/assets/navigation/ty_1614x988.png);
background-size: 100% 100%; background-size: 100% 100%;
padding: 10px; padding: 10px;
} }

View File

@ -606,14 +606,15 @@ function retrunClick() {
<div class="all-left"> <div class="all-left">
<div class="details"> <div class="details">
<div class="details-left"> <div class="details-left">
<img class="details-left-imgbg" src="@/assets/patrolmonitor/xsjk_1235.png" alt=""> <img class="details-left-imgbg" src="@/assets/navigation/sw.png" alt="">
<div class="details-content"> <div class="details-content">
<div class="details-content-left"> <div class="details-content-left">
<div style="display: flex;"> <div style="display: flex;">
<div style="margin: 20px 20px 0px 20px;"> <div style="margin: 20px 20px 0px 20px;">
<div class="details-left-two">任务名称 {{ tableData.taskName }}</div> <div class="details-left-two">任务名称 {{ tableData.taskName }}</div>
<div style="margin-top: 20px;" class="details-left-two">开始时间{{ tableData.startTime <div style="margin-top: 20px;" class="details-left-two">开始时间{{
}}</div> tableData.startTime
}}</div>
</div> </div>
<div style="margin: 20px 20px 0px 20px;"> <div style="margin: 20px 20px 0px 20px;">
<div class="details-left-two">任务类型 <div class="details-left-two">任务类型
@ -622,8 +623,9 @@ function retrunClick() {
<span v-if="tableData.type == 3">专项巡视</span> <span v-if="tableData.type == 3">专项巡视</span>
<span v-if="tableData.type == 4">自定义巡视</span> <span v-if="tableData.type == 4">自定义巡视</span>
</div> </div>
<div style="margin-top: 20px;" class="details-left-two">结束时间 {{ tableData.endTime <div style="margin-top: 20px;" class="details-left-two">结束时间 {{
}}</div> tableData.endTime
}}</div>
</div> </div>
<div style="margin: 20px 20px 0px 20px;"> <div style="margin: 20px 20px 0px 20px;">
<div class="details-left-two">计划时间{{ tableData.planStartTime }}</div> <div class="details-left-two">计划时间{{ tableData.planStartTime }}</div>
@ -649,28 +651,33 @@ function retrunClick() {
<div>已巡视</div> <div>已巡视</div>
</div> </div>
<div class="details-content-number"> <div class="details-content-number">
<div class="details-top-number" style="color:#00F9A2 ;">{{ tableData.successCount }} <div class="details-top-number" style="color:#00F9A2 ;">{{
tableData.successCount }}
</div> </div>
<div style="color:#00F9A2 ;">成功</div> <div style="color:#00F9A2 ;">成功</div>
</div> </div>
<div class="details-content-number"> <div class="details-content-number">
<div style="color:#FFBD00 ;" class="details-top-number">{{ tableData.failCount }} <div style="color:#FFBD00 ;" class="details-top-number">{{ tableData.failCount
}}
</div> </div>
<div style="color:#FFBD00 ;">失败</div> <div style="color:#FFBD00 ;">失败</div>
</div> </div>
<div class="details-content-number"> <div class="details-content-number">
<div style="color:#00F9A2 ;" class="details-top-number">{{ tableData.normalCount }} <div style="color:#00F9A2 ;" class="details-top-number">{{ tableData.normalCount
}}
</div> </div>
<div style="color:#00F9A2 ;">正常</div> <div style="color:#00F9A2 ;">正常</div>
</div> </div>
<div class="details-content-number"> <div class="details-content-number">
<div style="color:#FF3300 ;" class="details-top-number">{{ tableData.abnormalCount <div style="color:#FF3300 ;" class="details-top-number">{{
}} tableData.abnormalCount
}}
</div> </div>
<div style="color:#FF3300 ;">异常</div> <div style="color:#FF3300 ;">异常</div>
</div> </div>
<div class="details-content-number"> <div class="details-content-number">
<div style="color:#0099FF ;" class="details-top-number">{{ tableData.serviceCount }} <div style="color:#0099FF ;" class="details-top-number">{{
tableData.serviceCount }}
</div> </div>
<div style="color:#0099FF ;">设备检修</div> <div style="color:#0099FF ;">设备检修</div>
</div> </div>
@ -681,7 +688,8 @@ function retrunClick() {
<el-progress type="circle" :percentage="tableData.taskProgress" :stroke-width="8" <el-progress type="circle" :percentage="tableData.taskProgress" :stroke-width="8"
:color="'rgba(255,156,42,1)'" style="position:absolute;top:10px;left:10px"> :color="'rgba(255,156,42,1)'" style="position:absolute;top:10px;left:10px">
<template #default="{ percentage }"> <template #default="{ percentage }">
<div style="font-size: 26px;color: #fff;padding-bottom: 5px;">{{ percentage }}% <div style="font-size: 26px;color: #fff;padding-bottom: 5px;">{{ percentage
}}%
</div> </div>
<div style="padding-top: 5px;font-size: 14px;color: #fff;">巡视总进度</div> <div style="padding-top: 5px;font-size: 14px;color: #fff;">巡视总进度</div>
</template> </template>
@ -724,10 +732,11 @@ function retrunClick() {
</div> </div>
</div> </div>
<div class="contont" id="clickonresize"> <div class="contont" id="clickonresize">
<img class="contont-img" src="@/assets/patrolmonitor/xsjk_1235_700.png" alt=""> <img class="contont-img" src="@/assets/navigation/sw1.png" alt="">
<div style="position: relative;z-index: 1; height: 100%;"> <div style="position: relative;z-index: 1; height: 100%;">
<div class="contont-title"> <div class="contont-title">
<span style="color: #ffffff;font-size: 16px;font-weight:700 ;" class="fontFamily">巡视点位</span> <span style="color: #ffffff;font-size: 16px;font-weight:700 ;"
class="fontFamily">巡视点位</span>
</div> </div>
<div class="contont-contont"> <div class="contont-contont">
<div <div
@ -751,7 +760,7 @@ function retrunClick() {
<el-table :data="gettable" stripe :header-cell-style="tableBg" @row-click="selectRow" <el-table :data="gettable" stripe :header-cell-style="tableBg" @row-click="selectRow"
v-loading="treeloading" highlight-current-row @cell-mouse-enter="hoverTableEnter" v-loading="treeloading" highlight-current-row @cell-mouse-enter="hoverTableEnter"
@cell-mouse-leave="hoverTableLeave" @cell-mouse-leave="hoverTableLeave" :row-class-name="tableRowClassName"
style="width: 98%;margin:auto;position: relative;margin: 15px 10px;height:calc(100%); "> style="width: 98%;margin:auto;position: relative;margin: 15px 10px;height:calc(100%); ">
<el-table-column type="index" align="center" label="序号" width="60px" /> <el-table-column type="index" align="center" label="序号" width="60px" />
<el-table-column prop="mainDeviceName" label="设备名称" /> <el-table-column prop="mainDeviceName" label="设备名称" />
@ -786,7 +795,7 @@ function retrunClick() {
<el-table-column prop="desc" label="识别类型" width="140px"> <el-table-column prop="desc" label="识别类型" width="140px">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.desc != null && scope.row.desc != ''">{{ scope.row.desc <span v-if="scope.row.desc != null && scope.row.desc != ''">{{ scope.row.desc
}}</span> }}</span>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
@ -795,13 +804,15 @@ function retrunClick() {
<span <span
v-if="scope.row.valueType == 'meter' || scope.row.valueType == 'infrared' || scope.row.valueType == 'sound'"> v-if="scope.row.valueType == 'meter' || scope.row.valueType == 'infrared' || scope.row.valueType == 'sound'">
<span v-if="scope.row.analysisResult == '异常'" <span v-if="scope.row.analysisResult == '异常'"
style="color: red;font-size: 16px;font-weight: bold;"> {{ scope.row.value }} style="color: red;font-size: 16px;font-weight: bold;"> {{
scope.row.value }}
{{ scope.row.unit }}</span> {{ scope.row.unit }}</span>
<span v-else> {{ scope.row.value }} {{ scope.row.unit }}</span> <span v-else> {{ scope.row.value }} {{ scope.row.unit }}</span>
</span> </span>
<span v-else> <span v-else>
<span v-if="scope.row.conf != null && scope.row.conf != ''">{{ scope.row.conf <span v-if="scope.row.conf != null && scope.row.conf != ''">{{
}}</span> scope.row.conf
}}</span>
<span v-else>--</span> <span v-else>--</span>
</span> </span>
</template> </template>
@ -838,8 +849,10 @@ function retrunClick() {
<el-table-column label="操作" width="100px" align="center"> <el-table-column label="操作" width="100px" align="center">
<template #default="scope"> <template #default="scope">
<div style="display: flex;justify-content: space-around;"> <div style="display: flex;justify-content: space-around;">
<img style="cursor:pointer ;" src="@/assets/tableIcon/patrolmonitor/u3303.png" <img style="cursor:pointer ;"
v-if="tableData.examineFlag != 1" @click="correct(scope.row)" title="修正"> src="@/assets/tableIcon/patrolmonitor/u3303.png"
v-if="tableData.examineFlag != 1" @click="correct(scope.row)"
title="修正">
<img src="@/assets/tableIcon/patrolmonitor/u3303_disabled.png" v-else <img src="@/assets/tableIcon/patrolmonitor/u3303_disabled.png" v-else
title="修正"> title="修正">
<!-- <div class="button-style" v-if="tableData.examineFlag != 1" @click="correct(scope.row)">修正</div> <!-- <div class="button-style" v-if="tableData.examineFlag != 1" @click="correct(scope.row)">修正</div>
@ -853,7 +866,8 @@ function retrunClick() {
style="display: inline-block;margin-left: 15px;">{{ tableDataHover.areaName style="display: inline-block;margin-left: 15px;">{{ tableDataHover.areaName
}}</span></div> }}</span></div>
<div style="margin-top: 10px;"><span>间隔名称 :</span><span <div style="margin-top: 10px;"><span>间隔名称 :</span><span
style="display: inline-block;margin-left: 15px;">{{ tableDataHover.bayName }}</span> style="display: inline-block;margin-left: 15px;">{{ tableDataHover.bayName
}}</span>
</div> </div>
<div style="margin-top: 10px;"><span>点位名称 :</span><span <div style="margin-top: 10px;"><span>点位名称 :</span><span
style="display: inline-block;margin-left: 15px;">{{ tableDataHover.deviceName style="display: inline-block;margin-left: 15px;">{{ tableDataHover.deviceName
@ -861,15 +875,18 @@ function retrunClick() {
<div style="margin-top: 10px;"><span style="display: inline-block;">识别类型 :</span><span <div style="margin-top: 10px;"><span style="display: inline-block;">识别类型 :</span><span
style="display: inline-block;margin-left: 15px;" style="display: inline-block;margin-left: 15px;"
v-if="tableDataHover.desc != null && tableDataHover.desc != ''">{{ v-if="tableDataHover.desc != null && tableDataHover.desc != ''">{{
tableDataHover.desc }}</span><span style="display: inline-block;margin-left: 15px;" tableDataHover.desc }}</span><span
v-else>--</span></div> style="display: inline-block;margin-left: 15px;" v-else>--</span></div>
<div style="margin-top: 10px;"><span>巡视时间 :</span><span <div style="margin-top: 10px;"><span>巡视时间 :</span><span
style="display: inline-block;margin-left: 15px;">{{ tableDataHover.time }}</span> style="display: inline-block;margin-left: 15px;">{{ tableDataHover.time
}}</span>
</div> </div>
<div style="margin-top: 10px;"><span style="display: inline-block;margin-left: 17px;">实物id <div style="margin-top: 10px;"><span
style="display: inline-block;margin-left: 17px;">实物id
:</span><span style="display: inline-block;margin-left: 15px;" :</span><span style="display: inline-block;margin-left: 15px;"
v-if="tableDataHover.materialId">{{ tableDataHover.materialId }}</span><span v-if="tableDataHover.materialId">{{ tableDataHover.materialId }}</span><span
style="display: inline-block;margin-left: 15px;width: 70%;" v-else>--</span></div> style="display: inline-block;margin-left: 15px;width: 70%;" v-else>--</span>
</div>
<div style="margin-top: 10px;"> <div style="margin-top: 10px;">
<span style="display: block;margin-left: 33px;">阈值 :</span> <span style="display: block;margin-left: 33px;">阈值 :</span>
<span style="display:block;margin-left:80px;margin-top: -23px;" <span style="display:block;margin-left:80px;margin-top: -23px;"
@ -882,10 +899,12 @@ function retrunClick() {
tableDataHover.sameMin }}-{{ tableDataHover.sameMax }}</span></span> tableDataHover.sameMin }}-{{ tableDataHover.sameMax }}</span></span>
<span <span
style="display: inline-block;width: 50%;text-align: left;"><span>严重</span><span>{{ style="display: inline-block;width: 50%;text-align: left;"><span>严重</span><span>{{
tableDataHover.seriousMin }}-{{ tableDataHover.seriousMax }}</span></span> tableDataHover.seriousMin }}-{{ tableDataHover.seriousMax
}}</span></span>
<span <span
style="display: inline-block;width: 50%;text-align: left;"><span>危急</span><span>{{ style="display: inline-block;width: 50%;text-align: left;"><span>危急</span><span>{{
tableDataHover.criticalMin }}-{{ tableDataHover.criticalMax }}</span></span> tableDataHover.criticalMin }}-{{ tableDataHover.criticalMax
}}</span></span>
</span> </span>
<span v-else style="display:block;margin-left:88px;margin-top: -23px;"> <span v-else style="display:block;margin-left:88px;margin-top: -23px;">
-- --
@ -902,7 +921,7 @@ function retrunClick() {
</div> </div>
</div> </div>
<div class="all-right"> <div class="all-right">
<div style="width: 100%; height: 49%;"> <div class="alarmInfo-visitation">
<div style="display:flex;align-items: center;"> <div style="display:flex;align-items: center;">
<div class="alarmInfo-line"></div> <div class="alarmInfo-line"></div>
<div class="alarmInfo-title "> <span class="fontFamily">实时视频</span></div> <div class="alarmInfo-title "> <span class="fontFamily">实时视频</span></div>
@ -918,8 +937,8 @@ function retrunClick() {
text-align: center; text-align: center;
padding-top: 10px;">暂无视频</div> padding-top: 10px;">暂无视频</div>
</div> </div>
<JessibucaPlayer v-if="alarmInfo.patroldeviceCode != undefined" ref="recordVideoPlayer" :_uid="101" <JessibucaPlayer v-if="alarmInfo.patroldeviceCode != undefined" ref="recordVideoPlayer"
:devicechannelInfo="devicechannelInfo" :visible.sync="true" :videoUrl="videoUrl" :_uid="101" :devicechannelInfo="devicechannelInfo" :visible.sync="true" :videoUrl="videoUrl"
:videofmp4="videofmp4" :hasAudio="false" fluent autoplay live @closeVideo="closeVideo"> :videofmp4="videofmp4" :hasAudio="false" fluent autoplay live @closeVideo="closeVideo">
</JessibucaPlayer> </JessibucaPlayer>
</div> </div>
@ -928,7 +947,9 @@ function retrunClick() {
<div class="alarmInfo-visitation"> <div class="alarmInfo-visitation">
<div style="display: flex;align-items: center;justify-content: space-between;"> <div style="display: flex;align-items: center;justify-content: space-between;">
<div style="display:flex;align-items: center;height: 40px;padding-left: 10px;"> <div style="display:flex;align-items: center;height: 40px;padding-left: 10px;">
<div class="alarmInfo-title"> <span class="fontFamily" style="color:#ffffff">巡视结果</span> </div> <div class="alarmInfo-line"></div>
<div class="alarmInfo-title"> <span class="fontFamily" style="color:#0099ff">巡视结果</span>
</div>
</div> </div>
<div style="display: flex;font-size: 14px;padding-right:15px"> <div style="display: flex;font-size: 14px;padding-right:15px">
<div :class="tabs == 1 ? 'historical' : 'change'" @click="tabsClick(2)"> <div :class="tabs == 1 ? 'historical' : 'change'" @click="tabsClick(2)">
@ -996,8 +1017,8 @@ function retrunClick() {
</div> </div>
</div> </div>
<!-- 修正弹窗 --> <!-- 修正弹窗 -->
<Eldialog v-if="Explicit == 1 && conclusion == 1" :title="'修正'" :zIndex="2000" :width="'600px'" :height="'600px'" <Eldialog v-if="Explicit == 1 && conclusion == 1" :title="'修正'" :zIndex="2000" :width="'600px'"
@before-close="handleClose"> :height="'600px'" @before-close="handleClose">
<template v-slot:PopFrameContent> <template v-slot:PopFrameContent>
<div v-if="conclusion == 1"> <div v-if="conclusion == 1">
<!-- <div class="notification-title">修正</div> --> <!-- <div class="notification-title">修正</div> -->
@ -1010,14 +1031,15 @@ function retrunClick() {
</div> </div>
<div style="color: #fff;margin-top:10px;"><span>点位名称&nbsp:&nbsp&nbsp{{ <div style="color: #fff;margin-top:10px;"><span>点位名称&nbsp:&nbsp&nbsp{{
notificationText.deviceName notificationText.deviceName
}}</span></div> }}</span></div>
<div style="color: #fff;margin-top:10px;"><span>巡视结果&nbsp:&nbsp&nbsp <div style="color: #fff;margin-top:10px;"><span>巡视结果&nbsp:&nbsp&nbsp
<span <span
v-if="notificationText.valueType == 'meter' || notificationText.valueType == 'infrared'"> v-if="notificationText.valueType == 'meter' || notificationText.valueType == 'infrared'">
<span v-if="notificationText.analysisResult == '异常'" <span v-if="notificationText.analysisResult == '异常'"
style="color: red;font-size: 16px;font-weight: bold;"> {{ style="color: red;font-size: 16px;font-weight: bold;"> {{
notificationText.value }} {{ notificationText.unit }}</span> notificationText.value }} {{ notificationText.unit }}</span>
<span v-else> {{ notificationText.value }} {{ notificationText.unit }}</span> <span v-else> {{ notificationText.value }} {{ notificationText.unit
}}</span>
</span> </span>
<span v-else> <span v-else>
<span v-if="notificationText.conf != null && notificationText.conf != ''">{{ <span v-if="notificationText.conf != null && notificationText.conf != ''">{{
@ -1054,8 +1076,9 @@ function retrunClick() {
</el-input> </el-input>
</span> </span>
</div> </div>
<div style="color: #fff;margin-top:20px;"><span class="large">修正结论&nbsp&nbsp<el-radio-group <div style="color: #fff;margin-top:20px;"><span
v-model="form.reviseValid" class="ml-4"> class="large">修正结论&nbsp&nbsp<el-radio-group v-model="form.reviseValid"
class="ml-4">
<el-radio label="0" size="large">正常</el-radio> <el-radio label="0" size="large">正常</el-radio>
<el-radio label="1" size="large">异常</el-radio> <el-radio label="1" size="large">异常</el-radio>
</el-radio-group></span> </el-radio-group></span>
@ -1077,8 +1100,8 @@ function retrunClick() {
</Eldialog> </Eldialog>
<!-- 审核弹窗 --> <!-- 审核弹窗 -->
<Eldialog v-if="Explicit == 1 && conclusion == 2" :title="'审核结论'" :zIndex="2000" :width="'540px'" :height="'600px'" <Eldialog v-if="Explicit == 1 && conclusion == 2" :title="'审核结论'" :zIndex="2000" :width="'540px'"
@before-close="handleClose"> :height="'600px'" @before-close="handleClose">
<template v-slot:PopFrameContent> <template v-slot:PopFrameContent>
<div class="notification-body"> <div class="notification-body">
<div style="height: 190px;padding: 0px 40px;font-size: 14px;color: #00F9A2;"> <div style="height: 190px;padding: 0px 40px;font-size: 14px;color: #00F9A2;">
@ -1195,7 +1218,7 @@ function retrunClick() {
font-weight: 700; font-weight: 700;
font-style: normal; font-style: normal;
font-size: 16px; font-size: 16px;
color: #fff; color: #0099ff;
} }
.video-box { .video-box {
@ -1209,11 +1232,13 @@ function retrunClick() {
} }
.alarmInfo-visitation { .alarmInfo-visitation {
padding-top: 5px;
width: 100%; width: 100%;
height: 50%; height: 49%;
background: url(@/assets/patrolmonitor/xsjk_640.png); // riis-web/src/assets/navigation/sy_zsb.png
background: url(@/assets/navigation/sy_zsb.png);
background-size: 100% 100%; background-size: 100% 100%;
box-sizing: border-box;
padding: 10px;
} }
.alarmimg { .alarmimg {
@ -1463,5 +1488,3 @@ function retrunClick() {
display: none; display: none;
} }
</style> </style>

View File

@ -63,20 +63,18 @@ function getNowFormatDate() {
} }
// //
const tableRowClassName = ({ const tableRowClassName = ({
row, row,
rowIndex, rowIndex,
}: { }: {
row: any row: any
rowIndex: number rowIndex: number
}) => { }) => {
if (row.lastItem == 'Now') { if (rowIndex % 2 === 0) {
return 'lastItem-row' return 'warning-row'
} else if (rowIndex % 2 === 0) { } else if (rowIndex % 2 === 1) {
// return 'warning-row' return 'success-row'
} else if (rowIndex % 2 === 1) { }
// return 'success-row' return ''
}
return ''
} }
// //
@ -346,6 +344,12 @@ function handleClose(){
function retrunClick(){ function retrunClick(){
isPatrolDetails.value = true; isPatrolDetails.value = true;
} }
function removePercentSign(str:any) {
if (str.includes("%")) {
str = str.replace("%", "");
}
return str;
}
</script> </script>
<template> <template>
<div> <div>
@ -467,10 +471,10 @@ function retrunClick(){
</div> </div>
<!-- <img src="@/assets/MenuIcon/xsri_lb1.png" alt="" style="width:100%;position: absolute;"> --> <!-- <img src="@/assets/MenuIcon/xsri_lb1.png" alt="" style="width:100%;position: absolute;"> -->
<!-- <div style="position: relative;"> --> <!-- <div style="position: relative;"> -->
<el-table :data="tableData" class="PatrolMonitoring" <el-table :data="tableData" class="PatrolMonitoring" :row-class-name="tableRowClassName"
style="width: 99%;margin:auto;position: relative; height:calc(79vh); overflow: auto;margin-top: 10px; " style="width: 99%;margin:auto;position: relative; height:calc(79vh); overflow: auto;margin-top: 10px; "
stripe :header-cell-style="tableBg"> stripe :header-cell-style="tableBg">
<el-table-column type="index" align="center" label="序号" width="50px" /> <el-table-column type="index" align="center" label="序号" width="60px" />
<el-table-column prop="taskName" label="任务名称" min-width="140px" align="left" /> <el-table-column prop="taskName" label="任务名称" min-width="140px" align="left" />
<el-table-column prop="taskType" label="任务类型" width="100px" align="center"> <el-table-column prop="taskType" label="任务类型" width="100px" align="center">
<template #default="scope"> <template #default="scope">
@ -493,7 +497,7 @@ function retrunClick(){
</el-table-column> </el-table-column>
<el-table-column prop="taskProgress" label="进度" align="center" width="100px"> <el-table-column prop="taskProgress" label="进度" align="center" width="100px">
<template #default="scope"> <template #default="scope">
<el-progress :text-inside="true" :stroke-width="18" :percentage="scope.row.taskProgress" status="success" /> <el-progress :text-inside="true" :stroke-width="18" :percentage="Number(removePercentSign(scope.row.taskProgress))" status="success" />
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="taskState" label="状态" align="center" width="100px"> <el-table-column prop="taskState" label="状态" align="center" width="100px">
@ -510,45 +514,31 @@ function retrunClick(){
</el-table-column> </el-table-column>
<el-table-column prop="description" label="巡视结果" width="140px" align="center"> <el-table-column prop="description" label="巡视结果" width="140px" align="center">
<template #default="scope"> <template #default="scope">
<span>成功{{ scope.row.result.successCount }}</span><span>失败{{ scope.row.result.failCount }}</span><br /> <span>成功{{ scope.row.deviceDeforeNum - scope.row.deviceFailureNum }}</span><span>失败{{ scope.row.deviceFailureNum }}</span><br />
<span>正常{{ scope.row.result.normalCount }}</span><span style="color: #FF3300;">异常{{ <span>正常{{ scope.row.deviceDeforeNum - scope.row.deviceFailureNum - scope.row.deviceUnusualnum }}</span><span style="color: #FF3300;">异常{{scope.row.deviceUnusualnum }}</span>
scope.row.result.abnormalCount }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" align="center" width="140px"> <el-table-column label="操作" align="center" width="240px">
<template #default="scope"> <template #default="scope">
<div style="display: flex; justify-content: space-between;align-items: center;"> <div style="display: flex; justify-content: center;">
<img src="@/assets/tableIcon/patrolmonitor/u2219.png" alt="" title="立即执行" class="cursorpointer" <div v-hasPerm="['task:runnow']" v-if="scope.row.taskState == 0" class="button-style"
v-hasPerm="['task:runnow']" v-if="scope.row.taskState == 0" @click="Operate(scope.row, 'runNow')">立即执行</div>
@click="Operate(scope.row, 'runNow')"> <div v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 3" class="button-style"
<img src="@/assets/tableIcon/patrolmonitor/u2219_disabled.png" alt="" title="立即执行" @click="Operate(scope.row, 'resume')">恢复</div>
v-hasPerm="['task:runnow']" v-else> <div v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 2 || scope.row.taskState == 0"
class="button-style" @click="Operate(scope.row, 'pause')">暂停</div>
<div v-hasPerm="['task:shutdown']" v-if="scope.row.taskState == 0 || scope.row.taskState == 3"
class="button-style" @click="Operate(scope.row, 'stop')">终止</div>
<div @click="detailed(scope.row)" class="button-style"><router-link :to="{
<img class="cursorpointer" src="@/assets/tableIcon/patrolmonitor/u2225.png" v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 2 || scope.row.taskState == 0" path: '/patrolDetails',
title="暂停" @click="Operate(scope.row, 'pause')"> query: {
<img v-else src="@/assets/tableIcon/patrolmonitor/u2225_disabled.png" v-hasPerm="['task:suspend']" taskTodoId: scope.row.taskTodoId,
title="暂停"> isStationFlag: scope.row.isStationFlag
<img class="cursorpointer" src="@/assets/tableIcon/patrolmonitor/u2228.png" v-hasPerm="['task:suspend']" v-if="scope.row.taskState == 3" title="恢复" }
@click="Operate(scope.row, 'resume')"> }" style="color:#0099ff ;">详情</router-link>
</div>
<img v-else src="@/assets/tableIcon/patrolmonitor/u2228_disabled.png" v-hasPerm="['task:suspend']" title="恢复">
<img class="cursorpointer" src="@/assets/tableIcon/patrolmonitor/u2231.png"
v-hasPerm="['task:shutdown']"
v-if="scope.row.taskState == 0 || scope.row.taskState == 3 "
@click="Operate(scope.row, 'stop')"
title="终止" >
<img v-else src="@/assets/tableIcon/patrolmonitor/u2231_disabled.png"
v-hasPerm="['task:shutdown']"
title="终止" >
<img class="cursorpointer" src="@/assets/tableIcon/patrolmonitor/u2222.png"
@click="detailed(scope.row)"
title="详情" >
</div> </div>
</template> </template>
</el-table-column> </el-table-column>

View File

@ -3040,8 +3040,9 @@ function nextPage() {
z-index: 1001; z-index: 1001;
width: 320px; width: 320px;
height: calc(100% - 18px); height: calc(100% - 18px);
background: url('@/assets/3d/spjk_ytbj.png') no-repeat; background: url('@/assets/navigation/sanwei.png') no-repeat;
background-size: 100% 100%; background-size: 100% 100%;
background-color: #001b4a;
.THREE-right-list-title { .THREE-right-list-title {
width: 100%; width: 100%;