变电近电作业,受限空间

This commit is contained in:
hongchao 2025-01-03 15:02:17 +08:00
parent c5517b019b
commit 1acf302d0b
7 changed files with 460 additions and 651 deletions

View File

@ -166,3 +166,52 @@ export const queryWarnConfigApi = (data) => {
})
}
// 查询有限空间监测设备 - 报警记录
export const queryWarnSpaceListApi = (data) => {
return request.get(`/base/screen/info/queryInfoWarnSpaceList`, {
params: data
})
}
// 查询有限空间当年监测设备 - 报警记录
export const queryWarnSpaceMonthApi = (data) => {
return request.get(`/base/screen/info/queryInfoWarnSpaceMonth`, {
params: data
})
}
// 查询有限空间当年违章类型占比监测设备 - 报警记录
export const queryWarnSpaceTypeApi = (data) => {
return request.get(`/base/screen/info/queryInfoWarnSpaceType`, {
params: data
})
}
// 删除受限空间视频预警
export const delWarnSpace = (data) => {
return request.post('/base/screen/info/delWarnSpace', data)
}
// 查询近电感应设备 - 报警记录
export const queryWarnElectListApi = (data) => {
return request.get(`/base/screen/info/queryInfoWarnElectList`, {
params: data
})
}
// 删除近电感应预警
export const delWarnElect = (data) => {
return request.post('/base/screen/info/delWarnElect', data)
}
// 查询近电感应参数配置数据
export const getWarnElectConfigApi = (data) => {
return request.get(`/base/screen/info/getWarnElectConfig`, {
params: data
})
}
// 修改近电感应参数配置数据
export const editConfig = (data) => {
return request.post('/base/screen/info/editConfig', data)
}

BIN
src/assets/img/pm1.0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -344,8 +344,8 @@
</el-dialog>
<!-- 查看位移历史记录弹窗 -->
<el-dialog :title="title" :visible.sync="showShift" width="1000px" height="800px" append-to-body @close="closeShift">
<el-form :model="queryShift" ref="queryFormShift" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-dialog :title="title" :visible.sync="showShift" width="1000px" height="800px" append-to-body @close="closeShift">
<el-form :model="queryShift" ref="queryFormShift" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryShift.deviceName"
@ -479,6 +479,7 @@ export default {
showSearch: true,
settleLoad: false,
shiftLoad: false,
tableShiftList: [],
}
},
created() {
@ -549,31 +550,7 @@ export default {
})
this.detectShiftList = res.data.data
},
// async getTowerTodayData(proId) {
// let res = await queryTowerTodayApi({
// proId
// })
// res.data.forEach(item => {
// if(item.devType === '117') {
// item.angle = item.jcValue + '°'
// } else if(item.dev === '118') {
// item.pull = item.jcValue + 'N'
// }
// })
// this.detectList = res.data
// },
// async getEnvironmentData(devId, type) {
// let res = await queryEnvironmentInfoByIdApi({
// devId
// })
// if(type === '117') {
// this.angleFirst = res.data.data[0].jcValue
// this.angleList = res.data.data.filter(item => item.jcUnit === '°')
// } else if(type === '118') {
// this.pullFirst = res.data.data[0].jcValue
// this.pullList = res.data.data.filter(item => item.jcUnit === 'N')
// }
// },
selTowerAngle(val) {
console.log(val)
this.currentAngleTower = val.devId

View File

@ -6,6 +6,22 @@
<img src="../../assets/img/lef-badge.png" alt="" />
GLL通管监测
</div>
<div style="display: flex; justify-content: right">
<el-select
v-model="deviceVal"
clearable
filterable
placeholder="请选择"
@change="deviceChange"
>
<el-option
v-for="item in deviceRange"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</div>
</div>
<div class="work-icons">
<!-- <div
@ -19,7 +35,7 @@
</div>-->
<div class="single-icon">
<span style="color: #42c8e3"
>{{environmentInfoList ? environmentInfoList[8].jcValue : '0'}}°C</span>
>{{environmentInfoList ? environmentInfoList[0].jcValue : '0'}}°C</span>
<span>温度</span>
<img src="../../assets/img/temp.png" alt="" />
</div>
@ -38,7 +54,7 @@
<span style="color: #87d674"
>{{
environmentInfoList
? environmentInfoList[9].jcValue
? environmentInfoList[1].jcValue
: '0'
}}%rh</span
>
@ -46,26 +62,15 @@
<img src="../../assets/img/wet.png" alt="" />
</div>
<div class="single-icon">
<span style="color: #f2ad49"
<span style="color:cornflowerblue"
>{{
environmentInfoList
? environmentInfoList[5].jcValue
: '0'
}}db</span
>
<span>噪声</span>
<img src="../../assets/img/loud.png" alt="" />
</div>
<div class="single-icon">
<span style="color:blue"
>{{
environmentInfoList
? environmentInfoList[3].jcValue
? environmentInfoList[2].jcValue
: '0'
}}/ugm3</span
>
<span>PM1.0</span>
<img src="../../assets/img/pm2.5.png" alt="" />
<img src="../../assets/img/pm1.0.png" alt="" />
</div>
<div class="single-icon">
<span style="color: #9634cc"
@ -238,7 +243,7 @@ export default {
let res = await queryDeviceByProApi({
powerId: this.sendMsg.gtId,
proId,
devType: 116,
devType: 137,
})
if (res.data.data.length !== 0) {
this.deviceVal = res.data.data[0].devId
@ -257,7 +262,7 @@ export default {
async getDevTypeCodeDetails(proId) {
let param = {
proId: proId,
devTypeCode: 116,
devTypeCode: 137,
}
let res = await getDevTypeCodeDetails(param)
this.tableList = res.data
@ -284,12 +289,12 @@ export default {
console.log(res)
this.deviceConfig = res.data
},
// deviceChange(e) {
// console.log(e)
// this.getEnvironmentData(e)
// this.getChartsData(e)
// this.getWarnConfig(e)
// },
deviceChange(e) {
console.log(e)
this.getEnvironmentData(e)
this.getChartsData(e)
this.getWarnConfig(e)
},
generateCharts(list) {
console.log(list)
@ -307,10 +312,10 @@ export default {
return item.xtime
})
let loudArr = list['噪声'].map((item) => {
let pm1Arr = list['pm1.0'].map((item) => {
return Number(item.jcValue)
})
let loudXList = list['噪声'].map((item) => {
let pm21XList = list['pm1.0'].map((item) => {
return item.xtime
})
@ -324,9 +329,6 @@ export default {
let pm10Arr = list['pm10'].map((item) => {
return Number(item.jcValue)
})
let windSpeedList = list['风速'].map((item) => {
return Number(item.jcValue)
})
//
let tempOption = {
grid: {
@ -493,114 +495,6 @@ export default {
let sdChart = echarts.init(document.querySelector('#sd-chart'))
sdChart.setOption(sdOption)
// //
// let wetOption = {
// grid: {
// width: '80%',
// height: '60%',
// },
// tooltip: {
// trigger: 'axis',
// axisPointer: {
// type: 'shadow',
// },
// valueFormatter: (value) => {
// return value + 'm/s'
// },
// },
// xAxis: {
// type: 'category',
// data: wetXList,
// },
// yAxis: {
// type: 'value',
// name: 'm/s',
// },
// series: [
// {
// name: '',
// data: windSpeedList,
// type: 'line',
// smooth: true,
// lineStyle: {
// color: '#FE8511',
// },
// itemStyle: {
// normal: {
// color: '#FE8511',
// },
// },
// areaStyle: {
// color: {
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// type: 'linear',
// colorStops: [
// { offset: 0, color: '#F5CC91' },
// { offset: 1, color: '#F8F6F6' },
// ],
// },
// },
// },
// ],
// }
// let wetChart = echarts.init(document.querySelector('#wet-chart'))
// wetChart.setOption(wetOption)
// //
// let loudOption = {
// grid: {
// width: '80%',
// height: '60%',
// },
// tooltip: {
// trigger: 'axis',
// axisPointer: {
// type: 'shadow',
// },
// valueFormatter: (value) => {
// return value + ''
// },
// },
// xAxis: {
// type: 'category',
// data: loudXList,
// },
// yAxis: {
// type: 'value',
// name: 'db',
// },
// series: [
// {
// name: '',
// data: loudArr,
// type: 'line',
// smooth: true,
// symbol: 'none',
// lineStyle: {
// color: '#4781FC',
// },
// areaStyle: {
// color: {
// x: 0,
// y: 0,
// x2: 0,
// y2: 1,
// type: 'linear',
// colorStops: [
// { offset: 0, color: '#CCDBFF' },
// { offset: 1, color: '#ECF2FF' },
// ],
// },
// },
// },
// ],
// }
// let loudChart = echarts.init(document.querySelector('#loud-chart'))
// loudChart.setOption(loudOption)
//
let airOption = {
grid: {
@ -625,16 +519,31 @@ export default {
name: 'ugm3',
},
series: [
{
name: 'PM1.0',
data: pm1Arr,
type: 'line',
lineStyle: {
color: 'cornflowerblue',
},
itemStyle: {
normal: {
color: 'cornflowerblue',
},
},
symbol: 'none',
smooth: true,
},
{
name: 'PM2.5',
data: pm25Arr,
type: 'line',
lineStyle: {
color: '#FC8B2D',
color: '#9484FC',
},
itemStyle: {
normal: {
color: '#FC8B2D',
color: '#9484FC',
},
},
symbol: 'none',
@ -645,11 +554,11 @@ export default {
data: pm10Arr,
type: 'line',
lineStyle: {
color: '#4B84FC',
color: '#1db1c0',
},
itemStyle: {
normal: {
color: '#4B84FC',
color: '#1db1c0',
},
},
symbol: 'none',
@ -825,7 +734,6 @@ export default {
box-sizing: border-box;
padding: 10px 20px;
background-color: #eff4fe;
display: flex;
align-items: center;
justify-content: space-between;
color: #000;

View File

@ -1,111 +1,113 @@
<template>
<div class="hole-page">
<div class="tower-detect">
<div class="inner-tit">
<div class="inner-tit" style="display: flex; justify-content: space-between; align-items: center;">
<div>
<img src="../../assets/img/lef-badge.png" alt="">
近电感应设备
近电感应预警
</div>
<el-button type="text" style="font-size: 18px;" @click="handleSignUp">参数配置</el-button>
</div>
<div class="tower-info">
<div class="tower-lef">
<div class="lef-spin">
<div>
<h4 style="background-color: #D8D8D8"></h4>
离线
</div>
<div>
<h4 style="background-color: #F31111"></h4>
报警
</div>
<div>
<h4 style="background-color: #39CE10"></h4>
在线
</div>
</div>
<div class="lef-tower-pic" >
<div
:class="['single-tower', getBorderColorClass(item)]"
v-for="item in deviceList"
:key="item.devId"
:style="{ border: '2px solid', padding: '1px' }"
>
<img
v-if="item.devStatus === 0 && item.devWarn === 0"
src="../../assets/img/deForm1.png"
alt=""
<el-form
style="width: 100%;"
:model="queryParams"
ref="queryFormRef"
size="small"
:inline="true"
label-width="80px"
>
<el-form-item
label="设备名称"
prop="devName"
>
<el-input
v-model="queryParams.devName"
placeholder="请输入设备名称"
clearable maxlength="20"
style="width: 200px;"
/>
<img
v-if="item.devWarn === 1"
src="../../assets/img/deForm3.png"
alt=""
</el-form-item>
<el-form-item
label="预警时间"
prop="warnTime"
>
<el-date-picker
v-model="dateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="background-color: #ECF3FE;">
</el-date-picker>
</el-form-item>
<el-button
style="margin-top: 3px"
type="primary"
icon="el-icon-search"
size="mini"
@click="handleQuery"
>搜索</el-button>
</el-form>
<el-table
:data="tableList"
stripe
style="width: 100%"
:row-style="rowStyle"
>
<el-table-column
label="序号"
align="center"
width="80"
type="index"
>
<template slot-scope="scope">
<span>{{ (queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column
prop="devName"
label="设备名称"
align="center"
>
</el-table-column>
<el-table-column
prop="warnTime"
label="预警时间"
align="center"
>
</el-table-column>
<el-table-column
prop="warnContent"
label="预警内容"
align="center"
>
</el-table-column>
<el-table-column
label="操作"
align="center"
>
<template slot-scope="scope">
<el-button type="danger" size="mini" @click="handleWarn(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getTableList"
style="background-color: #f3f7ff;"
/>
<img
v-if="item.devStatus === 1 && item.devWarn === 0"
src="../../assets/img/deForm2.png"
alt=""
/>
<div :class="['dev-name']" >{{ item.devName }}</div>
</div>
</div>
</div>
</div>
</div>
<div class="map">
<div id="map-container"></div>
</div>
<div class="key-standby">
<div class="inner-tit">
<div>
<img src="../../assets/img/lef-badge.png" alt="">
近电感应预警
</div>
<span @click="handleSignUp">参数配置</span>
</div>
<el-table
:data="keyPersonTable"
stripe
style="width: 100%"
:row-style="rowStyle"
>
<el-table-column
prop="postName"
label="设备名称"
align="center"
>
</el-table-column>
<el-table-column
prop="relName"
label="预警时间"
align="center"
width="80"
>
</el-table-column>
<el-table-column
prop="relPhone"
label="预警内容"
align="center"
>
</el-table-column>
</el-table>
</div>
<!-- 查看参数配置弹窗 -->
<el-dialog :title="title" :visible.sync="showConfig" width="800px" height="800px" append-to-body @close="closeConfig">
<el-form :model="queryConfig" ref="queryFormConfig" size="small" :inline="true" v-show="showSearch" label-width="120px">
<div
v-for="(item, index) in configItems"
:key="index"
class="dynamic-item"
>
<el-row :gutter="24">
<el-col :span="20">
<el-form-item label="线路属性:" prop="attribute">
<el-radio-group v-model="item.attribute">
<el-radio-group v-model="queryConfig.attribute">
<el-radio
v-for="(radioItem, radioIndex) in radioList"
:key="radioIndex"
@ -119,7 +121,7 @@
<el-col :span="20">
<el-form-item label="电压等级:" label-width="195px" prop="elecLevel" style="display: flex;margin-bottom: 30px;" >
<el-radio-group v-model="item.elecLevel" style="display: flex; flex-wrap: wrap; gap: 10px;margin-top: 0px;align-items: center;">
<el-radio-group v-model="queryConfig.elecLevel" style="display: flex; flex-wrap: wrap; gap: 10px;margin-top: 0px;align-items: center;">
<el-radio
v-for="(radioItem, radioIndex) in radioLevelList"
:key="radioIndex"
@ -131,28 +133,6 @@
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="17">
<el-form-item
label="报警距离:"
prop="distinct"
>
<div style="display: flex; align-items: center;">
<el-input
v-model="item.distinct"
placeholder="请输入"
style="width: 100%"
/>
<span style="margin-left: 10px;font-size: 16px;"></span>
</div>
</el-form-item>
</el-col>
<el-col :span="5" style="display: flex;justify-content: left;align-items: center;">
<el-button size="mini" type="success" @click="addConfigItem" >添加配置</el-button>
<el-button size="mini" type="danger" @click="removeConfigItem(index)" v-show="index!=0">删除配置</el-button>
</el-col>
</el-row>
</div>
</el-form>
<div
style="
@ -180,9 +160,10 @@ import { dialogConfig } from './config-sign'
import { commonMixin } from '@/views/mixins/common'
import TableSign from './subComp/table-sign.vue'
import {
queryKeyArriveApi,
queryCrewInfoApi,
queryCrewCoordinateApi
queryWarnElectListApi,
delWarnElect,
getWarnElectConfigApi,
editConfig,
} from '@/api/substation/substation'
export default {
components: {
@ -200,35 +181,10 @@ export default {
return {
showSearch: true,
showConfig: false,
crewIpt: undefined,
crewList: [
/* {
id: 1,
crew: '第一班组',
children: [
{ name: '张三', phone: 13811111111, lon: 117.13805, lat: 31.8734 },
{ name: '李四', phone: 13811111111, lon: 117.13505, lat: 31.8434 },
{ name: '王五', phone: 13811111111, lon: 117.13205, lat: 31.8134 },
]
},
{
id: 2,
crew: '第二班组',
children: [
{ name: '胡汉三', phone: 13811111111 },
{ name: '尉迟恭', phone: 13811111111 },
{ name: '刘寄奴', phone: 13811111111 },
]
} */
],
coordList: [],
activeCrew: [],
crewName: undefined,
keyPersonTable: [],
sendId: undefined,
configItems: [{ attribute: "", elecLevel: "", distinct: "" }],
queryConfig: {
isCharge: '',
attribute: "",
elecLevel: "",
},
title: '参数配置',
radioList: [
@ -247,68 +203,97 @@ export default {
{ value: 8, label: '1000KV' },
//
],
deviceList: [
{
devId: 1,
devName: '1号塔',
devStatus: 1,
devWarn: 0
},
{
devId: 2,
devName: '2号塔',
devStatus: 0,
devWarn: 1
},
{
devId: 3,
devName: '3号塔',
devStatus: 0,
devWarn: 0
},
],
}
},
computed: {
searchCrew() {
if(!this.crewIpt) {
return this.crewList
} else {
return this.crewList.map(item => ({
teamId: item.teamId,
teamName: item.teamName,
peopleList: item.peopleList.filter(child => child.peopleName.includes(this.crewIpt))
}))
}
queryParams: {
devName: '',
pageNum: 1,
pageSize: 10,
startTime: '',
endTime: '',
},
dateRange: [],
tableList: [],
total: 0,
}
},
computed: {},
created() {
},
mounted() {
this.sendId = this.sendMsg.projectId
// this.createMap()
this.getWarnElectList(this.sendMsg.projectId)
},
methods: {
getBorderColorClass(item) {
if (item.devStatus === 0 && item.devWarn === 0) {
return 'gray-border';
} else if (item.devWarn === 1) {
return 'red-border';
} else if (item.devStatus === 1 && item.devWarn === 0) {
return 'green-border';
}
return 'default-border';
//
async getWarnElectList(proId) {
let res = await queryWarnElectListApi({
proId,
})
this.tableList = res.rows
this.total = res.total
},
async getCrewData() {
let res = await queryCrewInfoApi({
async getTableList() {
this.queryParams.proId = this.sendMsg.projectId
if (this.dateRange!=null&&this.dateRange.length>0) {
const dateStart = new Date(this.dateRange[0])
const dateEnd = new Date(this.dateRange[1])
this.queryParams.startTime = dateStart.toLocaleDateString('en-CA')
this.queryParams.endTime = dateEnd.toLocaleDateString('en-CA')
} else {
this.queryParams.startTime = null
this.queryParams.endTime = null
}
let res = await queryWarnElectListApi(this.queryParams)
this.tableList = res.rows
this.total = res.total
},
//
handleQuery() {
this.getTableList()
},
/** 删除按钮操作 */
handleWarn(row) {
const id = row.id
this.$modal.confirm('是否确认删除该条数据').then(function() {
return delWarnElect({'id':id});
}).then(() => {
this.getTableList()
this.$modal.msgSuccess("删除成功");
}).catch(() => {})
},
//
async handleSignUp() {
const res = await getWarnElectConfigApi({
proId: this.sendMsg.projectId
})
this.crewList = res.data
/* this.crewList.forEach((item, index) => {
this.activeCrew.push(index + 1)
}) */
console.log('2222222', res)
this.queryConfig.attribute = res.data.configElectValue
this.queryConfig.elecLevel = res.data.configLevelValue
this.showConfig = true
},
closeConfig() {
this.showConfig = false
},
saveConfig() {
let config = {
configElectName: '线路属性',
configLevelName: '电压等级',
configElectValue: this.queryConfig.attribute,
configLevelValue: this.queryConfig.elecLevel,
}
editConfig(config).then(response => {
this.$modal.msgSuccess("修改成功");
this.showConfig = false;
});
},
closeClick() {
this.showConfig = false
},
rowStyle(scope) {
if(scope.rowIndex % 2 === 0) {
return {
@ -320,30 +305,6 @@ export default {
}
}
},
handleSignUp() {
this.showConfig = true
},
addConfigItem() {
this.configItems.push({ attribute: "", elecLevel: "", distinct: ""});
},
removeConfigItem(index) {
if (this.configItems.length > 1) {
this.configItems.splice(index, 1);
}
},
closeConfig() {
this.configItems=[{ attribute: "", elecLevel: "", distinct: "" }],
this.showConfig = false
},
saveConfig() {
},
closeClick() {
this.configItems=[{ attribute: "", elecLevel: "", distinct: "" }],
this.showConfig = false
},
}
}
</script>
@ -375,130 +336,19 @@ export default {
src: url("../../assets/iconfont/YouSheBiaoTiHei.ttf");
}
.el-input__inner {
background-color: #FFFF;
}
.hole-page{
width: 100%;
height: 100%;
display: flex;
justify-content: space-between;
.crew{
width: 23%;
height: 100%;
background-color: #F3F7FF;
box-sizing: border-box;
padding: 20px;
border-radius: 5px;
border: 1px solid #EFF2FC;
box-shadow: 2px 2px 2px #D9E0F3;
display: flex;
flex-direction: column;
.crew-sel{
flex: 1;
border: 1px solid #C6DAF8;
background: linear-gradient(180deg, #E8F2FC, #D6E6F7);
border-radius: 5px;
.sel-top{
width: 100%;
box-sizing: border-box;
padding: 20px 35px;
background-color: #D3E4FA;
font-size: 18px;
font-weight: bold;
color: #000;
}
.single-crew{
box-sizing: border-box;
padding: 15px 30px;
border-top: 1px dashed #CFD8E5;
background-color: transparent;
cursor: pointer;
}
.crewActive{
background-color: #D3E4FA;
}
}
}
.map{
width: 40%;
height: 100%;
#map-container{
width: 100%;
height: 100%;
}
}
.key-standby{
width: 28%;
height: 100%;
background-color: #F3F7FF;
box-sizing: border-box;
padding: 20px;
border-radius: 5px;
border: 1px solid #EFF2FC;
box-shadow: 2px 2px 2px #D9E0F3;
display: flex;
flex-direction: column;
.inner-tit{
width: 100%;
box-sizing: border-box;
padding: 10px 20px;
background-color: #EFF4FE;
display: flex;
align-items: center;
justify-content: space-between;
color: #000;
font-size: 20px;
font-family: 'YouShe', sans-serif;
box-shadow: -3px -3px 2px #CBDCF6,
2px 2px 2px #F8F9FE,
-2px -2px 2px #CBDCF6,
2px 2px 2px #F8F9FE;
margin-bottom: 15px;
span{
color: #fff;
box-sizing: border-box;
padding: 5px 15px;
background-color: #0297FC;
border-radius: 5px;
cursor: pointer;
}
}
}
.radioLevelType{
flex-basis: 25%;
}
.tower-detect{
width: 28%;
width: 100%;
height: 100%;
background-color: #F3F7FF;
box-sizing: border-box;
@ -635,21 +485,6 @@ export default {
}
}
.gray-border {
border-color: gray !important;
}
.red-border {
border-color: red !important;
}
.green-border {
border-color: green !important;
}
.default-border {
border-color: gray !important;
}
}
</style>

View File

@ -10,7 +10,9 @@
<el-date-picker
v-model="yearValue"
type="year"
placeholder="选择年">
placeholder="选择年"
@change="yearChange"
>
</el-date-picker>
</div>
</div>
@ -21,7 +23,7 @@
<span>告警统计</span>
<span v-if="deviceConfig&&deviceConfig.tempThreshold" style="font-size: 14px;font-weight: 400;color: gray;">温度阈值{{deviceConfig.tempThreshold}}温度阈值{{deviceConfig.tempThreshold}}</span>
</div>
<div id="temp-chart"></div>
<div id="warn-chart"></div>
</div>
<div class="single-chart" style="margin-left: 40px;">
<div class="inner-titWarn">
@ -45,23 +47,12 @@
:inline="true"
label-width="80px"
>
<el-form-item
label="工程名称"
prop="proName"
>
<el-input
v-model="queryParams.proName"
placeholder="请输入工程名称"
clearable maxlength="20"
style="width: 200px;"
/>
</el-form-item>
<el-form-item
label="设备名称"
prop="deviceName"
prop="devName"
>
<el-input
v-model="queryParams.deviceName"
v-model="queryParams.devName"
placeholder="请输入设备名称"
clearable maxlength="20"
style="width: 200px;"
@ -72,7 +63,7 @@
prop="warnTime"
>
<el-date-picker
v-model="queryParams.warnTime"
v-model="dateRange"
type="daterange"
range-separator="至"
start-placeholder="开始日期"
@ -106,7 +97,7 @@
>
</el-table-column>
<el-table-column
prop="deviceName"
prop="devName"
label="预警设备名称"
align="center"
>
@ -127,13 +118,16 @@
</template>
</el-table-column>
<el-table-column
prop="warnTime"
prop="warnUrl"
label="违章照片"
align="center"
>
<template slot-scope="scope">
<span v-if="scope.row.warnUrl != null && scope.row.warnUrl !=''" style="color: blue;" @click="showPicture(scope.row)">查看</span>
<span v-else></span>
</template>
</el-table-column>
<el-table-column
prop="warnType"
label="操作"
align="center"
>
@ -152,17 +146,27 @@
/>
</div>
</div>
<!-- 图片查看弹窗 -->
<el-dialog title="查看" :visible.sync="pictureVisible" width="600px" append-to-body>
<img width="100%" height="500px" :src="pictureUrl" alt />
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="saveImg">保存图片</el-button>
<el-button type="danger" @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import * as echarts from 'echarts'
import {
queryWarnSpaceListApi,
queryWarnSpaceMonthApi,
queryWarnSpaceTypeApi,
delWarnSpace,
queryDeviceByProApi,
queryEnvironmentInfoByIdApi,
queryChartsInfoByIdApi,
queryWarnInfoByIdApi,
getDevTypeCodeDetails,
queryWarnConfigApi
} from '@/api/substation/substation'
export default {
@ -177,59 +181,137 @@ export default {
data() {
return {
environmentInfoList: undefined,
yearValue: undefined,
yearValue: '', // ,
deviceRange: [],
deviceConfig:{},
tableList: [
{
date: 'xxx工程',
name: '2024.1.1 12:23',
address: '明天有大风',
},
{
date: 'xxx工程',
name: '2024.1.1 12:23',
address: '明天有大风',
},
{
date: 'xxx工程',
name: '2024.1.1 12:23',
address: '明天有大风',
},
{
date: 'xxx工程',
name: '2024.1.1 12:23',
address: '明天有大风',
},
{
date: 'xxx工程',
name: '2024.1.1 12:23',
address: '明天有大风',
},
{
date: 'xxx工程',
name: '2024.1.1 12:23',
address: '明天有大风',
},
],
queryParams: {
proName: '',
deviceName: '',
warnTime: [],
devName: '',
proId: '',
pageNum: 1,
pageSize: 10,
startTime: '',
endTime: '',
},
dateRange: [],
loading: false,
tableListWarn: [],
tableListDown: [],
total: 0,
//
pictureVisible: false,
pictureUrl: '',
monthData: [],
TypeList: [],
}
},
created() {},
created() {
this.yearValue = (new Date().getFullYear()).toString()
},
mounted() {
console.log(this.sendMsg)
this.getWarnSpaceMonth(this.sendMsg.projectId, this.yearValue)
this.getWarnSpaceType(this.sendMsg.projectId, this.yearValue)
this.getDeviceData(this.sendMsg.projectId)
this.getDevTypeCodeDetails(this.sendMsg.projectId)
this.getWarnSpaceList(this.sendMsg.projectId)
},
methods: {
async yearChange(e) {
this.yearValue = (e.getFullYear()).toString()
await this.getWarnSpaceMonth(this.sendMsg.projectId, this.yearValue)
await this.getWarnSpaceType(this.sendMsg.projectId, this.yearValue)
await this.getChartsData(this.deviceVal)
},
async getWarnSpaceMonth(proId, year) {
queryWarnSpaceMonthApi({
proId,
year,
}).then((res) => {
this.monthData=Object.values(res.data)
})
},
async getWarnSpaceType(proId, year) {
this.TypeList = []
let res = await queryWarnSpaceTypeApi({
proId,
year,
})
if (res.data) {
res.data.forEach(item => {
this.TypeList.push({
value: item.count,
name: item.warnType,
})
});
}
},
//
async getWarnSpaceList(proId) {
let res = await queryWarnSpaceListApi({
proId,
})
this.tableListDown = res.rows
this.total = res.total
},
async getTableList() {
this.queryParams.proId = this.sendMsg.projectId
if (this.dateRange!=null&&this.dateRange.length>0) {
const dateStart = new Date(this.dateRange[0])
const dateEnd = new Date(this.dateRange[1])
this.queryParams.startTime = dateStart.toLocaleDateString('en-CA')
this.queryParams.endTime = dateEnd.toLocaleDateString('en-CA')
} else {
this.queryParams.startTime = null
this.queryParams.endTime = null
}
let res = await queryWarnSpaceListApi(this.queryParams)
this.tableListDown = res.rows
this.total = res.total
},
//
handleQuery() {
this.getTableList()
},
//
showPicture(row) {
this.pictureUrl = row.warnUrl
this.pictureVisible = true
},
//
async saveImg() {
try {
const response = await fetch(this.pictureUrl);
const blob = await response.blob();
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '违章图片.jpg'; //
link.click();
URL.revokeObjectURL(link.href); // URL
} catch (error) {
console.error('下载图片失败', error);
}
},
//
cancel() {
this.pictureVisible = false
},
/** 删除按钮操作 */
handleWarn(row) {
const id = row.id
this.$modal.confirm('是否确认删除该条数据').then(function() {
return delWarnSpace({'id':id});
}).then(() => {
this.getTableList()
this.$modal.msgSuccess("删除成功");
}).catch(() => {})
},
async getDeviceData(proId) {
let res = await queryDeviceByProApi({
powerId: this.sendMsg.gtId,
@ -244,26 +326,9 @@ export default {
value: item.devId,
}
})
await this.getEnvironmentData(this.deviceVal)
await this.getChartsData(this.deviceVal)
await this.getWarnConfig(this.deviceVal)
}
},
//
async getDevTypeCodeDetails(proId) {
let param = {
proId: proId,
devTypeCode: 116,
}
let res = await getDevTypeCodeDetails(param)
this.tableList = res.data
},
async getEnvironmentData(devId) {
let res = await queryEnvironmentInfoByIdApi({
devId,
})
this.environmentInfoList = res.data.data
},
async getChartsData(devId) {
let res = await queryChartsInfoByIdApi({
devId,
@ -288,42 +353,24 @@ export default {
// },
generateCharts(list) {
console.log(list)
let tempArr = this.monthData
let tempXList = [
'1月',
'2月',
'3月',
'4月',
'5月',
'6月',
'7月',
'8月',
'9月',
'10月',
'11月',
'12月',
]
let tempArr = list['温度'].map((item) => {
return Number(item.jcValue)
})
let tempXList = list['温度'].map((item) => {
return item.xtime
})
let wetArr = list['湿度'].map((item) => {
return Number(item.jcValue)
})
let wetXList = list['湿度'].map((item) => {
return item.xtime
})
let loudArr = list['噪声'].map((item) => {
return Number(item.jcValue)
})
let loudXList = list['噪声'].map((item) => {
return item.xtime
})
let pm25Arr = list['pm25'].map((item) => {
return Number(item.jcValue)
})
let pm25XList = list['pm25'].map((item) => {
return item.xtime
})
let pm10Arr = list['pm10'].map((item) => {
return Number(item.jcValue)
})
let windSpeedList = list['风速'].map((item) => {
return Number(item.jcValue)
})
//
//
let tempOption = {
grid: {
left: '3%',
@ -349,16 +396,17 @@ export default {
yAxis: [
{
type: 'value',
name: '°C',
},
{
type: 'value',
name: '%rh',
name: '次',
minInterval:1,
},
// {
// type: 'value',
// name: '%rh',
// },
],
series: [
{
name: '温度',
name: '告警次数',
type: 'bar',
barWidth: '40%',
data: tempArr,
@ -388,16 +436,17 @@ export default {
type: 'shadow',
},
valueFormatter: (value) => {
return value + '°C'
return value + ''
},
},
},
],
}
let tempChart = echarts.init(document.querySelector('#temp-chart'))
let tempChart = echarts.init(document.querySelector('#warn-chart'))
tempChart.setOption(tempOption)
//
let gatheringSourceOption = {
tooltip: {
@ -425,7 +474,7 @@ export default {
},
series: [
{
name: '违章类型',
name: '',
type: 'pie',
radius: '70%',
center: ['45%', '40%'], //
@ -458,13 +507,7 @@ export default {
],
}
gatheringSourceOption.series[0].data = [
{ value: 1048, name: '违章类型1' },
{ value: 735, name: '违章类型2' },
{ value: 580, name: '违章类型3' },
{ value: 484, name: '违章类型4' },
{ value: 300, name: '违章类型5' },
]
gatheringSourceOption.series[0].data = this.TypeList
let gatheringSourceChart = echarts.init(document.querySelector('#violation-chart'))
gatheringSourceChart.setOption(gatheringSourceOption);
@ -490,9 +533,6 @@ export default {
font-family: 'YouShe';
src: url('../../assets/iconfont/YouSheBiaoTiHei.ttf');
}
.el-input__inner {
background-color: #FFFF;
}
.hole-page {
width: 100%;
height: 100%;
@ -565,7 +605,7 @@ export default {
}
#temp-chart,
#warn-chart,
#violation-chart,
#loud-chart {
flex: 1;

View File

@ -172,8 +172,8 @@ export default {
{ title: '基坑检测类', id: 4 },
{ title: '形变监测类', id: 5 },
{ title: 'GLL通管监测类', id: 6 },
{ title: '受限空间视频', id: 7 },
{ title: '近电作业监控', id: 8 },
{ title: '受限空间视频预警', id: 7 },
{ title: '近电作业检测', id: 8 },
],
sendMsg: undefined,
sendGeo: undefined