2025-5-12讨论bug更改
This commit is contained in:
parent
fe5c319357
commit
172404f84d
Binary file not shown.
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 7.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 592 B After Width: | Height: | Size: 416 B |
@ -540,9 +540,39 @@ export default {
|
||||
eventcallbacK: function (type, message) {
|
||||
},
|
||||
fullscreenSwich: function () {
|
||||
let isFull = this.isFullscreen()
|
||||
jessibucaPlayer[this._uid].setFullscreen(!isFull)
|
||||
this.fullscreen = !isFull;
|
||||
const userStore = useUserStore()
|
||||
if (this.devicechannelInfo) {
|
||||
if(this.zhu){
|
||||
let isFull = this.isFullscreen()
|
||||
jessibucaPlayer[this._uid].setFullscreen(!isFull)
|
||||
this.fullscreen = !isFull;
|
||||
return
|
||||
}
|
||||
if (this.fullscreen) {
|
||||
axios.get(userStore.webApiMonitorUrl + '/api/play/stop/' + this.devicechannelInfo.deviceId + '/' + this.devicechannelInfo.channelId, {}).then((res) => { })
|
||||
axios.get(userStore.webApiMonitorUrl + '/api/play/start/' + this.devicechannelInfo.deviceId + '/' + this.devicechannelInfo.channelId + '_sub', {}).then((res) => {
|
||||
this.play(res.data.data.ws_flv)
|
||||
let isFull = this.isFullscreen()
|
||||
jessibucaPlayer[this._uid].setFullscreen(!isFull)
|
||||
this.fullscreen = !isFull;
|
||||
})
|
||||
} else {
|
||||
axios.get(userStore.webApiMonitorUrl + '/api/play/stop/' + this.devicechannelInfo.deviceId + '/' + this.devicechannelInfo.channelId + '_sub', {}).then((res) => { })
|
||||
axios.get(userStore.webApiMonitorUrl + '/api/play/start/' + this.devicechannelInfo.deviceId + '/' + this.devicechannelInfo.channelId, {}).then((res) => {
|
||||
this.play(res.data.data.ws_flv)
|
||||
let isFull = this.isFullscreen()
|
||||
jessibucaPlayer[this._uid].setFullscreen(!isFull)
|
||||
this.fullscreen = !isFull;
|
||||
|
||||
})
|
||||
}
|
||||
} else {
|
||||
let isFull = this.isFullscreen()
|
||||
jessibucaPlayer[this._uid].setFullscreen(!isFull)
|
||||
this.fullscreen = !isFull;
|
||||
}
|
||||
|
||||
// if(this.fullscreen
|
||||
},
|
||||
isFullscreen: function () {
|
||||
return document.fullscreenElement ||
|
||||
|
@ -480,7 +480,26 @@ audio::-webkit-media-controls-current-time-display,
|
||||
audio::-webkit-media-controls-time-remaining-display {
|
||||
color: #fff;
|
||||
}
|
||||
/* 轨道 */
|
||||
audio::-webkit-media-controls-timeline::before {
|
||||
content: '';
|
||||
display: block;
|
||||
height: 6px;
|
||||
background-color: #ff0000; /* 已播放部分颜色 */
|
||||
}
|
||||
|
||||
/* 滑块 */
|
||||
audio::-webkit-media-controls-timeline::after {
|
||||
content: '';
|
||||
display: block;
|
||||
width: 12px;
|
||||
height: 12px;
|
||||
background-color: #ff0000;
|
||||
border-radius: 50%;
|
||||
position: relative;
|
||||
top: -6px;
|
||||
left: 0;
|
||||
}
|
||||
/* Firefox兼容样式 */
|
||||
@-moz-document url-prefix() {
|
||||
audio {
|
||||
|
@ -9,13 +9,22 @@
|
||||
:class="{ 'nav-active': activeIndex == index }" @click.stop="navClick(item, index)">
|
||||
<div class="nav-imgtitle">{{ item.name }}</div>
|
||||
<div class="nav-sonbox" v-if="item.children != undefined && item.hide == true">
|
||||
<div class="nav-son-list" v-for="(items, indexs) in item.children"
|
||||
@click.stop="navSonClick(item, index, items)">{{ items.name }}
|
||||
<div v-for="(items, indexs) in item.children">
|
||||
<div class="nav-son-list" v-if="items.name != '异常告警管理'" @click.stop="navSonClick(item, index, items)">
|
||||
{{ items.name }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="nav-right-box">
|
||||
<div class="header-information" @click="alarmInfoClick">
|
||||
<el-badge :value="alarmCount" :max="99" class="item" v-if="alarmCount != 0">
|
||||
<div class="header-informationImg"></div>
|
||||
</el-badge>
|
||||
<div class="header-informationImg" v-else></div>
|
||||
</div>
|
||||
<div class="nav-right-text" style="margin-right: 20px;">
|
||||
<div class="header-left-time" style="padding: 0;">用户名:{{ userStore.username }}</div>
|
||||
<!-- <div class="header-left-time" style="padding-top: 10px;">变电站:{{ userStore.regionName }}</div> -->
|
||||
@ -99,12 +108,12 @@ function dateFormat(row: any) {
|
||||
}
|
||||
function alarmInfoClick() {
|
||||
router.push(`/task/alarmInfo/index`)
|
||||
let item = {
|
||||
name: "告警核认",
|
||||
opturl: "/task/alarmInfo/index"
|
||||
}
|
||||
activeSonIndex.value = 2
|
||||
navSonClick(navlist.value[2], 2, item)
|
||||
// let item = {
|
||||
// name: "告警核认",
|
||||
// opturl: "/task/alarmInfo/index"
|
||||
// }
|
||||
// activeSonIndex.value = 2
|
||||
// navSonClick(navlist.value[2], 2, item)
|
||||
}
|
||||
function navSonClick(row: any, index: any, item: any) {
|
||||
isElicon.value = true
|
||||
@ -397,7 +406,7 @@ watch(() => props.CloseNav, (newValue, oldValue) => {
|
||||
background-size: 100% 100%;
|
||||
width: 100%;
|
||||
height: 62px;
|
||||
z-index:99999 !important;
|
||||
z-index: 99999 !important;
|
||||
|
||||
.times {
|
||||
font-family: '微软雅黑';
|
||||
@ -470,7 +479,7 @@ watch(() => props.CloseNav, (newValue, oldValue) => {
|
||||
margin-left: -12px;
|
||||
position: absolute;
|
||||
top: 40px;
|
||||
z-index:9999;
|
||||
z-index: 9999;
|
||||
|
||||
.nav-son-list {
|
||||
width: 100%;
|
||||
@ -608,8 +617,8 @@ watch(() => props.CloseNav, (newValue, oldValue) => {
|
||||
background: url(@/assets/monitorsystem/top_gj.png);
|
||||
|
||||
.header-informationImg {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: url(@/assets/monitorsystem/top_gj1.png);
|
||||
}
|
||||
|
||||
@ -918,12 +927,12 @@ watch(() => props.CloseNav, (newValue, oldValue) => {
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
font-family: "Arial Normal", "Arial";
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
line-height: 31px;
|
||||
color: #fff;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
line-height: 31px;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.homeImgActive {
|
||||
@ -936,7 +945,37 @@ watch(() => props.CloseNav, (newValue, oldValue) => {
|
||||
align-items: center;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
color:#ffffff;
|
||||
color: #ffffff;
|
||||
|
||||
.header-information {
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 25px;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
// background: url(@/assets/monitorsystem/top_gj.png);
|
||||
|
||||
.header-informationImg {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
background: url(@/assets/monitorsystem/top_gj1.png);
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
|
||||
.header-informationDian {
|
||||
position: absolute;
|
||||
top: 5px;
|
||||
left: 15px;
|
||||
width: 6px;
|
||||
height: 6px;
|
||||
border-radius: 50%;
|
||||
background: red;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.iscursorinitial {
|
||||
|
@ -123,7 +123,7 @@ function closeClick() {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
z-index: 98;
|
||||
z-index: 2000;
|
||||
width: 100%;
|
||||
transition: width 0.28s;
|
||||
// background: #ffffff;
|
||||
|
@ -5282,7 +5282,7 @@ ws1.onclose = () => {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #131a25;
|
||||
background: #001b4a;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
@ -443,6 +443,7 @@ const getacaType: any = ref()
|
||||
const Metertype = ref()
|
||||
const auxitype = ref()
|
||||
function addClick() {
|
||||
activeName.value = 'first'
|
||||
threshold.value = ''
|
||||
beforName.value = ''
|
||||
info.value = {
|
||||
@ -525,6 +526,8 @@ const getacaTypeBayId = ref()
|
||||
const PictureAnalysisType = ref()
|
||||
//图像缺陷分析类型
|
||||
const PictureDefectAnalysisType = ref()
|
||||
//声纹分析类型
|
||||
const voiceAnalysisTypeList = ref()
|
||||
//图像判别分析类型
|
||||
const PictureDiscriminateAnalysisType = ref()
|
||||
//数据来源
|
||||
@ -565,7 +568,10 @@ function notification() {
|
||||
getDeviceByType(paramsect).then((res: any) => {
|
||||
PictureDefectAnalysisType.value = res.data
|
||||
})
|
||||
|
||||
//获取声纹分析类型
|
||||
getDeviceByType({ dictcode: 'VoiceAnalysisType' }).then((res: any) => {
|
||||
voiceAnalysisTypeList.value = res.data
|
||||
})
|
||||
//获取图像分析类型
|
||||
const paramsscr = {
|
||||
dictcode: 'PictureDiscriminateAnalysisType'
|
||||
@ -660,6 +666,7 @@ function mainChange(row: any) {
|
||||
const deviceIdText = ref()
|
||||
const miannDeviceId = ref()
|
||||
function handleEdit(row: any) {
|
||||
activeName.value = 'first'
|
||||
duration.value = row.duration
|
||||
threshold.value = ''
|
||||
beforName.value = ''
|
||||
@ -740,7 +747,7 @@ function handleEdit(row: any) {
|
||||
droPoint.value = JSON.parse(infoall.outsideAngle)
|
||||
} else if (infoall.recognitionTypeList == "5") {
|
||||
infoall.decibel = JSON.parse(infoall.outsideAngle).decibel
|
||||
infoall.frequency = JSON.parse(infoall.outsideAngle).frequency
|
||||
infoall.frequency = JSON.parse(infoall.outsideAngle).frequency
|
||||
} else {
|
||||
arrdata.value = JSON.parse(infoall.outsideAngle)
|
||||
}
|
||||
@ -1344,10 +1351,10 @@ const vMove = {
|
||||
}
|
||||
const activeName = ref('first')
|
||||
const handleClick1 = (tab: TabsPaneContext, event: Event) => {
|
||||
console.log(tab.props.name, event);
|
||||
if(tab.props.name == 'three'){
|
||||
getData1()
|
||||
}
|
||||
console.log(tab.props.name, event);
|
||||
if (tab.props.name == 'three') {
|
||||
getData1()
|
||||
}
|
||||
}
|
||||
|
||||
const isGaoliang: any = ref("")
|
||||
@ -1392,11 +1399,10 @@ function getData1() {
|
||||
}
|
||||
const multipleTableRef = ref()
|
||||
function handleSelectionChange(val: any) {
|
||||
if (val.length > 1) {
|
||||
if (val.length == 2) {
|
||||
val.pop()
|
||||
multipleTableRef.value!.toggleRowSelection(val[0], undefined)
|
||||
}
|
||||
if (val[0]) {
|
||||
}else{
|
||||
vicode.value[0].patroldevice_name = val[0].patroldeviceName
|
||||
vicode.value[0].patroldevice_code = val[0].patroldeviceCode
|
||||
}
|
||||
@ -1413,7 +1419,7 @@ function handleSelectionChange(val: any) {
|
||||
<el-tabs v-model="activeName" @tab-click="handleClick1">
|
||||
<el-tab-pane label="基本信息" name="first">
|
||||
<el-form ref="infoForm" :model="info" label-width="140px"
|
||||
style="display: flex; flex-wrap: wrap; margin: 5px;height:593px;" :rules="rules">
|
||||
style="display: flex; flex-wrap: wrap; margin: 5px;" :rules="rules">
|
||||
<el-form-item label="巡视点位编号" style="width:50%" prop="deviceCode">
|
||||
<el-input v-model="info.deviceCode" style="width: 90%;margin-left: 8px;"
|
||||
placeholder="请输入巡视点位编号"></el-input>
|
||||
@ -1519,6 +1525,20 @@ function handleSelectionChange(val: any) {
|
||||
:label="item.dictname" :value="item.itemcode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="声纹设备缺陷类型" style="width:50%">
|
||||
<el-select v-model="info.voiceAnalysisTypeList" placeholder="请选择"
|
||||
:disabled="info.recognitionTypeList != 5" style="width: 90%;margin-left: 8px;"
|
||||
multiple clearable>
|
||||
<el-option v-for="item in voiceAnalysisTypeList" :key="item.id"
|
||||
:label="item.dictname" :value="item.itemcode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="相位" style="width:50%">
|
||||
<el-select v-model="info.phase" style="width:90%" clearable>
|
||||
<el-option v-for="item in DevicePhase" :key="item.id" :label="item.dictname"
|
||||
:value="item.itemcode" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="正常范围下限" prop="lowerValue" style="width:50%">
|
||||
<el-input v-model="info.lowerValue" style="width: 90%;margin-left: 8px;"
|
||||
placeholder="请输入正常范围下限"></el-input>
|
||||
@ -1569,12 +1589,9 @@ function handleSelectionChange(val: any) {
|
||||
<div style="width:90%;display:flex;">
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
</el-form>
|
||||
<span class="dialog-footer"
|
||||
style="width: 100%;margin: auto; display: flex;display: -webkit-flex; justify-content: center;-webkit-justify-content: center;margin-top: 10px;">
|
||||
style="width: 100%;margin: auto; display: flex;display: -webkit-flex; justify-content: center;-webkit-justify-content: center;">
|
||||
|
||||
<div class="details-button" @click="handleClose">取消</div>
|
||||
<div class="details-button" @click="confirmClick(infoForm)">确定</div>
|
||||
@ -1693,10 +1710,9 @@ function handleSelectionChange(val: any) {
|
||||
<Page :total="total1" v-model:size="paramstable1.size" v-model:current="paramstable1.current"
|
||||
@pagination="getData1()"></Page>
|
||||
<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(infoForm)"
|
||||
style="margin-right: 15px;">保存</el-button>
|
||||
style="width: 100%;margin: auto; display: flex;display: -webkit-flex; justify-content:center;-webkit-justify-content:center;margin-top: 20px;">
|
||||
<div class="details-button" @click="handleClose">取消</div>
|
||||
<div class="details-button" @click="confirmClick(infoForm)">确定</div>
|
||||
</span>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
|
@ -11,6 +11,7 @@ import { getDeviceSignalTree, querySignalDataById, workpage, getHistoricalCurve
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import Page from '@/components/Pagination/page.vue'
|
||||
import * as echarts from 'echarts'
|
||||
import dayjs from 'dayjs'
|
||||
const userStore = useUserStore();
|
||||
//左侧树形控件
|
||||
interface Tree {
|
||||
@ -174,8 +175,17 @@ function drawEchart() {
|
||||
})
|
||||
}
|
||||
onMounted(() => {
|
||||
getTreeData()
|
||||
gettoday()
|
||||
})
|
||||
function gettoday() {
|
||||
// 获取今天0点
|
||||
let startTime = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss')
|
||||
// 获取当前时间
|
||||
let endTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||
detaall.value[0] = startTime
|
||||
detaall.value[1] = endTime
|
||||
getTreeData()
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@ -201,40 +211,7 @@ onMounted(() => {
|
||||
<div>信号信息</div>
|
||||
</div>
|
||||
<div class="text_top">
|
||||
<div class="text_top_title">
|
||||
<div></div>所属网关机信息
|
||||
</div>
|
||||
<div class="text_top_content" v-loading="dignaloading">
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">设备类型</div>
|
||||
<div class="content_one_text">{{ signaldata.deviceType }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">设备名称</div>
|
||||
<div class="content_one_text">{{ signaldata.deviceName }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">设备型号</div>
|
||||
<div class="content_one_text">{{ signaldata.deviceModel }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">ip地址</div>
|
||||
<div class="content_one_text">{{ signaldata.ipAddr }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">协议类型</div>
|
||||
<div class="content_one_text">{{ signaldata.protocol }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">采集频率</div>
|
||||
<div class="content_one_text">{{ signaldata.frequency }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="text_top">
|
||||
<div class="text_top_title">
|
||||
<div></div>型号信息
|
||||
</div>
|
||||
|
||||
<div class="text_top_content" v-loading="dignaloading">
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">信号编号</div>
|
||||
@ -260,8 +237,26 @@ onMounted(() => {
|
||||
<div class="content_one_title">遥控遥调类型</div>
|
||||
<div class="content_one_text">{{ signaldata.ykytType }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">设备名称</div>
|
||||
<div class="content_one_text">{{ signaldata.deviceName }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">设备型号</div>
|
||||
<div class="content_one_text">{{ signaldata.deviceModel }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">协议类型</div>
|
||||
<div class="content_one_text">{{ signaldata.protocol }}</div>
|
||||
</div>
|
||||
<div class="content_one">
|
||||
<div class="content_one_title">采集频率</div>
|
||||
<div class="content_one_text">{{ signaldata.frequency }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div class="top_left">
|
||||
<div class="title_right">
|
||||
@ -278,14 +273,14 @@ onMounted(() => {
|
||||
<div class="cont_top_right"> <el-button class="searchButton">导出</el-button></div>
|
||||
</div>
|
||||
<div class="cont_bottom">
|
||||
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(30vh);
|
||||
<el-table v-loading="loading" :data="tableData" style="width: 100%;height: calc(33vh);
|
||||
overflow: auto;;margin-bottom: 15px;" row-key="id" default-expand-all
|
||||
:row-class-name="tableRowClassName"
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
|
||||
<el-table-column type="index" label="序号" width="50px" align="center" />
|
||||
<el-table-column label="采集时间" prop="startTime" width="120"></el-table-column>
|
||||
<el-table-column label="监测数值" prop="value"></el-table-column>
|
||||
<el-table-column label="单位" prop="unit"></el-table-column>
|
||||
<el-table-column label="采集时间" prop="startTime" width="160" align="center"></el-table-column>
|
||||
<el-table-column label="监测数值" prop="value" align="center"></el-table-column>
|
||||
<el-table-column label="单位" prop="unit" align="center"></el-table-column>
|
||||
</el-table>
|
||||
<Page :total="total" v-model:size="tableform.size" v-model:current="tableform.current"
|
||||
@pagination="gettabledata()">
|
||||
@ -344,8 +339,10 @@ onMounted(() => {
|
||||
box-sizing: border-box;
|
||||
padding: 20px;
|
||||
|
||||
|
||||
.text_top {
|
||||
width: 100%;
|
||||
margin-top:20px ;
|
||||
|
||||
.text_top_title {
|
||||
display: flex;
|
||||
@ -378,27 +375,26 @@ onMounted(() => {
|
||||
width: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.content_one_title {
|
||||
width: 114px;
|
||||
height: 50px;
|
||||
height: 75px;
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
line-height: 75px;
|
||||
border-top: 1px solid #00397c;
|
||||
border-left: 1px solid #00397c;
|
||||
background-color: #002562;
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
color: #B5D7FF;
|
||||
}
|
||||
|
||||
.content_one_text {
|
||||
width: 267px;
|
||||
height: 50px;
|
||||
height: 75px;
|
||||
text-align: center;
|
||||
line-height: 50px;
|
||||
line-height: 75px;
|
||||
border-top: 1px solid #00397c;
|
||||
border-left: 1px solid #00397c;
|
||||
font-size: 14px;
|
||||
font-size: 16px;
|
||||
color: #B5D7FF;
|
||||
}
|
||||
}
|
||||
|
@ -8,11 +8,14 @@ export default {
|
||||
import { ref, onMounted, onBeforeUnmount, } from 'vue'
|
||||
import Page from '@/components/Pagination/page.vue'
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import { getWeatherLogList,getDeviceWorkData } from "@/api/home";
|
||||
import { getWeatherLogPage,getdeviceworkdata} from "@/api/environmentalMonitoring";
|
||||
import { getWeatherLogList, getDeviceWorkData } from "@/api/home";
|
||||
import { getWeatherLogPage, getdeviceworkdata } from "@/api/environmentalMonitoring";
|
||||
import { getDeviceByType } from "@/api/device";
|
||||
import { getHistoricalCurve } from "@/api/datasurvey/index";
|
||||
import dayjs from 'dayjs'
|
||||
import * as echarts from 'echarts'
|
||||
const userStore = useUserStore();
|
||||
const tableData = ref([])
|
||||
const tableData: any = ref([])
|
||||
const treeloading = ref(false)
|
||||
const total = ref()
|
||||
//控制行变色
|
||||
@ -32,44 +35,49 @@ const tableRowClassName = ({
|
||||
}
|
||||
|
||||
//环境设备获取
|
||||
const environment_params = ref({
|
||||
current:1,
|
||||
size:10,
|
||||
startDate:'',
|
||||
endDate:'',
|
||||
patroldeviceName:'',
|
||||
stationId:userStore.stationId,
|
||||
const environment_params: any = ref({
|
||||
current: 1,
|
||||
size: 10,
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
patroldeviceName: '',
|
||||
stationId: userStore.stationId,
|
||||
})
|
||||
const hutotal:any = ref('')
|
||||
const hutotal: any = ref('')
|
||||
const environment_data = ref([])
|
||||
// const treeloading = ref(false)
|
||||
function getEnvironment() {
|
||||
|
||||
if(tableData.value){
|
||||
if (tableData.value) {
|
||||
environment_params.value.startDate = tableData.value[0]
|
||||
environment_params.value.endDate = tableData.value[1]
|
||||
}else{
|
||||
} else {
|
||||
environment_params.value.startDate = ''
|
||||
environment_params.value.endDate = ''
|
||||
}
|
||||
environment_params.value.signalId = signalId.value
|
||||
getdeviceworkdata(environment_params.value).then((res: any) => {
|
||||
environment_data.value = res.data.records
|
||||
environment_params.value.size = res.data.size
|
||||
environment_params.value.current = res.data.current
|
||||
hutotal.value = res.data.total
|
||||
|
||||
})
|
||||
}
|
||||
function environmentReset(){
|
||||
if( tableData.value){
|
||||
function environmentReset() {
|
||||
environmentInfo
|
||||
if (tableData.value) {
|
||||
tableData.value.length = 0
|
||||
}
|
||||
environment_params.value.patroldeviceName = ''
|
||||
getEnvironment()
|
||||
signalId.value = environmentInfo.value[0].signalId
|
||||
tabs.value = 0
|
||||
// getEnvironment()
|
||||
gettoday()
|
||||
}
|
||||
|
||||
// 环境WebSocket
|
||||
const environment = ref()
|
||||
const environmentInfo:any = ref([])
|
||||
const environmentInfo: any = ref([])
|
||||
// const ws1 = new WebSocket(userStore.wsApiBaseUrl + '/websocket/vibe_run_data_' + userStore.userId);
|
||||
// function setupWebSocket() {
|
||||
|
||||
@ -113,20 +121,19 @@ const environmentInfo:any = ref([])
|
||||
|
||||
// }
|
||||
function getInit() {
|
||||
let params = {
|
||||
stationId: userStore.stationId
|
||||
}
|
||||
getDeviceWorkData(params).then((res: any) => {
|
||||
let params = {
|
||||
stationId: userStore.stationId
|
||||
}
|
||||
getDeviceWorkData(params).then((res: any) => {
|
||||
|
||||
environmentInfo.value = res.data
|
||||
})
|
||||
environmentInfo.value = res.data
|
||||
})
|
||||
|
||||
}
|
||||
onMounted(() => {
|
||||
getInit()
|
||||
//setupWebSocket()
|
||||
getEnvironment()
|
||||
gettype()
|
||||
gettoday()
|
||||
getInit()
|
||||
|
||||
});
|
||||
// onBeforeUnmount(() => {
|
||||
// if (ws1 != null) {
|
||||
@ -142,65 +149,122 @@ function currency(list: any, itemcode: any) {
|
||||
})
|
||||
return dictname
|
||||
}
|
||||
const EquipmentType:any= ref([])
|
||||
function gettype(){
|
||||
const EquipmentType: any = ref([])
|
||||
function gettype() {
|
||||
getDeviceByType({ dictcode: 'system' }).then((res: any) => {
|
||||
EquipmentType.value = res.data
|
||||
signalId.value = res.data[0].signalId
|
||||
getEnvironment()
|
||||
getechartdata()
|
||||
})
|
||||
}
|
||||
const tabs = ref(0)
|
||||
const signalId = ref('')
|
||||
function getscenetable(index: any, signalId1: any) {
|
||||
tabs.value = index
|
||||
signalId.value = signalId1
|
||||
getEnvironment()
|
||||
getechartdata()
|
||||
}
|
||||
function gettoday() {
|
||||
// 获取今天0点
|
||||
let startTime = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss')
|
||||
// 获取当前时间
|
||||
let endTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||
tableData.value[0] = startTime
|
||||
tableData.value[1] = endTime
|
||||
gettype()
|
||||
}
|
||||
const echartdata: any = ref({})
|
||||
function getechartdata() {
|
||||
getHistoricalCurve({ signalId: signalId.value }).then((res: any) => {
|
||||
echartdata.value = res.data
|
||||
drawEchart()
|
||||
})
|
||||
function drawEchart() {
|
||||
let myChart = echarts.init(document.getElementById("deviceEachers") as HTMLDivElement);
|
||||
myChart.setOption({
|
||||
title: {
|
||||
text: ''
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis'
|
||||
},
|
||||
legend: {
|
||||
data: ['Step Start', 'Step Middle', 'Step End']
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
toolbox: {
|
||||
feature: {
|
||||
saveAsImage: {}
|
||||
}
|
||||
},
|
||||
xAxis: echartdata.value.xAxis,
|
||||
yAxis: echartdata.value.yAxis,
|
||||
series: echartdata.value.series
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="all_box">
|
||||
<div class="img_box">
|
||||
<div class="img_box_one" v-for="(item,index) in environmentInfo">
|
||||
<div><img :src="`/environment/${item.itemcode}.png`" alt=""></div>
|
||||
<div class="img_box_nei">
|
||||
<div class="img_text1">{{ item.dictname }}</div>
|
||||
<div v-if="item.value != '无'" class="img_text2">{{item.dictname == '风向'? item.value: Number(item.value).toFixed(2)}}<span class="img_unit"> {{ item.unit }}</span></div>
|
||||
<div v-else class="img_text2">{{item.value}}</div>
|
||||
<div class="img_box">
|
||||
<div :class="tabs == index ? 'img_box_one1' : 'img_box_one'" v-for="(item, index) in environmentInfo"
|
||||
@click="getscenetable(index, item.signalId)">
|
||||
<div><img :src="`/environment/${item.itemcode}.png`" alt=""></div>
|
||||
<div class="img_box_nei">
|
||||
<div class="img_text1">{{ item.dictname }}</div>
|
||||
<div v-if="item.value != '无'" class="img_text2">{{ item.dictname == '风向' ? item.value :
|
||||
Number(item.value).toFixed(2) }}<span class="img_unit"> {{ item.unit }}</span></div>
|
||||
<div v-else class="img_text2">{{ item.value }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="display: flex;align-items: center;justify-content: space-between;">
|
||||
<div class="environment_table">
|
||||
<div class="table-title">
|
||||
<div class="table_left">
|
||||
<div class="screenHomepage">
|
||||
<el-date-picker class="screenHomepage" popper-class="elDatePicker"
|
||||
@change="getEnvironment()" style="width: 400px; margin-right: 10px;" v-model="tableData"
|
||||
type="datetimerange" range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
value-format="YYYY-MM-DD HH:mm:ss" format="YYYY-MM-DD HH:mm:ss" />
|
||||
</div>
|
||||
<el-button class="searchButton" @click="getEnvironment()">搜索</el-button>
|
||||
<el-button class="searchButton" @click="environmentReset()">重置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="environment_table">
|
||||
<div class="table-title">
|
||||
<div class="table_left">
|
||||
<div class="screenHomepage">
|
||||
<el-input v-model="environment_params.patroldeviceName" placeholder="请输入设备名称" clearable @change="getEnvironment()"
|
||||
style="margin-right:15px ;width: 200px;" />
|
||||
<el-date-picker class="screenHomepage" popper-class="elDatePicker" @change="getEnvironment()"
|
||||
style="width: 300px; margin-right: 10px;" v-model="tableData" type="daterange"
|
||||
range-separator="至" start-placeholder="开始日期" end-placeholder="结束日期"
|
||||
value-format="YYYY-MM-DD" format="YYYY-MM-DD" />
|
||||
</div>
|
||||
<el-button class="searchButton" @click="getEnvironment()">搜索</el-button>
|
||||
<el-button class="searchButton" @click="environmentReset()">重置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<el-table :data="environment_data" :row-class-name="tableRowClassName" class="PatrolMonitoring"
|
||||
v-loading="treeloading" element-loading-background="rgb(11, 40, 34)" highlight-current-row
|
||||
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(56vh); overflow: auto "
|
||||
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
|
||||
<el-table-column type="index" label="序号" width="80px" align="center" />
|
||||
<el-table-column property="deviceName" label="监控设备名称" align="center" />
|
||||
<el-table-column property="signalName" label="监控信号名称" align="center" />
|
||||
<el-table-column property="systemcode" label="所属系统" align="center" width="100px">
|
||||
<template #default="scope">
|
||||
<span>{{ currency(EquipmentType, scope.row.systemcode) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column property="taskName" label="监测数值" align="center" width="100px">
|
||||
<template #default="scope">
|
||||
<div v-if="scope.row.value">{{ scope.row.value }}{{scope.row.unit}}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column property="startTime" label="采集时间" align="center" width="160px" />
|
||||
</el-table>
|
||||
<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'"
|
||||
v-model:current="environment_params.current" @pagination="getEnvironment()"></Page>
|
||||
</div>
|
||||
<el-table :data="environment_data" :row-class-name="tableRowClassName" class="PatrolMonitoring"
|
||||
v-loading="treeloading" element-loading-background="rgb(11, 40, 34)" highlight-current-row
|
||||
style="width: 100%;margin:auto;position: relative;margin-top: 15px; height:calc(56vh); overflow: auto "
|
||||
:header-cell-style="{ background: '#253b51', color: '#b5d7ff', height: '50px' }">
|
||||
<el-table-column type="index" label="序号" width="80px" align="center" />
|
||||
<el-table-column property="signalName" label="气象参数名称" align="center" />
|
||||
<el-table-column property="startTime" label="采集时间" align="center" width="160px" />
|
||||
<el-table-column property="taskName" label="监测数值" align="center" width="100px">
|
||||
<template #default="scope">
|
||||
<div v-if="scope.row.value">{{ scope.row.value }}{{ scope.row.unit }}</div>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
</el-table>
|
||||
<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'" v-model:current="environment_params.current" @pagination="getEnvironment()">
|
||||
</Page>
|
||||
</div>
|
||||
</div>
|
||||
<div class="environment_table">
|
||||
<div id="deviceEachers" :style="{ width: '100%', height: '90%' }"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</template>
|
||||
<style scoped lang="scss">
|
||||
@ -219,14 +283,57 @@ function gettype(){
|
||||
justify-content: space-between;
|
||||
margin: 20px 0px;
|
||||
|
||||
.img_box_one {
|
||||
.img_box_one1 {
|
||||
width: 220px;
|
||||
height: 150px;
|
||||
background: url(@/assets/navigation/hjjc_sjbj.png) ;
|
||||
background: url(@/assets/navigation/hjjc_sjbj.png);
|
||||
background-size: 100% 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
background-color: #00ffff2f;
|
||||
border: #00ffff 1px solid;
|
||||
cursor: pointer;
|
||||
|
||||
.img_box_nei {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
margin-top: 10px;
|
||||
|
||||
.img_text1 {
|
||||
font-family: '微软雅黑';
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
font-size: 18px;
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.img_text2 {
|
||||
font-family: '钉钉进步体 Bold', '钉钉进步体';
|
||||
font-weight: 700;
|
||||
font-size: 24px;
|
||||
color: #00ffff;
|
||||
|
||||
.img_unit {
|
||||
font-family: '钉钉进步体 Bold', '钉钉进步体';
|
||||
font-weight: 700;
|
||||
font-size: 18px;
|
||||
color: rgba(255, 255, 255, 0.298039215686275);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.img_box_one {
|
||||
width: 220px;
|
||||
height: 150px;
|
||||
background: url(@/assets/navigation/hjjc_sjbj.png);
|
||||
background-size: 100% 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-around;
|
||||
cursor: pointer;
|
||||
|
||||
.img_box_nei {
|
||||
display: flex;
|
||||
@ -260,11 +367,11 @@ function gettype(){
|
||||
}
|
||||
|
||||
.environment_table {
|
||||
width: 1881px;
|
||||
width: 935px;
|
||||
height: calc(69vh);
|
||||
background: url(@/assets/navigation/hjjc_BK.png) ;
|
||||
background: url(@/assets/navigation/sbjc_488.png);
|
||||
background-size: 100% 100%;
|
||||
margin: 0 auto;
|
||||
// margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
padding: 15px;
|
||||
|
||||
@ -281,10 +388,4 @@ function gettype(){
|
||||
|
||||
}
|
||||
}
|
||||
.environment_table1{
|
||||
height: calc(83vh);
|
||||
background: url(@/assets/station_2/hjjc_9.png) no-repeat;
|
||||
margin-top:20px;
|
||||
}
|
||||
|
||||
</style>
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@ export default {
|
||||
</script>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, nextTick, onBeforeUnmount } from "vue";
|
||||
import { ref, onMounted, nextTick, onBeforeUnmount,computed } from "vue";
|
||||
import { ElMessage } from "element-plus";
|
||||
import { getVoicePrintByArea, getVoicePatrolPage, executeVoicePatrolTask } from "@/api/videomonitor/index";
|
||||
import Page from '@/components/Pagination/page.vue'
|
||||
@ -79,6 +79,7 @@ onBeforeUnmount(() => {
|
||||
onMounted(() => {
|
||||
getInit()
|
||||
})
|
||||
|
||||
const tableData = ref([])
|
||||
const treeloading = ref(false)
|
||||
const environment_data = ref([
|
||||
|
@ -244,8 +244,13 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="stationboard-right1" id="tableTr">
|
||||
<div class="stationboard-box-title">
|
||||
<div class="img_txt"> <img src=@/assets/navigation/ty_bq.png alt=""><span>告警列表</span></div>
|
||||
<div class="stationboard-box-title" style="padding-bottom:0px ;">
|
||||
<div style="display: flex;align-items: center;justify-content: space-between;width: 100%;">
|
||||
<div class="img_txt">
|
||||
<img src=@/assets/navigation/ty_bq.png alt=""><span>告警列表</span>
|
||||
</div>
|
||||
<el-button class="searchButton" @click="alarmInfoClick" >详情</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="table_body">
|
||||
<div class="table_th">
|
||||
@ -259,10 +264,10 @@
|
||||
:class="{ 'table_active': index % 2 == 0 }" @dblclick="processClick(item)">
|
||||
<div class="tr1 tr" :title="item.content">{{ item.content }}</div>
|
||||
<div class="tr2 tr">
|
||||
<span v-if="item.alarmLevel == 1" style="color: #98E0FF;">预警</span>
|
||||
<span v-if="item.alarmLevel == 2" style="color: #0ACAFF;">一般</span>
|
||||
<span v-if="item.alarmLevel == 3" style="color: #6B86FF;">严重</span>
|
||||
<span v-if="item.alarmLevel == 4" style="color: #FF9C29;">危急</span>
|
||||
<span v-if="item.alarmLevel == 1" style="color: #0099FF;">预警</span>
|
||||
<span v-if="item.alarmLevel == 2" style="color: #FFFF00;">一般</span>
|
||||
<span v-if="item.alarmLevel == 3" style="color: #FF9900;">严重</span>
|
||||
<span v-if="item.alarmLevel == 4" style="color: #FF3300;">危急</span>
|
||||
</div>
|
||||
<div class="tr3 tr">{{ dateFormat(item.alarmDate) }}</div>
|
||||
</div>
|
||||
@ -340,6 +345,7 @@ import Modelset from './3DModelSet.vue';
|
||||
import { getTaskTodoStatByMonth } from "@/api/areaboard";
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import * as echarts from 'echarts';
|
||||
import router from '@/router';
|
||||
const userStore = useUserStore();
|
||||
watch(() => userStore.alarmCount, (newValue, oldValue) => {
|
||||
alarmCount.value = newValue
|
||||
@ -362,6 +368,10 @@ function dateFormat(row: any) {
|
||||
return month + "-" + day + " " + hours + ":" + minutes;
|
||||
}
|
||||
}
|
||||
function alarmInfoClick() {
|
||||
router.push(`/task/alarmInfo/index`)
|
||||
|
||||
}
|
||||
const tableTop = ref(0)
|
||||
const tableList: any = ref([])
|
||||
let tableTimer: any = null
|
||||
|
@ -2,7 +2,7 @@
|
||||
<div class="login-container">
|
||||
<img :src="loginImg" alt="" style="position: absolute;top: 0;width: 100vw !important;max-width:100vw!important;height:100vh">
|
||||
<div class="login-container-center">
|
||||
<div class="title-container">
|
||||
<div class="title-container" style="width: 461px;">
|
||||
<img src="@/assets/login/bt.png" alt="" style="margin: auto;">
|
||||
</div>
|
||||
<div class="login-container-right">
|
||||
|
@ -124,7 +124,7 @@ const num = ref(0)
|
||||
<div>{{ examinationInfo.componentName }}</div>
|
||||
</div>
|
||||
<div class="public-details-conent">
|
||||
<div v-if="examinationInfo.alarmSourceType == 1" class="public-details-name">告警来源:</div>
|
||||
<div v-if="examinationInfo.taskAlarmType == 4" class="public-details-name">告警来源:</div>
|
||||
<div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div>
|
||||
</div>
|
||||
<div class="public-details-conent">
|
||||
@ -150,7 +150,7 @@ const num = ref(0)
|
||||
<div >{{ examinationInfo.alarmDate }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="examinationInfo.alarmSourceType == 1" style="width:290px;height: 200px;">
|
||||
<div v-if="examinationInfo.taskAlarmType == 4" style="width:290px;height: 200px;">
|
||||
<div style="width:100%;height:100%; position: relative;">
|
||||
<div title="查看图片" style="position: absolute;
|
||||
right: 5px;
|
||||
|
@ -208,7 +208,7 @@ const handleChange = (value: any) => {
|
||||
<div class="public-details-name">部件名称:</div>
|
||||
<div>{{ examinationInfo.componentName }}</div>
|
||||
</div>
|
||||
<div class="public-details-conent" v-if="examinationInfo.alarmSourceType == 1">
|
||||
<div class="public-details-conent" v-if="examinationInfo.taskAlarmType == 4">
|
||||
<div class="public-details-name">告警来源:</div>
|
||||
<div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div>
|
||||
</div>
|
||||
@ -236,7 +236,7 @@ const handleChange = (value: any) => {
|
||||
<div>{{ examinationInfo.alarmDate }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="examinationInfo.alarmSourceType == 1" style="width:290px;height: 200px;">
|
||||
<div v-if="examinationInfo.taskAlarmType == 4" style="width:290px;height: 200px;">
|
||||
<div style="width:100%;height:100%; position: relative;">
|
||||
<div title="查看图片" style="position: absolute;
|
||||
right: 5px;
|
||||
|
@ -311,7 +311,7 @@ onBeforeUnmount(() => {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #07241c;
|
||||
background: #001b4a;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
475
riis-web/src/views/question/question/index.vue
Normal file
475
riis-web/src/views/question/question/index.vue
Normal file
@ -0,0 +1,475 @@
|
||||
<script setup lang="ts">
|
||||
import { ref, onMounted, reactive, nextTick } from 'vue'
|
||||
import Page from '@/components/Pagination/page.vue'
|
||||
import { ElMessageBox, ElMessage, ElTable, FormRules, ElTree } from 'element-plus'
|
||||
import { getDeviceByType } from '@/api/device'
|
||||
import { queryDevice, addDevice, updateDevice, deleteDeviceById, deleteDeviceByIds, updateDeviceByIds } from '@/api/auxiliarymanage/index';
|
||||
import { getGatewayList } from '@/api/systemmanage'
|
||||
import { getdevicedata } from "@/api/device";
|
||||
import Eldialog from '@/components/seccmsdialog/eldialog.vue'
|
||||
import { useUserStore } from '@/store/modules/user';
|
||||
import {
|
||||
getBayTree,
|
||||
} from "@/api/makeTask";
|
||||
const userStore = useUserStore();
|
||||
//树形控件类型定义
|
||||
interface Tree {
|
||||
[x: string]: any;
|
||||
label: string;
|
||||
children?: Tree[];
|
||||
}
|
||||
const vMove = {
|
||||
mounted(el: any) {
|
||||
el.onmousedown = function (e: any) {
|
||||
var init = e.clientX;
|
||||
var parent: any = document.getElementById("silderLeft");
|
||||
const initWidth: any = parent.offsetWidth;
|
||||
document.onmousemove = function (e) {
|
||||
var end = e.clientX;
|
||||
var newWidth = end - init + initWidth;
|
||||
parent.style.width = newWidth + "px";
|
||||
};
|
||||
document.onmouseup = function () {
|
||||
document.onmousemove = document.onmouseup = null;
|
||||
};
|
||||
};
|
||||
}
|
||||
}
|
||||
const tableRowClassName = ({
|
||||
row,
|
||||
rowIndex,
|
||||
}: {
|
||||
row: any
|
||||
rowIndex: number
|
||||
}) => {
|
||||
if (rowIndex % 2 === 0) {
|
||||
return 'warning-row'
|
||||
} else if (rowIndex % 2 === 1) {
|
||||
return 'success-row'
|
||||
}
|
||||
return ''
|
||||
}
|
||||
const defaultProps = { label: "dictname" };
|
||||
const defaultProps1 = {
|
||||
children: "children",
|
||||
label: "name"
|
||||
};
|
||||
const checktreenode: any = ref({})
|
||||
const handleNodeClick = (data: Tree) => {
|
||||
|
||||
};
|
||||
const treeRef = ref<InstanceType<typeof ElTree>>()
|
||||
const treeData: any = ref([])
|
||||
const treeloading = ref(false)
|
||||
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
function init() {
|
||||
const params = {
|
||||
dictcode: 'FaultDiagnosisType'
|
||||
}
|
||||
treeloading.value = true
|
||||
getDeviceByType(params).then((res: any) => {
|
||||
if (res.data.length !== 0 && res.data !== null) {
|
||||
treeData.value = res.data
|
||||
treeloading.value = false
|
||||
if (res.data.length !== 0 && res.data !== null) {
|
||||
nextTick(() => {
|
||||
treeRef.value?.setCurrentKey(res.data[0].id);
|
||||
checktreenode.value.code = res.data[0].itemcode
|
||||
checktreenode.value.name = res.data[0].dictname
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
function handleClose() {
|
||||
serviceOpen.value = false
|
||||
tieupswitch.value = false
|
||||
}
|
||||
//维护按钮
|
||||
const serviceOpen = ref(true)
|
||||
function uphold() {
|
||||
serviceOpen.value = true
|
||||
}
|
||||
//表格数据
|
||||
const tableData = ref([])
|
||||
const loading = ref(false)
|
||||
|
||||
//绑定
|
||||
const title = ref('')
|
||||
const tieupswitch = ref(false)
|
||||
function tieupdevice(row: any) {
|
||||
title.value = '关联' + row
|
||||
tieupswitch.value = true
|
||||
getbaytree()
|
||||
}
|
||||
//维护添加绑定数据
|
||||
//左侧树
|
||||
const treedata = ref([])
|
||||
const treeRefbay: any = ref(null)
|
||||
const weitreeloading = ref(false)
|
||||
const bayId = ref('')
|
||||
function getbaytree() {
|
||||
const params = {
|
||||
stationId: userStore.stationId
|
||||
}
|
||||
weitreeloading.value = true
|
||||
getBayTree(params).then((res: any) => {
|
||||
if (res.data.length == 0) {
|
||||
weitableData.value.length = 0
|
||||
}
|
||||
weitreeloading.value = false
|
||||
treedata.value = res.data
|
||||
bayId.value = res.data[0].children[0].children[0].bayId
|
||||
nextTick(() => {
|
||||
treeRefbay.value?.setCurrentKey(bayId.value);
|
||||
});
|
||||
// getPointsData()
|
||||
})
|
||||
}
|
||||
//导航树点击事件
|
||||
const currentNodeKeybay = ref("")
|
||||
function handClick(data: Tree, node: any) {
|
||||
if (data.children) {
|
||||
node.isCurrent = false
|
||||
currentNodeKeybay.value = ""
|
||||
nextTick(() => {
|
||||
currentNodeKeybay.value = bayId.value
|
||||
})
|
||||
} else {
|
||||
bayId.value = data.bayId;
|
||||
}
|
||||
}
|
||||
//右侧表格
|
||||
const weitableData = ref([])
|
||||
const tableloading = ref(false)
|
||||
const bayName = ref('')
|
||||
// const componentIds = ref('')
|
||||
// const mainDeviceIds = ref('')
|
||||
function getPointsData() {
|
||||
tableloading.value = true
|
||||
const params = {
|
||||
bayId: bayId.value,
|
||||
// componentId: componentIds.value,
|
||||
// mainDeviceId: mainDeviceIds.value,
|
||||
status: 0,
|
||||
// patrolDeviceCode: info.value.robotCode,
|
||||
deviceName: bayName.value
|
||||
}
|
||||
getdevicedata(params).then((res: any) => {
|
||||
tableloading.value = false
|
||||
weitableData.value = res.data.records
|
||||
res.data.records.forEach((res: any) => {
|
||||
res['id'] = res.deviceId
|
||||
})
|
||||
})
|
||||
}
|
||||
function handPointsChange(val: any) {
|
||||
|
||||
}
|
||||
function resetComponent() {
|
||||
bayId.value = ''
|
||||
getPointsData()
|
||||
}
|
||||
|
||||
</script>
|
||||
<template>
|
||||
<div class="faulttemplate-box">
|
||||
<aside id="silderLeft">
|
||||
<el-tree v-loading="treeloading" ref="treeRef" node-key="id" :data="treeData" :highlight-current="true"
|
||||
:props="defaultProps" :expand-on-click-node="false" @node-click="handleNodeClick"
|
||||
style="height: calc(87vh); overflow: auto;margin-top: 10px;">
|
||||
</el-tree>
|
||||
<div class="moveBtn" v-move>
|
||||
<div class="moveBtn-line"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<section class="silderRight1">
|
||||
<div class="right_yop">
|
||||
<div class="right_button"><el-button class="searchButton" type="primary" @click="uphold">维护</el-button>
|
||||
</div>
|
||||
<div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div></div>
|
||||
</section>
|
||||
<Eldialog v-if="serviceOpen" :title="'维护'" :zIndex="2000" :width="'60%'" @before-close="handleClose">
|
||||
<template v-slot:PopFrameContent>
|
||||
<div>
|
||||
<div>
|
||||
<el-button class="searchButton" type="primary" @click="tieupdevice('点位')">关联点位</el-button>
|
||||
<el-button class="searchButton" type="primary" @click="tieupdevice('信号')">关联信号</el-button>
|
||||
</div>
|
||||
<div class="tieup">
|
||||
<div class="tieup_title">
|
||||
<div class="tieup_title_line"></div>
|
||||
<div class="tieup_title_text">关联结果</div>
|
||||
</div>
|
||||
<div>
|
||||
<el-table ref="multipleTableRef" :data="tableData" :row-class-name="tableRowClassName"
|
||||
:v-loading="loading"
|
||||
style="width: 100%;margin-bottom: 20px;height: calc(35vh);overflow: auto;" row-key="id"
|
||||
default-expand-all
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
|
||||
<el-table-column label="序号" type="index" width="50" />
|
||||
<el-table-column label="设备编号" prop="deviceCode" />
|
||||
</el-table>
|
||||
</div>
|
||||
<span class="dialog-footer"
|
||||
style="width: 95%;margin: auto; display: flex;display: -webkit-flex; justify-content: center;-webkit-justify-content: center;margin-top: 10px;">
|
||||
<div class="details-button" @click="handleClose">取消</div>
|
||||
<div class="details-button" @click="">保存</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
</Eldialog>
|
||||
<Eldialog v-if="tieupswitch" :title="title" :zIndex="2000" :width="'80%'" @before-close="handleClose">
|
||||
<template v-slot:PopFrameContent>
|
||||
<div class="faulttemplate-box1">
|
||||
<aside id="silderLeft1">
|
||||
<div class="displayflex">
|
||||
<div class="line"></div>
|
||||
<div class="title" style="font-size: 14px;color: #fff;">数据列表</div>
|
||||
</div>
|
||||
<el-scrollbar>
|
||||
<el-tree ref="treeRefbay" node-key="bayId" :data="treedata"
|
||||
:current-node-key="currentNodeKeybay" v-loading="weitreeloading"
|
||||
:highlight-current="true" :props="defaultProps1" @node-click="handClick">
|
||||
</el-tree>
|
||||
</el-scrollbar>
|
||||
|
||||
</aside>
|
||||
<section class="silderRightDialog">
|
||||
<div
|
||||
style="display: flex;display: -webkit-flex; justify-content: space-between; -webkit-justify-content: space-between; margin:5px">
|
||||
<div style="display: flex;display: -webkit-flex; align-items: center;width: 80%;">
|
||||
|
||||
<el-input v-model="bayName" placeholder="请输入巡视点位名称" clearable @clear="getPointsData()"
|
||||
@change="getPointsData()" style="margin-right:15px ;width: 30%;" />
|
||||
<el-button class="searchButton" @click="getPointsData()">搜索</el-button>
|
||||
<el-button class="searchButton" @click="resetComponent()">重置</el-button>
|
||||
</div>
|
||||
<div><el-button class="searchButton" @click="">添加</el-button></div>
|
||||
</div>
|
||||
<div class="draggable">
|
||||
<el-table ref="multipleTableRef" :data="weitableData" :row-class-name="tableRowClassName"
|
||||
:v-loading="loading"
|
||||
style="width: 100%;margin-bottom: 20px;height: calc(35vh);overflow: auto;" row-key="id"
|
||||
default-expand-all
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }">
|
||||
<el-table-column type="selection" width="30" align="center" />
|
||||
<el-table-column label="序号" type="index" width="50"></el-table-column>
|
||||
<el-table-column label="巡视点位名称" prop="deviceName"></el-table-column>
|
||||
<el-table-column label="所属主设备" prop="mainDeviceName"></el-table-column>
|
||||
<el-table-column label="所属部件" prop="componentName"></el-table-column>
|
||||
</el-table>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</template>
|
||||
</Eldialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.silderLeft-default {
|
||||
:deep(.el-tree-node__label) {
|
||||
font-size: 16px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.faulttemplate-box {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
display: -webkit-flex;
|
||||
background-color: #f2f4f900;
|
||||
padding: 15px 15px 0px 15px;
|
||||
|
||||
}
|
||||
|
||||
#silderLeft {
|
||||
width: 300px;
|
||||
padding: 5px 0px 10px;
|
||||
box-sizing: border-box;
|
||||
border-radius: 3px;
|
||||
position: relative;
|
||||
background: url(@/assets/navigation/ty_260x988.png);
|
||||
background-size: 100% 100%;
|
||||
|
||||
&:hover {
|
||||
.moveBtn {
|
||||
opacity: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 拖动条 */
|
||||
.moveBtn {
|
||||
height: 100%;
|
||||
width: 15px;
|
||||
padding: 0 6px;
|
||||
opacity: 0;
|
||||
position: absolute;
|
||||
right: -15px;
|
||||
top: 0;
|
||||
}
|
||||
|
||||
.moveBtn-line {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
cursor: col-resize;
|
||||
user-select: none;
|
||||
background-color: #60bfff;
|
||||
}
|
||||
|
||||
.silderRight1 {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
height: calc(100vh - 160px);
|
||||
overflow: auto;
|
||||
background-color: rgba(255, 255, 255, 0);
|
||||
border-radius: 3px;
|
||||
box-sizing: border-box;
|
||||
margin-left: 15px;
|
||||
|
||||
.right_yop {
|
||||
width: 100%;
|
||||
height: calc(60vh);
|
||||
box-sizing: border-box;
|
||||
padding: 15px;
|
||||
background: url(@/assets/navigation/sw1.png);
|
||||
background-size: 100% 100%;
|
||||
|
||||
.right_button {
|
||||
display: flex;
|
||||
justify-content: end;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//关联
|
||||
.tieup {
|
||||
width: 100%;
|
||||
|
||||
.tieup_title {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
font-size: 18px;
|
||||
margin: 10px 0px;
|
||||
|
||||
.tieup_title_line {
|
||||
width: 6px;
|
||||
height: 16px;
|
||||
background-color: #009bff;
|
||||
margin-right: 10px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/////////
|
||||
///
|
||||
///
|
||||
.faulttemplate-box1 {
|
||||
height: 100%;
|
||||
display: flex;
|
||||
display: -webkit-flex;
|
||||
padding-top: 15px;
|
||||
|
||||
#silderLeft1 {
|
||||
width: 300px;
|
||||
padding: 10px;
|
||||
box-sizing: border-box;
|
||||
background-image: url(@/assets/navigation/ty_260x988.png);
|
||||
background-size: 100% 100%;
|
||||
height: calc(70vh);
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.silderRightDialog {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
height: calc(70vh);
|
||||
overflow: auto;
|
||||
// background-color: rgba(255, 255, 255, 1); navigation/ty_260x988.png riis-web/src/assets/navigation/ty_1614x988.png
|
||||
border-radius: 3px;
|
||||
box-sizing: border-box;
|
||||
margin-left: 15px;
|
||||
background: url(@/assets/navigation/ty_1614x988.png);
|
||||
background-size: 100% 100%;
|
||||
padding: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
.displayflex {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
.line {
|
||||
width: 5px;
|
||||
height: 14px;
|
||||
background: #0099ff;
|
||||
}
|
||||
|
||||
.title {
|
||||
padding-left: 10px;
|
||||
font-family: 'Arial Negreta', 'Arial Normal', 'Arial';
|
||||
font-weight: 700;
|
||||
font-style: normal;
|
||||
font-size: 16px;
|
||||
color: #303133;
|
||||
text-decoration: none !important;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
:deep(.el-tree-node.is-current>.el-tree-node__content) {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
// color: #fff !important;
|
||||
}
|
||||
|
||||
:deep(.el-tree) {
|
||||
background-color: #ffffff00 !important;
|
||||
--el-tree-node-hover-bg-color: #0099ff09;
|
||||
}
|
||||
|
||||
:deep(.el-tree-node__content) {
|
||||
width: 100% !important;
|
||||
height: 40px !important;
|
||||
margin: auto !important;
|
||||
}
|
||||
|
||||
:deep(.el-table:not(.el-table--border) .el-table__cell) {
|
||||
border: none;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
:deep(.el-tree) {
|
||||
background-color: #ffffff00 !important;
|
||||
--el-tree-node-hover-bg-color: #0099ff09;
|
||||
}
|
||||
|
||||
:deep(.el-input) {
|
||||
--el-input-bg-color: #ffffff00 !important;
|
||||
}
|
||||
|
||||
:deep(.el-input-group__append) {
|
||||
background: #ffffff00 !important;
|
||||
}
|
||||
|
||||
:deep(.el-input .el-input__count .el-input__count-inner) {
|
||||
background-color: rgba(240, 248, 255, 0);
|
||||
}
|
||||
|
||||
:deep(.el-scrollbar) {
|
||||
height: 95% !important;
|
||||
}
|
||||
</style>
|
@ -183,7 +183,7 @@ function rowClick(row: any) {
|
||||
if (row.id == alarmInfo.value.id ) {
|
||||
return
|
||||
}
|
||||
if (row.alarmSourceType == 2) {
|
||||
if (row.taskAlarmType == 4) {
|
||||
ElMessage({message:'辅控任务暂无图片和视频',type:'warning'})
|
||||
return
|
||||
}
|
||||
@ -577,36 +577,36 @@ const isVideo = ref(false)
|
||||
style="width: 100%;margin:auto;position: relative;margin-top: 0px; height:calc(75vh); overflow: auto "
|
||||
:header-cell-style="{ background: '#002b6a', color: '#B5D7FF', height: '50px' }"
|
||||
@selection-change="handleSelectionChange" @row-click="rowClick">
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column type="index" align="center" label="序号" width="60px"></el-table-column>
|
||||
<el-table-column prop="patroldeviceName" label="设备名称" />
|
||||
<el-table-column prop="componentName" label="部件名称" />
|
||||
<el-table-column prop="deviceName" label="点位名称" />
|
||||
<el-table-column prop="materialId" label="实物ID">
|
||||
<el-table-column type="selection" width="20" align="center" />
|
||||
<el-table-column type="index" align="center" label="序号" width="40px"></el-table-column>
|
||||
<el-table-column prop="patroldeviceName" label="设备名称" align="center" />
|
||||
<el-table-column prop="componentName" label="部件名称" align="center" />
|
||||
<el-table-column prop="deviceName" label="点位名称" align="center" />
|
||||
<el-table-column prop="materialId" label="实物ID" align="center">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.materialId">{{ scope.row.materialId }}</span>
|
||||
<span v-else>--</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="点位分类" prop="appearanceType">
|
||||
<el-table-column label="点位分类" prop="appearanceType" align="center">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.pointType == 1">Ⅰ类</span>
|
||||
<span v-if="scope.row.pointType == 2">Ⅱ类</span>
|
||||
<span v-if="scope.row.pointType == 3">Ⅲ类</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="taskAlarmType" label="告警来源" width="110px" align="center">
|
||||
<el-table-column prop="taskAlarmType" label="告警来源" width="80px" align="center">
|
||||
<template #default="scope">
|
||||
<span>{{ currency(AlarmSourceList, scope.row.taskAlarmType) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="alarmType" label="告警类型" width="110px" align="center">
|
||||
<el-table-column prop="alarmType" label="告警类型" width="80px" align="center">
|
||||
<template #default="scope">
|
||||
|
||||
<span>{{ currency(AlarmTypeArr,scope.row.alarmSourceType == '1'? scope.row.alarmType : scope.row.fkAlarmType) }}</span>
|
||||
<span>{{ currency(AlarmTypeArr,scope.row.taskAlarmType == '4'? scope.row.alarmType : scope.row.fkAlarmType) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="alarmLevel" label="告警等级" width="90px" align="center">
|
||||
<el-table-column prop="alarmLevel" label="告警等级" width="80px" align="center">
|
||||
<template #default="scope">
|
||||
<span v-if="scope.row.alarmLevel == 1" style="color: #0099FF;">{{ currency(AlarmLevelList,
|
||||
scope.row.alarmLevel) }}</span>
|
||||
@ -752,7 +752,7 @@ const isVideo = ref(false)
|
||||
<div class="details-name">部件名称:</div>
|
||||
<div>{{ examinationInfo.componentName }}</div>
|
||||
</div>
|
||||
<div class="details-conent" v-if="examinationInfo.alarmSourceType == 1">
|
||||
<div class="details-conent" v-if="examinationInfo.taskAlarmType == 4">
|
||||
<div class="details-name">告警来源:</div>
|
||||
<div>{{ currency(AlarmSourceList, examinationInfo.taskAlarmType) }}</div>
|
||||
</div>
|
||||
@ -762,7 +762,7 @@ const isVideo = ref(false)
|
||||
<div>{{ currency(AlarmLevelList, examinationInfo.alarmLevel) }}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:290px;height: 180px;margin: 0px 0px 10px 0px ;" v-if="examinationInfo.alarmSourceType == 1">
|
||||
<div style="width:290px;height: 180px;margin: 0px 0px 10px 0px ;" v-if="examinationInfo.taskAlarmType == 4">
|
||||
<div style="width:100%;height:100%; position: relative;">
|
||||
<div title="查看图片" style="position: absolute;right: 5px;top: 5px;width: 26px;height: 26px;border-radius: 4px;
|
||||
display: flex;align-items: center;justify-content: center;cursor: pointer;background: rgba(0,0,0,0.5);">
|
||||
|
@ -22,6 +22,7 @@ import {
|
||||
PatrolTask,
|
||||
getRobotAndUavList
|
||||
} from "@/api/makeTask";
|
||||
import dayjs from 'dayjs'
|
||||
import { secondauthPassword } from '@/api/robotmonitoring'
|
||||
import { getdevicedata } from "@/api/device";
|
||||
import { encrypt, decrypt } from '@/utils/sm4';
|
||||
@ -1484,7 +1485,16 @@ onMounted(() => {
|
||||
getarrType()
|
||||
GetSelect()
|
||||
getrobotUAV()
|
||||
gettoday()
|
||||
});
|
||||
function gettoday() {
|
||||
// 获取今天0点
|
||||
let startTime = dayjs().startOf('day').format('YYYY-MM-DD HH:mm:ss')
|
||||
// 获取当前时间
|
||||
let endTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
|
||||
tableData.value[0] = startTime
|
||||
tableData.value[1] = endTime
|
||||
}
|
||||
//新增优先级回显
|
||||
function changeType(row: any) {
|
||||
info.value.priority = row
|
||||
|
@ -5285,7 +5285,7 @@ ws1.onclose = () => {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #131a25;
|
||||
background: #001b4a;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
@ -2875,7 +2875,7 @@ function nextPage() {
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #131a25;
|
||||
background: #001b4a;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
Loading…
Reference in New Issue
Block a user