Files
admin-sjzx/src/views/pqs/harmonicMonitoring/area/qualifiedRate.vue

621 lines
22 KiB
Vue
Raw Normal View History

<template>
<div class="pd10" v-loading="loading" element-loading-text="数据加载中">
<div class="container" id="container">
<i @click="closeHandle" class="el-icon-circle-close coles"></i>
<el-form :inline="true" :model="formInline" label-width="90px" class="">
<!-- <div style="display: flex;"> -->
<el-form-item v-if="this.quyunames != undefined">
<el-switch
class="tableScopeSwitch"
:active-value="2"
:inactive-value="1"
@change="handleStatusChange"
:active-text="quyuname"
:inactive-text="quyunames"
inactive-color="#007878"
active-color="#666666"
v-model="this.formData.monitorFlag"
></el-switch>
</el-form-item>
<el-form-item label="统计类型:">
<el-select
v-model="formData.statisticalType"
@change="changeclasss"
placeholder="请选择统计类型"
style="width: 100%"
>
<el-option
v-for="item in classificationData"
:key="item.id"
:label="item.name"
:value="{
label: item.name,
value: item.id,
name: item.name,
id: item.id,
code: item.code,
sort: item.sort
}"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<Area ref="Area" @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item label="电压等级:">
<el-select
v-model="formData.scale"
multiple
collapse-tags
clearable
placeholder="请选择电压等级"
style="width: 100%"
>
<el-option
v-for="item in voltageleveloption"
:key="item.id"
:label="item.name"
:value="{
label: item.name,
value: item.id,
code: item.code,
name: item.name,
id: item.id,
sort: item.sort
}"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家:">
<el-select
v-model="formData.manufacturer"
multiple
collapse-tags
clearable
placeholder="请选择终端厂家"
style="width: 100%"
>
<el-option
v-for="item in terminaloption"
:key="item.id"
:label="item.name"
:value="{
label: item.name,
value: item.id,
code: item.code,
name: item.name,
id: item.id,
sort: item.sort
}"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型:">
<el-select
v-model="formData.loadType"
multiple
collapse-tags
clearable
placeholder="请选择干扰源类型"
style="width: 100%"
>
<el-option
v-for="item in interfereoption"
:key="item.id"
:label="item.name"
:value="{
label: item.name,
value: item.id,
code: item.code,
name: item.name,
id: item.id,
sort: item.sort
}"
></el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<el-row v-show="falg">
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<timepicker
ref="timehg"
:id="id"
:interval="interval"
:treenode="treenode"
:tablename="tablename"
:name="name"
:path="path"
:dataTree="dataTree"
></timepicker>
<!-- <el-button class="el-icon-d-arrow-right" type="primary" round @click="timechange">时间选择</el-button> -->
</el-form-item>
<el-form-item>
<el-button @click="querfromdata" type="primary" icon="el-icon-search">查询</el-button>
</el-form-item>
<el-form-item>
<el-button type="text" @click="closeHandle">
条件筛选
<i :class="!view ? 'el-icon-arrow-down' : 'el-icon-arrow-right'"></i>
</el-button>
</el-form-item>
</el-form>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-tabs :style="'height:' + vh" type="border-card" v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="稳态合格率表格" name="tab1">
<qualifiedataintegrity
:classvalue="classt"
:tableData="tableData"
:loading="loading"
></qualifiedataintegrity>
</el-tab-pane>
<el-tab-pane label="稳态合格率图表" name="tab2" id="hgceshi">
<!-- <span style="font-weight: bold;color:#333;position: absolute;right: 100px;top: 25px;">注意:<span style="color:#CC0000">{{'合格率<60%'}}红色</span><span style="color:#FFCC33">&nbsp&nbsp&nbsp{{'60%≤合格率<90%'}}黄色</span><span style="color:#339966"> &nbsp&nbsp&nbsp{{ '合格率≥90%' }}绿色</span></span> -->
<qualifiedechart
:loading="loading"
:title="title"
:classvalue="classt"
:xdata="xdata"
:ydata1="ydata1"
:ydata2="ydata2"
:ydata3="ydata3"
:ydata4="ydata4"
:ydata5="ydata5"
:ydata6="ydata6"
:ydata7="ydata7"
:ydata8="ydata8"
v-show="'tab2' == activeName"
ref="child"
></qualifiedechart>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import { dicData } from '../../../assets/commjs/dictypeData'
import api from '../../../api/integraliy/integraliy'
import timepicker from '../../components/TimePicker/index4'
import qualifiedataintegrity from '../../components/qualifiedataintegrity'
import qualifiedechart from '../../components/echarts/qualifiedechart'
import Area from '@/views/components/Area/Area.vue'
export default {
name: 'qualificationratestatistics',
components: {
Area,
timepicker,
qualifiedataintegrity,
qualifiedechart
},
computed: {},
data() {
return {
view: false,
falg: true,
quyuname: undefined,
quyunames: undefined,
dd: false,
formInline: {},
xdata: [],
ydata1: [],
ydata2: [],
ydata3: [],
ydata4: [],
ydata5: [],
ydata6: [],
ydata7: [],
ydata8: [],
classt: 'Power_Network',
tablename: 'tab1',
eacjartflag: true,
interval: 3,
treeData: [],
defaultProps: {
children: 'children',
label: 'name'
},
deptName: '',
deptIndex: '',
name: 'sjwzx',
path: '/harmonic-boot/harmonic/getIntegrityData',
asideheight: undefined,
id: 1,
title: '电网拓扑',
xdata: [],
ydata: [],
ydata1: [],
classvalue: 0,
activeName: 'tab1',
treenode: '',
dataTree: '',
voltageleve1: '',
//电压等级
voltageleveloption: [],
terminal: '',
terminaloption: [],
interfere: '',
interfereoption: [],
classificationData: [],
dictypeData: undefined,
deptIndex: '',
formData: {
//后面需要修改
deptIndex: '',
monitorFlag: 2,
powerFlag: 2,
loadType: [],
manufacturer: [],
searchBeginTime: '',
searchEndTime: '',
statisticalType: '',
scale: []
},
periodBeginTime: '',
periodEndTime: '',
timehuanbiValue: [],
tableData: [],
ping: '',
time: '',
loading: true,
vh: null,
cu: ''
}
},
created() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
let data = window.sessionStorage.getItem('sysData')
let yudata = eval('(' + data + ')')
let str = yudata.dataReport.split('')
this.quyuname = str[0]
this.quyunames = str[1]
var info = window.sessionStorage.getItem('Info')
info = eval('(' + info + ')')
this.formData.deptIndex = info.deptId
this.getclassificationData()
this.getVoltage()
this.getManufacturer()
this.getLoadType()
},
mounted() {
if (this.$route.params.mapid0 != undefined && this.$route.params.mapName0 != undefined) {
setTimeout(() => {
this.RoutingChanges(this.$route.params.mapid0, this.$route.params.mapName0)
}, 500)
} else {
this.querfromdata()
}
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 55 + 'px'
},
timechange() {
this.dd = true
},
closeHandle() {
if (this.view) {
this.view = false
} else {
this.view = true
}
//console.log('关闭和展开');
const dom = document.getElementById('container')
const closeDom = document.getElementsByClassName('close')[0]
if (!dom.className.match(/(?:^|\s)expend(?!\S)/)) {
dom.className = 'container expend'
} else {
dom.className = 'container close-container'
}
},
//切换统计类型
changeclasss(val) {
this.cu = val.code
},
//时间格式转化
dateFormat(dateData1, dateData2) {
var timearr = []
var date = new Date(dateData1)
var y = date.getFullYear()
var m = date.getMonth() + 1
m = m < 10 ? '0' + m : m
var d = date.getDate()
d = d < 10 ? '0' + d : d
var h = date.getHours()
h = h < 10 ? '0' + h : h
var f = date.getMinutes()
f = f < 10 ? '0' + f : f
var s = date.getSeconds()
s = s < 10 ? '0' + s : s
this.formData.searchBeginTime = y + '-' + m + '-' + d
timearr.push(this.formData.startTime)
var date = new Date(dateData2)
var y = date.getFullYear()
var m = date.getMonth() + 1
m = m < 10 ? '0' + m : m
var d = date.getDate()
d = d < 10 ? '0' + d : d
var h = date.getHours()
h = h < 10 ? '0' + h : h
var f = date.getMinutes()
f = f < 10 ? '0' + f : f
var s = date.getSeconds()
s = s < 10 ? '0' + s : s
this.formData.searchEndTime = y + '-' + m + '-' + d
timearr.push(this.formData.endTime)
return timearr
},
//部门绑定区域触发区域树节点
handleNodeClick(data, node) {
this.deptId = data.id
this.formData.deptIndex = data.id
},
formatDate(date) {
// date = new Date();
date = new Date(Date.parse(date.replace(/-/g, '/'))) //转换成Data();
var y = date.getFullYear()
var m = date.getMonth() + 1
m = m < 10 ? '0' + m : m
var d = date.getDate()
d = d < 10 ? '0' + d : d
return y + '-' + m + '-' + d
},
//2次组件触发事件
querfromdata() {
this.classt = this.cu
//this.closeHandle()
this.dd = false
this.interval = this.$refs.timehg.intervald
this.loading = true
this.timeValue = this.$refs.timehg.timeValue
// this.timeValue = data;
// this.timehuanbiValue = timehbValue;
// this.periodBeginTime = this.timehuanbiValue[0];
// this.periodEndTime = this.timehuanbiValue[1];
// this.ping = this.periodBeginTime + "至" + this.periodEndTime;
this.dateFormat(this.timeValue[0], this.timeValue[1])
this.time = this.formData.searchBeginTime + '至' + this.formData.searchEndTime
api.getSteadyQualifyData(this.formData).then(res => {
if (res.code == 'A0000') {
if (res.data.length == 0) {
this.tableData = []
} else {
if (
res.data[0].children[0].children[0].children[0].children !== [] &&
res.data[0].children[0].children[0].children[0].children !== null
) {
res.data.forEach(m => {
m.id = this.guid()
m.children.forEach(n => {
n.id = this.guid()
n.children.forEach(d => {
d.id = this.guid()
d.children.forEach(p => {
p.id = this.guid()
p.children.forEach(h => {
h.id = this.guid()
})
})
})
})
})
} else {
res.data.forEach(m => {
m.id = this.guid()
m.children.forEach(n => {
n.id = this.guid()
n.children.forEach(d => {
d.id = this.guid()
d.children.forEach(p => {
p.id = this.guid()
})
})
})
})
}
this.tableData = res.data
}
this.gettubiao()
}
})
},
gettubiao() {
this.loading = true
var data = {
deptIndex: this.formData.deptIndex,
loadType: this.formData.loadType,
monitorFlag: this.formData.monitorFlag,
powerFlag: 2,
manufacturer: this.formData.manufacturer,
searchBeginTime: this.formData.searchBeginTime,
searchEndTime: this.formData.searchEndTime,
statisticalType: this.formData.statisticalType,
scale: this.formData.scale,
periodBeginTime: this.periodBeginTime,
periodEndTime: this.periodEndTime
}
this.ydata = []
this.ydata1 = []
this.ydata2 = []
this.ydata3 = []
this.ydata4 = []
this.ydata5 = []
this.ydata6 = []
this.ydata7 = []
this.ydata8 = []
api.getSteadyQualifyCensus(data).then(res => {
this.eacjartflag = true
if (res.code == 'A0000') {
this.xdata = res.data.type
this.ydata1 = res.data.freqOffset
this.ydata2 = res.data.flicker
this.ydata3 = res.data.voltageUnbalance
this.ydata4 = res.data.harmonicVoltage
this.ydata5 = res.data.voltageOffset
this.ydata6 = res.data.harmonicCurrent
this.ydata7 = res.data.negativeCurrent
this.ydata8 = res.data.interHarmonic
this.loading = false
this.$nextTick(() => {
this.$refs.child.qualifiedechart()
})
}
})
},
//标签切换
handleClick(tab, event) {
this.activeName = tab.name
if (tab.name == 'tab1') {
this.eacjartflag = false
this.$nextTick(() => {
this.$refs.child.qualifiedechart()
})
} else if (tab.name == 'tab2') {
// this.gettubiao();
this.$nextTick(() => {
// this.$refs.child.qualifiedechart();
})
}
},
//开关触发
handleStatusChange(val) {
this.formData.monitorFlag = val
},
//字典获取数据电压等级
getVoltage() {
var code = 'Dev_Voltage_Stand'
this.voltageleveloption = dicData(code, [])
this.formData.scale = this.voltageleveloption
},
//字典获取数据终端厂家
getManufacturer() {
var code = 'Dev_Manufacturers'
this.terminaloption = dicData(code, [])
this.formData.manufacturer = this.terminaloption
},
//字典获取数据干扰源类型
getLoadType() {
var code = 'Interference_Source'
this.interfereoption = dicData(code, [])
this.formData.loadType = this.interfereoption
},
//获取统计类型
getclassificationData() {
var code = 'Statistical_Type'
this.classificationData = dicData(code, ['Report_Type'])
this.formData.statisticalType = this.classificationData[0]
},
//获取数据完整性列表数据
getQueryData() {
let data = {
area: '0',
comparison: 0,
interference: [],
manufacturer: [],
searchBeginTime: '',
searchEndTime: '',
statisticalType: 0,
voltageLevel: []
}
},
guid() {
return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
let r = (Math.random() * 16) | 0,
v = c === 'x' ? r : (r & 0x3) | 0x8
return v.toString(16)
})
},
rest() {},
RoutingChanges(id, name) {
this.deptId = id
this.formData.deptIndex = id
this.$refs.Area.form.valueTitle = name
this.querfromdata()
}
},
watch: {
$route: {
handler: function (val, oldVal) {
if (val.params.mapid0 != undefined && val.params.mapName0 != undefined) {
this.$nextTick(() => {
this.RoutingChanges(val.params.mapid0, val.params.mapName0)
})
}
},
// 深度观察监听
deep: true
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../styles/comStyle.less');
.container {
/* margin: auto; */
top: 0px;
right: 0;
width: 50%;
height: 0px;
z-index: 2000;
position: absolute;
background-color: #e4e7ebb9;
overflow: auto;
scroll-behavior: smooth;
-radius: 20px;
}
/* 隐藏滚动条 */
::-webkit-scrollbar {
display: block;
}
.expend {
animation: expend ease 5s forwards;
}
.close-container {
animation: no-expend ease 1s forwards;
}
@keyframes expend {
from {
top: 0px;
height: auto;
}
to {
height: auto;
top: 0px;
}
}
@keyframes no-expend {
from {
height: 20%;
top: 0px;
}
to {
top: 0px;
height: 0px;
}
}
.coles {
position: absolute;
right: 0;
font-size: 20px;
cursor: pointer;
}
</style>