This commit is contained in:
GGJ
2025-01-09 19:02:44 +08:00
commit 92e7a7a5eb
2943 changed files with 1152283 additions and 0 deletions

View File

@@ -0,0 +1,56 @@
<template>
<div class="pd10">
<el-row>
<el-col>
<el-tabs v-model.trim="activeName" @tab-click="handleClick" type="border-card">
<el-tab-pane label="全网基准水平" name="first" :style="'height:' + vh + ';'">
<Networklevel v-if="activeName == 'first'"></Networklevel>
</el-tab-pane>
<el-tab-pane label="各渗透率光伏台区基准水平" name="second" :style="'height:' + vh + ';'">
<Arealevel v-if="activeName == 'second'"></Arealevel>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Networklevel from './components/BaselineLevelAssessment/Networklevel.vue'
import Arealevel from './components/BaselineLevelAssessment/Arealevel.vue'
export default {
name: 'pwjzsppg',
components: { Networklevel, Arealevel },
data() {
return {
vh: '',
activeName: 'first',
device: ''
}
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
computed: {
//计算表格高度
// height(){
// return '100vh'- this.$refs.form.offsetHeight +259;
// }
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 80 + 'px'
},
handleClick(tab, event) {
// console.log(tab, event);
}
}
}
</script>
<style lang="less" scoped>
@import url('../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,66 @@
<template>
<div class="pd10">
<el-row>
<el-col>
<el-tabs v-model.trim="activeName" @tab-click="handleClick" type="border-card">
<el-tab-pane label="告警统计" name="first" :style="'height:' + vh + ';'">
<AlarmStatistics v-if="activeName == 'first'"></AlarmStatistics>
</el-tab-pane>
<el-tab-pane label="告警明细查看" name="second" :style="'height:' + vh + ';'">
<Alarmdetails v-if="activeName == 'second'"></Alarmdetails>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import AlarmStatistics from './components/IndicatorAlarmStatistics/AlarmStatistics.vue'
import Alarmdetails from './components/IndicatorAlarmStatistics/Alarmdetails.vue'
export default {
name: 'pwzbgjtj',
components: { AlarmStatistics, Alarmdetails },
data() {
return {
vh: '',
activeName: 'first',
device: ''
}
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 80 + 'px'
},
handleClick(tab, event) {
// console.log(tab, event);
}
}
}
</script>
<style lang="less" scoped>
@import url('../../styles/comStyle.less');
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.block {
position: absolute;
right: 10px;
bottom: 10px;
}
::v-deep .el-form-item--small .el-form-item__content,
.el-form-item--small .el-form-item__label {
height: 32px;
}
</style>

View File

@@ -0,0 +1,75 @@
<template>
<div class="pd10">
<el-row style="overflow-y: hidden">
<el-col>
<el-tabs
:style="'height:' + vh1 + ';'"
v-model.trim="activeName"
@tab-click="handleClick"
type="border-card"
>
<!-- 监测终端统计 -->
<el-tab-pane
label="监测点分类总览"
name="first"
:style="'height:' + vh + ';'"
>
<Census v-if="activeName == 'first'"></Census>
</el-tab-pane>
<!-- 监测点统计 -->
<el-tab-pane
label="各单位分类总览"
name="second"
:style="'height:' + vh + ';'"
>
<Census1 v-if="activeName == 'second'"></Census1>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Timslot from "./components/IndicatorClassification/Timeslot.vue";
import Timslot1 from "./components/IndicatorClassification/Timeslot1.vue";
import Census from "./components/IndicatorClassification/OverviewMonitor.vue";
import Census1 from "./components/IndicatorClassification/OverviewClassification.vue";
export default {
name:'pwzbflgl',
components: { Timslot1, Timslot, Census, Census1 },
data() {
return {
vh: "",
vh1: "",
activeName: "first",
device: "",
};
},
created() {},
mounted() {
this.device = window.devicePixelRatio;
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem("appheight") - 80 + "px";
this.vh1 = window.sessionStorage.getItem("appheight") - 20 + "px";
},
handleClick(tab, event) {
// console.log(tab, event);
},
},
};
</script>
<style lang="less" scoped>
@import url("../../styles/comStyle.less");
</style>

View File

@@ -0,0 +1,76 @@
<template>
<div class="pd10">
<el-row>
<el-col>
<el-tabs v-model.trim="activeName" @tab-click="handleClick" type="border-card">
<el-tab-pane label="暂态指标统计报表" name="second" :style="'height:' + vh + ';'">
<Transient v-if="activeName == 'second'"></Transient>
</el-tab-pane>
<el-tab-pane label="稳态指标统计报表" name="first" :style="'height:' + vh + ';'">
<!-- v-if="id != '' ? true : false" -->
<Steadystate ref="steadyState" :id="id"></Steadystate>
</el-tab-pane>
<!-- <el-tab-pane
label="监测点分析报告"
name="third"
:style="'height:' + vh + ';'"
>
<Analysisreport v-if="activeName=='third'"></Analysisreport>
</el-tab-pane> -->
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Steadystate from './components/StatisticalReport/Steadystate.vue'
import Transient from './components/StatisticalReport/Transient.vue'
import Analysisreport from './components/StatisticalReport/Analysisreport.vue'
export default {
name: 'pwtjbb',
components: { Steadystate, Transient, Analysisreport },
data() {
return {
vh: '',
activeName: 'second',
device: '',
id: ''
}
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 80 + 'px'
},
handleClick(tab, event) {
// console.log(tab, event);
}
}
}
</script>
<style lang="less" scoped>
@import url('../../styles/comStyle.less');
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.block {
position: absolute;
right: 10px;
bottom: 10px;
}
::v-deep .el-form-item--small .el-form-item__content,
.el-form-item--small .el-form-item__label {
height: 32px;
}
</style>

View File

@@ -0,0 +1,101 @@
l
<template>
<div class="pd10">
<el-row>
<el-col>
<el-tabs v-model.trim="activeName" @tab-click="handleClick" type="border-card">
<el-tab-pane label="稳态指标超标统计" name="first">
<Total v-if="activeName == 'first'"></Total>
</el-tab-pane>
<!-- <el-tab-pane label="稳态指标超标分类统计" name="second" >
<Classification></Classification>
</el-tab-pane>
<el-tab-pane label="稳态指标超标明细" name="third" >
<Detailed></Detailed>
</el-tab-pane> -->
<el-tab-pane label="稳态合格率统计" name="second">
<PassRate v-if="activeName == 'second'"></PassRate>
</el-tab-pane>
<el-tab-pane label="稳态指标历史趋势" name="third">
<!-- v-if="id != '' ? true : false" -->
<trend ref="trend" :id="id"></trend>
</el-tab-pane>
<!-- <el-tab-pane label="稳态指标历史趋势" name="fifth" >
<HistoricalTrends v-if="activeName=='fifth'"></HistoricalTrends>
</el-tab-pane> -->
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Total from './components/SteadyStateIndicators/Total.vue'
import PassRate from './components/SteadyStateIndicators/PassRate.vue'
import trend from './components/SteadyStateIndicators/trend.vue'
export default {
name: 'pwwtzb',
components: { Total, PassRate, trend },
data() {
return {
vh: '',
zoom: '',
activeName: 'first',
device: '',
id: ''
}
},
created() {},
mounted() {
if (this.$route.params.id != undefined) {
this.id = this.$route.params.id
if (this.id != '') {
this.activeName = 'third'
this.$nextTick(() => {
// this.$refs.steadyState.getTemplateLists();
})
}
}
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 70 + 'px'
},
handleClick(tab, event) {
// console.log(tab, event);
}
}
}
</script>
<style lang="less" scoped>
@import url('../../styles/comStyle.less');
// ::v-deep .el-table .cell {
// text-align: center;
// }
// ::v-deep .el-tabs--border-card > .el-tabs__content {
// padding: 10px;
// }
// ::v-deep .el-form-item--small .el-form-item__content,
// .el-form-item--small .el-form-item__label {
// height: 32px;
// }
// ::v-deep .el-form-item--small .el-form-item__content,
// .el-form-item--small .el-form-item__label {
// height: 32px;
// }
</style>

View File

@@ -0,0 +1,68 @@
<template>
<div class="pd10">
<el-row>
<el-col>
<el-tabs v-model="activeName" @tab-click="handleClick" type="border-card">
<!-- 暂态事件统计 -->
<el-tab-pane label="暂态事件统计" name="first" :style="'height:' + vh + ';'">
<Incident v-if="activeName == 'first'"></Incident>
</el-tab-pane>
<el-tab-pane label="暂态事件分布统计" name="second" :style="'height:' + vh + ';'">
<Distribution v-if="activeName == 'second'"></Distribution>
</el-tab-pane>
<!-- 暂态事件明细 -->
<el-tab-pane label="暂态事件明细" name="third" :style="'height:' + vh + ';'">
<Definite v-if="activeName == 'third'"></Definite>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
// import { tableheight } from "@/assets/commjs/common";
import Incident from './components/TransientState/Incident.vue'
import Distribution from './components/TransientState/Distribution.vue'
import Definite from './components/TransientState/Definite.vue'
export default {
name: 'pwztzb',
components: { Incident, Distribution, Definite },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
activeName: 'first' //区分是那个节点
}
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 80 + 'px'
},
handleClick(tab, event) {
// if (tab.label == "暂态事件分布统计") {
// this.echarts();
// this.echarts2();
// this.echarts4();
// this.iticData();
// this.semif();
// this.echarts3();
// }
// this.onSubmit();
// console.log(tab,event);
}
}
}
</script>
<style lang="less" scoped>
@import url('../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,422 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval @time="time" ref="interval"></Timeinterval>
</el-form-item>
<el-form-item label="台区:">
<el-input
v-model.trim="valuePlatformArea"
placeholder="请输入台区"
clearable
>
</el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="ml10"
icon="el-icon-search"
@click="searchFn"
>查询</el-button
>
<el-button type="primary" icon="el-icon-download" @click="dc"
>导出</el-button
>
</el-form-item>
</el-form>
<vxe-table
size="mini"
stripe
:row-config="{ isCurrent: true, isHover: true }"
border
ref="classification222"
:data="
arealevelData.slice(
(currentPage - 1) * pageSize,
currentPage * pageSize
)
"
:height="height"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderArealevel">
<vxe-table-colgroup
:field="item.prop"
:title="item.label"
:key="index"
align="center"
min-width="200"
>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
:field="item.prop"
:title="item.label"
:key="index"
align="center"
min-width="90"
>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
:field="item.prop"
:title="item.label"
:key="index"
align="center"
min-width="90"
>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
</div>
</template>
<script>
import { getPwPermeabilityList } from "@/api/Distributionnetwork-analysis/BaselineLevelAssessment/BaselineLevelAssessment.js";
import Area from "@/views/components/Area/Area.vue";
import Timeinterval from "./Timeslot.vue";
export default {
components: { Area, Timeinterval },
data() {
return {
id: JSON.parse(window.sessionStorage.getItem("Info")).deptId,
kai: true,
start: "",
end: "",
vh: "",
valuePlatformArea: "",
height: null,
isLoading: false,
//台区水平评价表头
tableHeaderArealevel: [
{ prop: "orgName", label: "单位", width: 180 },
{ prop: "psrName", label: "台区名称", width: 180 },
{
prop: "penetrationLevel",
label: "分布式光伏台区渗透水平(0~25%)",
children: [
{
prop: "zeroVoltage",
label: "电压水平",
children: [
{ prop: "voltageAvg25", label: "平均值" },
{ prop: "voltageSd25", label: "标准差" },
],
},
{
prop: "zeroThreephase",
label: "三相电压不平衡水平",
width: 150,
children: [
{ prop: "unbalanceAvg25", label: "平均值" },
{ prop: "unbalanceSd25", label: "标准差" },
],
},
{
prop: "zeroHarmonic",
label: "谐波水平",
children: [
{ prop: "vthdAvg25", label: "平均值" },
{ prop: "vthdSd25", label: "标准差" },
],
},
{
prop: "zeroFlicker",
label: "长时闪变水平",
children: [
{ prop: "flickerAvg25", label: "平均值" },
{ prop: "flickerSd25", label: "标准差" },
],
},
],
},
{
prop: "penetrationLevel",
label: "分布式光伏台区渗透水平(25~50%)",
children: [
{
prop: "quarterVoltage",
label: "电压水平",
children: [
{ prop: "voltageAvg50", label: "平均值" },
{ prop: "voltageSd50", label: "标准差" },
],
},
{
prop: "quarterThreephase",
label: "三相电压不平衡水平",
width: 150,
children: [
{ prop: "unbalanceAvg50", label: "平均值" },
{ prop: "unbalanceSd50", label: "标准差" },
],
},
{
prop: "quarterHarmonic",
label: "谐波水平",
children: [
{ prop: "vthdAvg50", label: "平均值" },
{ prop: "vthdSd50", label: "标准差" },
],
},
{
prop: "quarterFlicker",
label: "长时闪变水平",
children: [
{ prop: "flickerAvg50", label: "平均值" },
{ prop: "flickerSd50", label: "标准差" },
],
},
],
},
{
prop: "penetrationLevel",
label: "分布式光伏台区渗透水平(50~75%)",
children: [
{
prop: "ahalfVoltage",
label: "电压水平",
children: [
{ prop: "voltageAvg75", label: "平均值" },
{ prop: "voltageSd75", label: "标准差" },
],
},
{
prop: "ahalfThreephase",
label: "三相电压不平衡水平",
width: 150,
children: [
{ prop: "unbalanceAvg75", label: "平均值" },
{ prop: "unbalanceSd75", label: "标准差" },
],
},
{
prop: "ahalfHarmonic",
label: "谐波水平",
children: [
{ prop: "vthdAvg75", label: "平均值" },
{ prop: "vthdSd75", label: "标准差" },
],
},
{
prop: "ahalfFlicker",
label: "长时闪变水平",
children: [
{ prop: "flickerAvg75", label: "平均值" },
{ prop: "flickerSd75", label: "标准差" },
],
},
],
},
{
prop: "penetrationLevel",
label: "分布式光伏台区渗透水平(75~100%)",
children: [
{
prop: "threeFourthsVoltage",
label: "电压水平",
children: [
{ prop: "voltageAvg99", label: "平均值" },
{ prop: "voltageSd99", label: "标准差" },
],
},
{
prop: "threeFourthsThreephase",
label: "三相电压不平衡水平",
width: 150,
children: [
{ prop: "unbalanceAvg99", label: "平均值" },
{ prop: "unbalanceSd99", label: "标准差" },
],
},
{
prop: "threeFourthsHarmonic",
label: "谐波水平",
children: [
{ prop: "vthdAvg99", label: "平均值" },
{ prop: "vthdSd99", label: "标准差" },
],
},
{
prop: "threeFourthsFlicker",
label: "长时闪变水平",
children: [
{ prop: "flickerAvg99", label: "平均值" },
{ prop: "flickerSd99", label: "标准差" },
],
},
],
},
{
prop: "penetrationLevel",
label: "分布式光伏台区渗透水平(100%)",
children: [
{
prop: "hundredVoltage",
label: "电压水平",
children: [
{ prop: "voltageAvg100", label: "平均值" },
{ prop: "voltageSd100", label: "标准差" },
],
},
{
prop: "hundredThreephase",
label: "三相电压不平衡水平",
width: 150,
children: [
{ prop: "unbalanceAvg100", label: "平均值" },
{ prop: "unbalanceSd100", label: "标准差" },
],
},
{
prop: "hundredHarmonic",
label: "谐波水平",
children: [
{ prop: "vthdAvg100", label: "平均值" },
{ prop: "vthdSd100", label: "标准差" },
],
},
{
prop: "hundredFlicker",
label: "长时闪变水平",
children: [
{ prop: "flickerAvg100", label: "平均值" },
{ prop: "flickerSd100", label: "标准差" },
],
},
],
},
],
arealevelData: [],
device: "",
currentPage: 1, // 当前页码
total: 20, // 总条数
pageSize: 18, // 每页的数据条数
};
},
created() {
// this.arealevel();
// this.dictionaries();
},
mounted() {
(this.$refs.interval.timeOptions = [
// { label: "年份", value: 1 },
// { label: "季度", value: 2 },
{ label: "月份", value: 3 },
// { label: "周", value: 4 },
// // { label: "自定义", value: 5 },
]),
(this.device = window.devicePixelRatio);
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.height = window.sessionStorage.getItem("appheight") - 170;
},
dc() {
this.$refs.classification222.exportData({
filename: "export1", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
isFooter: true,
data: this.arealevelData.slice(
(this.currentPage - 1) * this.pageSize,
this.currentPage * this.pageSize
), // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
});
},
time(val) {
this.start = val[0];
this.end = val[1];
this.type = val[2];
if (this.kai) {
this.arealevel();
}
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
},
//获取数据
arealevel() {
this.isLoading = true;
getPwPermeabilityList({
type: 1,
pageNum: this.currentPage,
pageSize: this.pageSize,
endTime: this.end,
startTime: this.start,
id: this.id,
psrName: this.valuePlatformArea.toString(),
}).then((res) => {
if (res.code == "A0001") {
this.isLoading = false;
this.total = 0;
this.arealevelData = [];
} else {
this.isLoading = false;
this.total = res.data.total;
this.arealevelData = res.data.records;
}
});
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val;
this.arealevel();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val;
this.arealevel();
},
//查询
searchFn() {
this.arealevel();
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
// ::v-deep .el-form-item--small.el-form-item {
// margin-bottom: 0;
// }
</style>

View File

@@ -0,0 +1,265 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item label="电压等级:">
<el-select
v-model.trim="valueLevel"
placeholder="请选择"
clearable
multiple
style="width: 225px"
collapse-tags
>
<el-option
v-for="item in level"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<Timeinterval @time="time"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="ml10"
icon="el-icon-search"
@click="searchFn"
>查询</el-button
>
<el-button type="primary" icon="el-icon-download" @click="dc"
>导出</el-button
>
</el-form-item>
</el-form>
<vxe-table
size="mini"
:row-config="{ isCurrent: true, isHover: true }"
border
stripe
:data="
networklevelData.slice(
(currentPage - 1) * pageSize,
currentPage * pageSize
)
"
:height="height"
ref="classification111"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderNetworklevel">
<vxe-table-colgroup
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
align="center"
>
<template v-for="(val, index) in item.children">
<vxe-table-colgroup
align="center"
:field="val.prop"
:title="val.label"
:min-width="val.width"
:key="index"
></vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
</div>
</template>
<script>
import { getPwRMpBenchmarkLevelList } from "@/api/Distributionnetwork-analysis/BaselineLevelAssessment/BaselineLevelAssessment.js";
import { dicData } from "@/assets/commjs/dictypeData";
import Area from "@/views/components/Area/Area.vue";
import Timeinterval from "./Timeslot.vue";
export default {
components: { Area, Timeinterval },
data() {
return {
id: JSON.parse(window.sessionStorage.getItem("Info")).deptId,
kai: true,
start: "",
end: "",
vh: "",
valueLevel: [],
height: null,
isLoading: false,
//电压等级数据
level: [],
//全网水平评价表头
tableHeaderNetworklevel: [
{ prop: "orgName", label: "单位", width: 160 },
{ prop: "voltageLevel", label: "电压等级(kV)", width: 120 },
{
prop: "voltage",
label: "电压",
children: [
{ prop: "voltageAvg", label: "均值(V)", width: 100 },
{ prop: "vthdSd", label: "标准差(V)", width: 100 },
],
},
{
prop: "threePhase",
label: "三相不平衡度",
children: [
{ prop: "unbalanceAvg", label: "均值(%)", width: 100 },
{ prop: "unbalanceSd", label: "标准差(%)", width: 100 },
],
},
{
prop: "harmonic ",
label: "电压总谐波畸变率()",
children: [
{ prop: "vthdAvg", label: "均值(%)", width: 100 },
{ prop: "vthdSd", label: "标准差(%)", width: 100 },
],
},
{
prop: "longTime ",
label: "长时闪变",
children: [
{ prop: "flickerAvg", label: "均值", width: 100 },
{ prop: "flickerSd", label: "标准差", width: 100 },
],
},
],
networklevelData: [],
device: "",
currentPage: 1, // 当前页码
total: 20, // 总条数
pageSize: 20, // 每页的数据条数
};
},
created() {
// this.dictionaries();
this.getclassificationData();
},
mounted() {
// console.log(this.level,'uiuiui')
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio;
this.height = window.sessionStorage.getItem("appheight") - 170;
},
dc() {
this.$refs.classification111.exportData({
filename: "export1", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
isFooter: true,
data: this.networklevelData.slice(
(this.currentPage - 1) * this.pageSize,
this.currentPage * this.pageSize
),
});
},
time(val) {
this.start = val[0];
this.end = val[1];
this.type = val[2];
if (this.kai) {
this.networklevel();
}
},
//获取电压等级
getclassificationData() {
// debugger
var code = "Dev_Voltage";
this.classificationData = dicData(code, ["Load_Type"]);
this.level = this.classificationData;
this.level.forEach((i) => {
this.valueLevel.push(i.id);
});
},
// 切换选项
handleNodeClick(data) {
this.id = data.id;
},
//获取数据
networklevel() {
this.kai = false;
this.isLoading = true;
getPwRMpBenchmarkLevelList({
type: this.type,
pageNum: this.currentPage,
pageSize: this.pageSize,
endTime: this.end,
startTime: this.start,
id: this.id,
voltageLevel: this.valueLevel.toString(),
}).then((res) => {
if (res.code == "A0001") {
this.isLoading = false;
this.networklevelData = [];
this.total = 0;
} else {
this.total = res.data.total;
res.data.records.forEach((e) => {
this.classificationData.forEach((i) => {
if (e.voltageLevel == i.id) {
e.voltageLevel = i.label;
}
});
});
this.isLoading = false;
this.networklevelData = res.data.records;
}
});
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val;
this.networklevel();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val;
this.networklevel();
},
//查询
searchFn() {
this.networklevel();
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
</style>

View File

@@ -0,0 +1,792 @@
<template>
<div>
<el-form :inline="true" :model="ruleForm" class="demo-form-inline">
<el-form-item label="时间间隔:">
<el-select
style="width: 90px; "
v-model="intervald"
@change="interchange"
placeholder="请选择"
>
<el-option
v-for="item in timeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker
style="width: 230px;"
:disabled="disabled"
:readonly="pickDisabled"
:clearable="false"
v-model="timeValue"
:picker-options="pickerOptions"
type="daterange"
value-format="yyyy-MM-dd"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
:disabled="backDisabled"
type="primary"
icon="el-icon-d-arrow-left"
@click="preClick"
></el-button>
<el-button @click="nowTime" icon="el-icon-video-pause" type="primary"
>当前</el-button
>
<el-button
:disabled="preDisabled"
type="primary"
icon="el-icon-d-arrow-right"
@click="back"
></el-button>
</el-form-item>
</el-form>
<!-- <el-button
@click="querfromdata"
type="primary"
icon="el-icon-search"
style="margin-left: 10px"
>查询</el-button
> -->
</div>
</template>
<script>
export default {
name: "index4",
props: {
name: {
type: String,
default: undefined,
},
path: {
type: String,
default: undefined,
},
tablename: {
type: String,
default: undefined,
},
interval: {
type: Number,
default: undefined,
},
type: {
type: Number,
default: undefined,
},
falg: {
type: Boolean,
default: false,
},
query: {
type: Boolean,
default: false,
},
thb: {
type: Boolean,
default: false,
},
},
watch: {
intervald(val) {
if (val != 5) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
this.timeValue = [startTime, endTime];
this.pickDisabled = false;
this.buttonShow = true;
} else {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
this.timeValue = [startTime, endTime];
this.buttonShow = false;
this.pickDisabled = false;
}
},
},
data() {
return {
ruleForm:{},
disabled: true,
buttonShow: true, //向前向后按钮显示隐藏控制按钮
pickDisabled: false, //时间组件只读控制se,
falg1: true,
timeOptions: [
{ label: "年份", value: 1 },
{ label: "季度", value: 2 },
{ label: "月份", value: 3 },
],
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
intervald:3,
tablenamed: this.tablename,
timeValue: [],
timehbValue: [],
backDisabled: false,
preDisabled: true,
huanbibiFalg: false,
tonbiFalg: false,
timeFlag: 0,
};
},
created() {},
mounted() {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
// console.log(endTime,startTime,'endtime','startTime')
this.$store.commit("sagServerity/SET_TIMEINTERVAL",[startTime,endTime] )
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
if (this.type == 2) {
this.huangbiyear();
} else if (!this.type) {
this.querfromdata();
}
},
methods: {
interchange(val) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
// console.log(endTime,startTime,'endtime','startTime')
this.$store.commit("sagServerity/SET_TIMEINTERVAL",[startTime,endTime] )
this.$emit("time",[startTime,endTime,val] );
// console.log(val,'val')
if (val == 1 || val == 2) {
this.timeFlag = 0;
} else {
this.timeFlag = 1;
}
// console.log(this.timeFlag);
this.intervald = val;
if (val == 5) {
this.tablenamed == "tab1";
this.disabled = false;
} else {
this.tablenamed == "tab2";
this.disabled = true;
}
},
// 获取当前日期,精确到日
getEndTime() {
var now = new Date();
var sep = "-";
var year = now.getFullYear();
var month = now.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var date = now.getDate();
if (date < 10) {
date = "0" + date;
}
// 拼接当前的日期
var endTime = year + sep + month + sep + date;
return endTime;
},
// 获取起始日期
getStartTime(interval, endTime) {
var sep = "-";
var arr = endTime.split("-");
var year = arr[0];
var month = arr[1];
var date = arr[2];
// 按月份间隔
if (interval == 3) {
date = "01";
// 按季度间隔
} else if (interval == 2) {
if ((month > 0) & (month < 4)) {
// 第一季度
month = "01";
date = "01";
} else if (month > 3 && month < 7) {
// 第二季度
month = "04";
date = "01";
} else if (month > 6 && month < 10) {
// 第三季度
month = "07";
date = "01";
} else {
// 第四季度
month = "10";
date = "01";
}
} else if (interval == 1) {
month = "01";
date = "01";
} else if (interval == "半年") {
if (month < 7) {
month = "01";
date = "01";
} else {
month = "07";
date = "01";
}
} else if (interval == 4) {
//周
var start = new Date(year, month - 1, date);
var dayOfWeek = start.getDay() == 0 ? 7 : start.getDay(); // 如果为周日则置为7天
start.setDate(start.getDate() - dayOfWeek + 1); // 计算开始时间
if (this.formatTime(new Date()) != endTime) {
// 如果结束时间不是当前时间
var end = new Date(start);
end.setDate(end.getDate() + 6);
// $("#endTime").val(this.formatTime(end));
}
return this.formatTime(start);
}
var startTime = year + sep + month + sep + date;
return startTime;
},
// 时间格式化
formatTime(time) {
return (
time.getFullYear() +
"-" +
(time.getMonth() + 1 < 10 ? "0" : "") +
(time.getMonth() + 1) +
"-" +
(time.getDate() < 10 ? "0" : "") +
time.getDate()
);
},
//向前
preClick() {
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//向后
back() {
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
var now = new Date();
// 获取当前年份
var presentY = now.getFullYear();
// 获取当前月份
var presentM = now.getMonth() + 1;
// 获取当前日期
var presentD = now.getDate();
if (interval == 3) {
if (month == 12) {
year = year + 1;
// 年份进位后,大于当前的年份,是不科学的
if (presentY < year) {
startTime = presentY + "-12-01";
if (presentD < 10) {
endTime = presentY + "-12" + "-0" + presentD;
} else {
endTime = presentY + "-12" + "-" + presentD;
}
// 年份进位后,等于当前的年份
} else if (presentY == year) {
startTime = year + "-01-01";
if (presentM > 1) {
endTime = year + "-01-31";
} else {
if (presentD < 10) {
endTime = year + "-01" + "-0" + presentD;
} else {
endTime = year + "-01" + "-" + presentD;
}
}
// 年份进位后,依旧小于当前的年份
} else {
startTime = year + "-01-01";
endTime = year + "-01-31";
}
} else {
month = month + 1;
// 年份等于当前年份
if (presentY == year) {
// 月份超过当前月份,是不科学的
if (month >= presentM) {
if (presentM < 10) {
startTime = year + "-0" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
startTime = year + "-" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
// 年份小于当前的年份
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
}
} else if (interval == 2) {
// 前进需要年份进位
if (month == 10) {
year = year + 1;
// 年份进位后大于当前年份是不科学的
if (year > presentY) {
startTime = presentY + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
} else if (year == presentY) {
startTime = year + "-01-01";
// 当前月份大约3月份
if (presentM > 3) {
endTime = year + "-03-31";
} else {
// 当前月份也在第一季度里
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
}
} else {
startTime = year + "-01-01";
endTime = year + "-03-31";
}
} else {
month = month + 3;
// 季度进位后,超过当前月份是不科学的
if (year == presentY) {
if (month >= presentM) {
// 当季度进位后大于当前月,以当前月的时间显示季度
if (presentM > 0 && presentM < 4) {
// 第一季度
startTime = year + "-01-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 3 && presentM < 7) {
// 第二季度
startTime = year + "-04-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 6 && presentM < 10) {
// 第三季度
startTime = year + "-07-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
// 第四季度
startTime = year + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
} else {
startTime = year + "-0" + month + "-01";
}
month = month + 2;
if (month >= presentM) {
endTime = this.getEndTime();
} else {
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
} else {
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
}
}
} else if (interval == 5) {
} else if (interval == 4) {
//根据开始时间推
var start = new Date(year, month - 1, date);
start.setDate(start.getDate() + 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
if (parseInt((end - new Date()) / 1000 / 60) > 24) {
//相差小时大于24小时即超过当天置为当天日期
endTime = this.formatTime(new Date());
}
} else {
year = year + 1;
// 年份进位后大于当前年份,是不科学的
if (year >= presentY) {
startTime = presentY + "-01-01";
if (presentM < 10) {
if (presentD < 10) {
endTime = presentY + "-0" + presentM + "-0" + presentD;
} else {
endTime = presentY + "-0" + presentM + "-" + presentD;
}
} else {
endTime = presentY + "-" + presentM + "-" + presentD;
}
} else {
startTime = year + "-01-01";
endTime = year + "-12-31";
}
}
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//当前按钮点击事件
nowTime() {
let interval = this.intervald;
let endTime = this.getEndTime();
let startTime = this.getStartTime(interval, endTime);
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
let temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//判断向后按钮
timeStatus(temp, endTime) {
// 判断next按钮的状态
if (temp == endTime) {
this.preDisabled = true;
} else {
this.preDisabled = false;
}
},
// 获取月份的天数
getDays(year, month) {
let max = new Date(year, month, 0).getDate();
return max;
},
querfromdata() {
//type用于区分是按钮触发还是钩子函数触发 1按钮触发 underfind 钩子触发
if (!this.type) {
var data = this.timeValue;
var timehbValue = "";
this.$emit("querfromdata", data, timehbValue, this.intervald);
} else if (this.type == 2) {
this.huangbiyear();
}
},
goto() {
this.$router.push({
path: "/harmonic-boot/algorithm",
query: { name: this.name, path: this.path },
});
},
//环比
huangbiyear() {
this.huanbibiFalg = true;
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timehbValue = [startTime, endTime];
var data = this.timeValue;
var timehbValue = this.timehbValue;
// debugger
this.$emit("querfromdata", data, timehbValue, interval);
// 判断向后键的状态
// var temp = this.getEndTime();
//this.timeStatus(temp, endTime);
},
//同比
tongbiyear() {
this.tonbiFalg = true;
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
year = year - 1;
if (month <= 10) {
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year - 1, month, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
year = year - 1;
if (month < 10) {
startTime = year + "-0" + month + "-01";
} else {
startTime = year + "-" + month + "-01";
}
month = month + 2;
if (month <= 10) {
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timehbValue = [startTime, endTime];
var data = this.timeValue;
var timehbValue = this.timehbValue;
this.$emit("querfromdata", data, timehbValue, interval);
},
},
};
</script>
<style lang="scss" scoped>
.spanColor {
color: $themeColor;
}
</style>

View File

@@ -0,0 +1,82 @@
<template>
<div>
<el-row>
<el-col>
<el-tabs v-model.trim="activeName" @tab-click="handleClick">
<el-tab-pane
label="区域告警管理"
name="first"
:style="'height:' + vh + ';'"
>
<Regionalalarm v-if="activeName == 'first'"></Regionalalarm>
</el-tab-pane>
<el-tab-pane
label="监测点告警管理"
name="second"
:style="'height:' + vh + ';'"
>
<MonitoringpointAlarm
v-if="activeName == 'second'"
></MonitoringpointAlarm>
</el-tab-pane>
<el-tab-pane
label="告警统计"
name="third"
:style="'height:' + vh + ';'"
>
<AlarmStatistics v-if="activeName == 'third'"></AlarmStatistics>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Regionalalarm from "./AlarmStatistics/Regionalalarm.vue";
import MonitoringpointAlarm from "./AlarmStatistics/MonitoringpointAlarm.vue";
import AlarmStatistics from "./AlarmStatistics/AlarmStatistics.vue";
export default {
components: { Regionalalarm, MonitoringpointAlarm, AlarmStatistics },
data() {
return {
vh: "",
activeName: "first",
device: "",
};
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio;
this.vh = window.sessionStorage.getItem("appheight") - 135 + "px";
},
handleClick(tab, event) {
// console.log(tab, event);
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.block {
position: absolute;
right: 10px;
bottom: 10px;
}
</style>

View File

@@ -0,0 +1,140 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval ref="Timeinterval" :interval="4" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" icon="el-icon-search" @click="researchFn">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="dc">导出</el-button>
</el-form-item>
</el-form>
<el-row>
<el-col :span="24">
<vxe-table
size="mini"
:row-config="{ isCurrent: true, isHover: true }"
border
stripe
:data="alarmStatisticsData"
:height="height"
ref="classification33"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<vxe-table-colgroup
title="单位"
align="center"
field="orgName"
min-width="150"
></vxe-table-colgroup>
<vxe-table-colgroup
title="在线监测点数(个)"
align="center"
min-width="150"
field="onlineMonitorCount"
></vxe-table-colgroup>
<vxe-table-colgroup
title="告警监测点数(个)"
align="center"
min-width="150"
field="alarmMonitorCount"
></vxe-table-colgroup>
<vxe-table-colgroup
title="告警监测点占比(%)"
align="center"
min-width="150"
field="alarmMonitorRate"
></vxe-table-colgroup>
<vxe-table-colgroup
title="告警监测点占比同比(%)"
align="center"
min-width="150"
field="alarmMonitorRateYoy"
></vxe-table-colgroup>
</vxe-table>
</el-col>
</el-row>
</div>
</template>
<script>
import Area from '@/views/components/Area/Area.vue'
import Timeinterval from '@/views/components/Timeinterval.vue'
import { getAllRStatPwAlarmCountList } from '@/api/Distributionnetwork-analysis/IndicatorAlarmStatistics/IndicatorAlarmStatistics'
export default {
components: { Area, Timeinterval },
data() {
return {
id: JSON.parse(window.sessionStorage.getItem('Info')).deptId,
kai: true,
start: '',
end: '',
vh: '',
height: null,
isLoading: false,
alarmStatisticsData: [],
device: '',
timeOptions: [{ label: '周', value: 4 }]
}
},
created() {},
mounted() {
this.device = window.devicePixelRatio
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.alarmStatistics()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.height = window.sessionStorage.getItem('appheight') - 175
},
dc() {
this.$refs.classification33.exportData({
filename: 'export1', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
isFooter: true,
data: this.alarmStatisticsData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
},
//获取数据
alarmStatistics() {
this.isLoading = true
getAllRStatPwAlarmCountList({
endTime: this.$refs.Timeinterval.timeValue[1],
startTime: this.$refs.Timeinterval.timeValue[0],
id: this.id
}).then(res => {
this.isLoading = false
this.alarmStatisticsData = res.data
})
},
// 切换选项
handleNodeClick(data) {
this.id = data.id
},
//查询
researchFn() {
this.alarmStatistics()
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,402 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval ref="Timeinterval" @time="time" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item label="监测点类别:">
<el-select v-model="receiveUserId" clearable placeholder="请选择接监测点类别">
<el-option
v-for="item in ImplementationPeople"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" icon="el-icon-search" @click="researchFn">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="dc">导出</el-button>
</el-form-item>
</el-form>
<el-row>
<el-col :span="24">
<vxe-table
size="mini"
:row-config="{ isCurrent: true, isHover: true }"
border
stripe
ref="classification22"
:data="monitoringpointAlarmData"
:height="height"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<vxe-table-colgroup
title="所属单位"
field="orgName"
align="center"
show-overflow
min-width="200"
></vxe-table-colgroup>
<vxe-table-colgroup
title="所属变电站"
field="powerName"
align="center"
show-overflow
min-width="100"
></vxe-table-colgroup>
<vxe-table-colgroup
title="所属台区"
field="powerDistributionAreaName"
align="center"
show-overflow
min-width="100"
></vxe-table-colgroup>
<vxe-table-colgroup
title="用户名称"
field="powerClientName"
align="center"
show-overflow
min-width="100"
></vxe-table-colgroup>
<vxe-table-colgroup
title="监测点类别"
field="monitorSort"
align="center"
show-overflow
min-width="120"
></vxe-table-colgroup>
<vxe-table-colgroup
title="监测点电压等级"
field="voltageLevel"
align="center"
show-overflow
min-width="150"
></vxe-table-colgroup>
<vxe-table-colgroup title="稳态指标告警情况" align="center" show-overflow>
<vxe-table-colgroup title="电压偏差" align="center" show-overflow>
<vxe-table-colgroup title="告警情况" min-width="90" align="center" show-overflow>
<template slot-scope="scope">
<span>{{ scope.row.vdevAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="vdevSeverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="频率偏差" align="center" show-overflow>
<vxe-table-colgroup
title="告警情况"
min-width="90"
field="freqAlarmInfo"
align="center"
show-overflow
>
<template slot-scope="scope">
<span>{{ scope.row.freqAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="freqSeverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="三相电压不平衡度" align="center" show-overflow>
<vxe-table-colgroup
title="告警情况"
min-width="90"
field="unbalanceAlarmInfo"
align="center"
show-overflow
>
<template slot-scope="scope">
<span>{{ scope.row.unbalanceAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="unbalanceSeverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="谐波电压" align="center" show-overflow>
<vxe-table-colgroup
title="告警情况"
min-width="90"
field="valarmInfo"
align="center"
show-overflow
>
<template slot-scope="scope">
<span>{{ scope.row.valarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="vseverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="长时闪变" align="center" show-overflow>
<vxe-table-colgroup
title="告警情况"
min-width="90"
field="flickerAlarmInfo"
align="center"
show-overflow
>
<template slot-scope="scope">
<span>{{ scope.row.flickerAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="flickerSeverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="暂态指标告警情况" align="center" show-overflow>
<vxe-table-colgroup title="电压暂降" align="center" show-overflow>
<vxe-table-colgroup
title="告警情况"
field="sagAlarmInfo"
align="center"
show-overflow
min-width="90"
>
<template slot-scope="scope">
<span>{{ scope.row.sagAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="sagSeverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="短时中断" align="center" show-overflow>
<vxe-table-colgroup
title="告警情况"
field="interruptAlarmInfo"
align="center"
show-overflow
min-width="90"
>
<template slot-scope="scope">
<span>{{ scope.row.interruptAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="严重度"
min-width="90"
field="interruptSeverity"
align="center"
show-overflow
></vxe-table-colgroup>
</vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup
title="稳态指标评级结果"
field="harmonicTypeGrade"
align="center"
show-overflow
min-width="160"
>
<template slot-scope="scope">
<span>
{{
scope.row.harmonicTypeGrade == 0
? '较差 '
: scope.row.harmonicTypeGrade == 1
? '中等'
: '较好'
}}
</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="暂态指标评级结果"
field="eventTypeGrade"
align="center"
show-overflow
min-width="160"
>
<template slot-scope="scope">
<span>
{{
scope.row.eventTypeGrade == 0
? '较差 '
: scope.row.eventTypeGrade == 1
? '中等'
: '较好'
}}
</span>
</template>
</vxe-table-colgroup>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="formData.pageNum"
:page-sizes="[20, 30, 50, 100]"
:page-size="formData.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</el-col>
</el-row>
</div>
</template>
<script>
import Area from '@/views/components/Area/Area.vue'
import { dicData } from '@/assets/commjs/dictypeData'
import Timeinterval from './Timeslot.vue'
import { getPwRMpMonitorAlarmCountMList } from '@/api/Distributionnetwork-analysis/IndicatorAlarmStatistics/IndicatorAlarmStatistics'
export default {
components: { Area, Timeinterval },
data() {
return {
id: JSON.parse(window.sessionStorage.getItem('Info')).deptId,
kai: true,
receiveUserId: '',
start: '',
end: '',
vh: '',
height: null,
isLoading: false,
valuePoint: '',
formData: {
pageNum: 1,
pageSize: 20
},
total: undefined,
monitoringpointAlarmData: [],
ImplementationPeople: [],
device: '',
typeList: '',
timeOptions: [{ label: '月份', value: 3 }]
}
},
created() {
this.getclassificationData()
},
mounted() {
this.device = window.devicePixelRatio
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.height = window.sessionStorage.getItem('appheight') - 215
},
//获取类型
getclassificationData() {
//监测点类别
this.ImplementationPeople = dicData('Line_Sort', [])
},
dc() {
this.$refs.classification22.exportData({
filename: 'export1', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
isFooter: true,
data: this.monitoringpointAlarmData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
},
time(val) {
;(this.start = val[0]), (this.end = val[1])
this.type = val[2]
if (this.kai) {
this.monitoringpointAlarm()
}
},
//获取数据
monitoringpointAlarm() {
this.isLoading = true
getPwRMpMonitorAlarmCountMList({
endTime: this.end,
startTime: this.start,
id: this.id,
pageNum: this.formData.pageNum,
pageSize: this.formData.pageSize,
measurementPointName: this.receiveUserId
}).then(res => {
this.isLoading = false
var code = 'Line_Sort'
this.typeList = dicData(code, [])
let a = dicData('Dev_Voltage', [])
// console.log(res.data,'RES.DATA',this.typeList,'typrlist')
res.data.records.forEach(i => {
i.monitorSort
this.typeList.forEach(l => {
if (l.id == i.monitorSort) {
i.monitorSort = l.label
}
})
a.forEach(g => {
if (g.id == i.voltageLevel) {
i.voltageLevel = g.label
}
})
})
this.monitoringpointAlarmData = res.data.records
this.total = res.data.total
})
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.formData.pageSize = val
this.monitoringpointAlarm()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.formData.pageNum = val
this.monitoringpointAlarm()
},
// 切换选项
handleNodeClick(data) {
this.id = data.id
},
//查询
researchFn() {
this.monitoringpointAlarm()
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,262 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval ref="Timeinterval" @time="time" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" icon="el-icon-search" @click="researchFn">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="dc">导出</el-button>
</el-form-item>
</el-form>
<el-row>
<el-col :span="24">
<vxe-table
size="mini"
:row-config="{ isCurrent: true, isHover: true }"
border
stripe
ref="classification1"
:data="alarmStatisticsData"
:height="height"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<vxe-table-colgroup
title="单位"
field="orgName"
align="center"
min-width="150"
show-overflow
></vxe-table-colgroup>
<vxe-table-colgroup title="稳态指标告警情况" align="center">
<vxe-table-colgroup title="电压偏差" min-width="120" align="center">
<vxe-table-colgroup title="告警情况" min-width="120" align="center">
<template slot-scope="scope">
<span>{{ scope.row.vdevAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="超标占比(%)"
min-width="120"
field="vdevAlarmRatio"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="频率偏差" align="center">
<vxe-table-colgroup title="告警情况" min-width="120" field="freqAlarmInfo" align="center">
<template slot-scope="scope">
<span>{{ scope.row.freqAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="超标占比(%)"
min-width="120"
field="freqAlarmRatio"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="三相电压不平衡度" align="center">
<vxe-table-colgroup
title="告警情况"
min-width="120"
field="unbalanceAlarmInfo"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.unbalanceAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="超标占比(%)"
min-width="120"
field="unbalanceAlarmRatio"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="谐波电压" align="center">
<vxe-table-colgroup title="告警情况" min-width="120" field="valarmInfo" align="center">
<template slot-scope="scope">
<span>{{ scope.row.valarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="超标占比(%)"
min-width="120"
field="valarmRatio"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="长时闪变" align="center">
<vxe-table-colgroup
title="告警情况"
min-width="120"
field="flickerAlarmInfo"
align="center"
>
<template slot-scope="scope">
<span>{{ scope.row.flickerAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="超标占比(%)"
min-width="120"
field="flickerAlarmRatio"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="暂态指标告警情况" align="center">
<vxe-table-colgroup title="电压暂降" align="center">
<vxe-table-colgroup title="告警情况" field="sagAlarmInfo" align="center" min-width="130">
<template slot-scope="scope">
<span>{{ scope.row.sagAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="平均发生次数"
min-width="120"
field="sagAlarmAvgCount"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup title="短时中断" align="center">
<vxe-table-colgroup
title="告警情况"
field="interruptAlarmInfo"
align="center"
min-width="120"
>
<template slot-scope="scope">
<span>{{ scope.row.interruptAlarmInfo == 0 ? '是' : '否' }}</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup
title="平均发生次数"
min-width="120"
field="interruptAlarmAvgCount"
align="center"
></vxe-table-colgroup>
</vxe-table-colgroup>
</vxe-table-colgroup>
<vxe-table-colgroup
title="稳态指标评级结果"
field="harmonicTypeGrade"
align="center"
min-width="160"
>
<template slot-scope="scope">
<span>
{{
scope.row.harmonicTypeGrade == 0
? '较差 '
: scope.row.harmonicTypeGrade == 1
? '中等'
: '较好'
}}
</span>
</template>
</vxe-table-colgroup>
<vxe-table-colgroup title="暂态指标评级结果" field="eventTypeGrade" align="center" min-width="160">
<template slot-scope="scope">
<span>
{{
scope.row.eventTypeGrade == 0
? '较差 '
: scope.row.eventTypeGrade == 1
? '中等'
: '较好'
}}
</span>
</template>
</vxe-table-colgroup>
</vxe-table>
</el-col>
</el-row>
</div>
</template>
<script>
import Area from '@/views/components/Area/Area.vue'
import Timeinterval from './Timeslot.vue'
import { getPwAllRStatAreaAlarmCountMList } from '@/api/Distributionnetwork-analysis/IndicatorAlarmStatistics/IndicatorAlarmStatistics'
export default {
components: { Area, Timeinterval },
data() {
return {
id: JSON.parse(window.sessionStorage.getItem('Info')).deptId,
kai: true,
start: '',
end: '',
vh: '',
height: null,
isLoading: false,
alarmStatisticsData: [],
device: '',
timeOptions: [{ label: '月份', value: 3 }]
}
},
created() {},
mounted() {
this.device = window.devicePixelRatio
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.height = window.sessionStorage.getItem('appheight') - 175
},
dc() {
this.$refs.classification1.exportData({
filename: 'export1', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
isFooter: true,
data: this.alarmStatisticsData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
},
time(val) {
;(this.start = val[0]), (this.end = val[1])
this.type = val[2]
if (this.kai) {
this.alarmStatistics()
}
},
//获取数据
alarmStatistics() {
this.kai = false
this.isLoading = true
getPwAllRStatAreaAlarmCountMList({
endTime: this.end,
startTime: this.start,
id: this.id
}).then(res => {
this.isLoading = false
this.alarmStatisticsData = res.data
})
},
// 切换选项
handleNodeClick(data) {
this.id = data.id
},
//查询
researchFn() {
this.alarmStatistics()
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,793 @@
<template>
<div>
<el-form :inline="true" :model="ruleForm" class="demo-form-inline">
<el-form-item label="时间间隔:">
<el-select
style="width: 90px;"
v-model="intervald"
@change="interchange"
placeholder="请选择"
>
<el-option
v-for="item in timeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker
style="width: 230px;"
:disabled="disabled"
:readonly="pickDisabled"
:clearable="false"
v-model="timeValue"
:picker-options="pickerOptions"
type="daterange"
value-format="yyyy-MM-dd"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
:disabled="backDisabled"
type="primary"
icon="el-icon-d-arrow-left"
@click="preClick"
></el-button>
<el-button @click="nowTime" type="primary" icon="el-icon-video-pause"
>当前</el-button
>
<el-button
:disabled="preDisabled"
type="primary"
icon="el-icon-d-arrow-right"
@click="back"
></el-button>
</el-form-item>
</el-form>
<!-- <el-button
@click="querfromdata"
type="primary"
icon="el-icon-search"
style="margin-left: 10px"
>查询</el-button
> -->
</div>
</template>
<script>
export default {
name: "index4",
props: {
name: {
type: String,
default: undefined,
},
path: {
type: String,
default: undefined,
},
tablename: {
type: String,
default: undefined,
},
interval: {
type: Number,
default: undefined,
},
type: {
type: Number,
default: undefined,
},
falg: {
type: Boolean,
default: false,
},
query: {
type: Boolean,
default: false,
},
thb: {
type: Boolean,
default: false,
},
},
watch: {
intervald(val) {
if (val != 5) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
this.timeValue = [startTime, endTime];
this.pickDisabled = false;
this.buttonShow = true;
} else {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
this.timeValue = [startTime, endTime];
this.buttonShow = false;
this.pickDisabled = false;
}
},
},
data() {
return {
ruleForm:{},
disabled: true,
buttonShow: true, //向前向后按钮显示隐藏控制按钮
pickDisabled: false, //时间组件只读控制se,
falg1: true,
timeOptions: [
{ label: "年份", value: 1 },
{ label: "季度", value: 2 },
{ label: "月份", value: 3 },
],
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
intervald:3,
tablenamed: this.tablename,
timeValue: [],
timehbValue: [],
backDisabled: false,
preDisabled: true,
huanbibiFalg: false,
tonbiFalg: false,
timeFlag: 0,
};
},
created() {},
mounted() {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
// console.log(endTime,startTime,'endtime','startTime')
this.$store.commit("sagServerity/SET_TIMEINTERVAL",[startTime,endTime] )
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
if (this.type == 2) {
this.huangbiyear();
} else if (!this.type) {
this.querfromdata();
}
},
methods: {
interchange(val) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
// console.log(endTime,startTime,'endtime','startTime')
this.$store.commit("sagServerity/SET_TIMEINTERVAL",[startTime,endTime] )
this.$emit("time",[startTime,endTime,val] );
// console.log(val,'val')
if (val == 1 || val == 2) {
this.timeFlag = 0;
} else {
this.timeFlag = 1;
}
// console.log(this.timeFlag);
this.intervald = val;
if (val == 5) {
this.tablenamed == "tab1";
this.disabled = false;
} else {
this.tablenamed == "tab2";
this.disabled = true;
}
},
// 获取当前日期,精确到日
getEndTime() {
var now = new Date();
var sep = "-";
var year = now.getFullYear();
var month = now.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var date = now.getDate();
if (date < 10) {
date = "0" + date;
}
// 拼接当前的日期
var endTime = year + sep + month + sep + date;
return endTime;
},
// 获取起始日期
getStartTime(interval, endTime) {
var sep = "-";
var arr = endTime.split("-");
var year = arr[0];
var month = arr[1];
var date = arr[2];
// 按月份间隔
if (interval == 3) {
date = "01";
// 按季度间隔
} else if (interval == 2) {
if ((month > 0) & (month < 4)) {
// 第一季度
month = "01";
date = "01";
} else if (month > 3 && month < 7) {
// 第二季度
month = "04";
date = "01";
} else if (month > 6 && month < 10) {
// 第三季度
month = "07";
date = "01";
} else {
// 第四季度
month = "10";
date = "01";
}
} else if (interval == 1) {
month = "01";
date = "01";
} else if (interval == "半年") {
if (month < 7) {
month = "01";
date = "01";
} else {
month = "07";
date = "01";
}
} else if (interval == 4) {
//周
var start = new Date(year, month - 1, date);
var dayOfWeek = start.getDay() == 0 ? 7 : start.getDay(); // 如果为周日则置为7天
start.setDate(start.getDate() - dayOfWeek + 1); // 计算开始时间
if (this.formatTime(new Date()) != endTime) {
// 如果结束时间不是当前时间
var end = new Date(start);
end.setDate(end.getDate() + 6);
// $("#endTime").val(this.formatTime(end));
}
return this.formatTime(start);
}
var startTime = year + sep + month + sep + date;
return startTime;
},
// 时间格式化
formatTime(time) {
return (
time.getFullYear() +
"-" +
(time.getMonth() + 1 < 10 ? "0" : "") +
(time.getMonth() + 1) +
"-" +
(time.getDate() < 10 ? "0" : "") +
time.getDate()
);
},
//向前
preClick() {
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//向后
back() {
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
var now = new Date();
// 获取当前年份
var presentY = now.getFullYear();
// 获取当前月份
var presentM = now.getMonth() + 1;
// 获取当前日期
var presentD = now.getDate();
if (interval == 3) {
if (month == 12) {
year = year + 1;
// 年份进位后,大于当前的年份,是不科学的
if (presentY < year) {
startTime = presentY + "-12-01";
if (presentD < 10) {
endTime = presentY + "-12" + "-0" + presentD;
} else {
endTime = presentY + "-12" + "-" + presentD;
}
// 年份进位后,等于当前的年份
} else if (presentY == year) {
startTime = year + "-01-01";
if (presentM > 1) {
endTime = year + "-01-31";
} else {
if (presentD < 10) {
endTime = year + "-01" + "-0" + presentD;
} else {
endTime = year + "-01" + "-" + presentD;
}
}
// 年份进位后,依旧小于当前的年份
} else {
startTime = year + "-01-01";
endTime = year + "-01-31";
}
} else {
month = month + 1;
// 年份等于当前年份
if (presentY == year) {
// 月份超过当前月份,是不科学的
if (month >= presentM) {
if (presentM < 10) {
startTime = year + "-0" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
startTime = year + "-" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
// 年份小于当前的年份
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
}
} else if (interval == 2) {
// 前进需要年份进位
if (month == 10) {
year = year + 1;
// 年份进位后大于当前年份是不科学的
if (year > presentY) {
startTime = presentY + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
} else if (year == presentY) {
startTime = year + "-01-01";
// 当前月份大约3月份
if (presentM > 3) {
endTime = year + "-03-31";
} else {
// 当前月份也在第一季度里
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
}
} else {
startTime = year + "-01-01";
endTime = year + "-03-31";
}
} else {
month = month + 3;
// 季度进位后,超过当前月份是不科学的
if (year == presentY) {
if (month >= presentM) {
// 当季度进位后大于当前月,以当前月的时间显示季度
if (presentM > 0 && presentM < 4) {
// 第一季度
startTime = year + "-01-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 3 && presentM < 7) {
// 第二季度
startTime = year + "-04-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 6 && presentM < 10) {
// 第三季度
startTime = year + "-07-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
// 第四季度
startTime = year + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
} else {
startTime = year + "-0" + month + "-01";
}
month = month + 2;
if (month >= presentM) {
endTime = this.getEndTime();
} else {
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
} else {
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
}
}
} else if (interval == 5) {
} else if (interval == 4) {
//根据开始时间推
var start = new Date(year, month - 1, date);
start.setDate(start.getDate() + 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
if (parseInt((end - new Date()) / 1000 / 60) > 24) {
//相差小时大于24小时即超过当天置为当天日期
endTime = this.formatTime(new Date());
}
} else {
year = year + 1;
// 年份进位后大于当前年份,是不科学的
if (year >= presentY) {
startTime = presentY + "-01-01";
if (presentM < 10) {
if (presentD < 10) {
endTime = presentY + "-0" + presentM + "-0" + presentD;
} else {
endTime = presentY + "-0" + presentM + "-" + presentD;
}
} else {
endTime = presentY + "-" + presentM + "-" + presentD;
}
} else {
startTime = year + "-01-01";
endTime = year + "-12-31";
}
}
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//当前按钮点击事件
nowTime() {
let interval = this.intervald;
let endTime = this.getEndTime();
let startTime = this.getStartTime(interval, endTime);
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
let temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//判断向后按钮
timeStatus(temp, endTime) {
// 判断next按钮的状态
if (temp == endTime) {
this.preDisabled = true;
} else {
this.preDisabled = false;
}
},
// 获取月份的天数
getDays(year, month) {
let max = new Date(year, month, 0).getDate();
return max;
},
querfromdata() {
//type用于区分是按钮触发还是钩子函数触发 1按钮触发 underfind 钩子触发
if (!this.type) {
var data = this.timeValue;
var timehbValue = "";
this.$emit("querfromdata", data, timehbValue, this.intervald);
} else if (this.type == 2) {
this.huangbiyear();
}
},
goto() {
this.$router.push({
path: "/harmonic-boot/algorithm",
query: { name: this.name, path: this.path },
});
},
//环比
huangbiyear() {
this.huanbibiFalg = true;
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timehbValue = [startTime, endTime];
var data = this.timeValue;
var timehbValue = this.timehbValue;
// debugger
this.$emit("querfromdata", data, timehbValue, interval);
// 判断向后键的状态
// var temp = this.getEndTime();
//this.timeStatus(temp, endTime);
},
//同比
tongbiyear() {
this.tonbiFalg = true;
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
year = year - 1;
if (month <= 10) {
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year - 1, month, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
year = year - 1;
if (month < 10) {
startTime = year + "-0" + month + "-01";
} else {
startTime = year + "-" + month + "-01";
}
month = month + 2;
if (month <= 10) {
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timehbValue = [startTime, endTime];
var data = this.timeValue;
var timehbValue = this.timehbValue;
this.$emit("querfromdata", data, timehbValue, interval);
},
},
};
</script>
<style lang="scss" scoped>
.spanColor {
color: $themeColor;
}
</style>

View File

@@ -0,0 +1,356 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area" class="box"></Area>
</el-form-item>
<el-form-item>
<Timeinterval @time="time" ></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="alarmdetails"
>查询</el-button
>
<el-button type="primary" icon="el-icon-download" @click="dc"
>导出</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>
<div class="container" id="container">
<i @click="closeHandle" class="el-icon-circle-close coles"></i>
<el-form :inline="true" label-width="110px">
<el-form-item label="告警类型:" class="box1">
<el-select
v-model.trim="form.alarmType"
placeholder="请选择"
clearable
multiple
collapse-tags
>
<el-option
v-for="item in notify"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="监测点类别:" class="box1">
<el-select
v-model="form.monitorSort"
clearable
multiple
collapse-tags
placeholder="请选择"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="监测点:" class="box">
<el-input
v-model.trim="form.valuePoint"
placeholder="请输入"
clearable
></el-input>
</el-form-item>
</el-form>
</div>
<el-row>
<el-col :span="24">
<vxe-table
size="mini"
:row-config="{ isCurrent: true, isHover: true }"
border
stripe
ref="classification7"
:data="alarmdetailsData"
:height="height"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellstyle"
>
<template v-for="(item, index) in tableHeaderAlarmdetails">
<vxe-table-colgroup
:field="item.prop"
:title="item.label"
:key="index"
:min-width="item.width"
show-overflow
align="center"
>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="alarmdetailsData.length"
class="mt10"
>
</el-pagination>
</el-col>
</el-row>
</div>
</template>
<script>
import Area from "@/views/components/Area/Area.vue";
import Timeinterval from "./AlarmStatistics/Timeslot.vue";
import { getAlarmDetailList } from "@/api/Distributionnetwork-analysis/IndicatorAlarmStatistics/IndicatorAlarmStatistics";
import { dicData } from "@/assets/commjs/dictypeData";
export default {
components: { Area, Timeinterval },
data() {
return {
id: JSON.parse(window.sessionStorage.getItem("Info")).deptId,
kai: true,
start: "",
end: "",
vh: "",
height: null,
isLoading: false,
view:false,
form: {
alarmType: "", //告警类型
monitorSort: "", //监测点类别
valuePoint: "", //监测点
},
//监测点类别数据
typeList: [],
//告警类型
notify: [],
tableHeaderAlarmdetails: [
{ prop: "orgName", label: "单位", width: 160 },
{ prop: "powerName", label: "所属变电站", width: 100 },
{ prop: "powerDistributionAreaName", label: "所属台区", width: 100 },
{ prop: "powerClientName", label: "用户名称", width: 100 },
{ prop: "measurementPointName", label: "监测点名称", width: 100 },
{ prop: "dataDate", label: "时间", width: 100 },
{ prop: "alarmInfo", label: "告警描述", width: 100 },
{ prop: "alarmType", label: "告警类型", width: 100 },
{ prop: "voltageLevel", label: "监测点电压等级(kV)", width: 140 },
{ prop: "monitorSort", label: "监测点类别", width: 100 },
],
alarmdetailsData: [],
device: "",
currentPage: 1, // 当前页码
total: 0, // 总条数
pageSize: 20, // 每页的数据条数
fvh: "",
};
},
created() {
this.getclassificationData();
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio;
this.height = window.sessionStorage.getItem("appheight") - 170;
},
dc() {
this.$refs.classification7.exportData({
filename: "export1", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
isFooter: true,
data: this.alarmdetailsData, // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
});
},
time(val) {
(this.start = val[0]), (this.end = val[1]);
this.type = val[2];
if (this.kai) {
this.alarmdetails();
}
},
//获取类型
getclassificationData() {
//监测点类别
var code = "Line_Sort";
this.typeList = dicData(code, []);
//告警类型
var code1 = "alarm_Type";
this.notify = dicData(code1, []);
},
//获取主网运行指标统计数据
alarmdetails() {
this.isLoading = true;
getAlarmDetailList({
pageNum: this.currentPage,
pageSize: this.pageSize,
alarmType: this.form.alarmType.toString(),
endTime: this.end,
startTime: this.start,
id: this.id,
monitorName: this.form.valuePoint,
monitorSort: this.form.monitorSort.toString(),
}).then((res) => {
this.total = res.data.total;
let a = dicData("Dev_Voltage", []);
// console.log(this.notify,'ppoop')
res.data.records.forEach((i) => {
this.notify.forEach((l) => {
if (l.id == i.alarmType) {
i.alarmType = l.label;
}
});
this.typeList.forEach((l) => {
if (l.id == i.monitorSort) {
i.monitorSort = l.label;
}
});
a.forEach((l) => {
if (l.id == i.voltageLevel) {
i.voltageLevel = l.label;
}
});
});
this.isLoading = false;
this.alarmdetailsData = res.data.records;
});
},
// 切换选项
handleNodeClick(data) {
this.id = data.id;
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val;
this.alarmdetails();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val;
this.alarmdetails();
},
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";
}
},
cellstyle(row) {
// console.log(row);
if (
row.row.monitoringPoint == "Ⅱ类监测点" ||
row.row.monitoringPoint == "Ⅲ类监测点"
) {
row.row.substation = "/";
}
if (
row.row.monitoringPoint == "Ⅰ类监测点" ||
row.row.monitoringPoint == "Ⅲ类监测点"
) {
row.row.stationArea = "/";
}
if (
row.row.monitoringPoint == "Ⅰ类监测点" ||
row.row.monitoringPoint == "Ⅱ类监测点"
) {
row.row.userName = "/";
}
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
.container {
/* margin: auto; */
top: 0px;
right: 0;
width: 40%;
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>

View File

@@ -0,0 +1,793 @@
<template>
<div >
<el-form :inline="true" class="demo-form-inline">
<el-form-item label="时间间隔:">
<el-select
style="width: 90px;"
v-model="intervald"
@change="interchange"
placeholder="请选择"
>
<el-option
v-for="item in timeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-date-picker
style="width: 230px;"
:disabled="disabled"
:readonly="pickDisabled"
:clearable="false"
v-model="timeValue"
:picker-options="pickerOptions"
type="daterange"
value-format="yyyy-MM-dd"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
align="right"
>
</el-date-picker>
</el-form-item>
<el-form-item>
<el-button
:disabled="backDisabled"
type="primary"
icon="el-icon-d-arrow-left"
@click="preClick"
></el-button>
<el-button @click="nowTime" type="primary" icon="el-icon-video-pause"
>当前</el-button
>
<el-button
:disabled="preDisabled"
type="primary"
icon="el-icon-d-arrow-right"
@click="back"
></el-button>
</el-form-item>
</el-form>
<!-- <el-button
@click="querfromdata"
type="primary"
icon="el-icon-search"
style="margin-left: 10px"
>查询</el-button
> -->
</div>
</template>
<script>
export default {
name: "index4",
props: {
name: {
type: String,
default: undefined,
},
path: {
type: String,
default: undefined,
},
tablename: {
type: String,
default: undefined,
},
interval: {
type: Number,
default: undefined,
},
type: {
type: Number,
default: undefined,
},
falg: {
type: Boolean,
default: false,
},
query: {
type: Boolean,
default: false,
},
thb: {
type: Boolean,
default: false,
},
},
watch: {
intervald(val) {
if (val != 5) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
this.timeValue = [startTime, endTime];
this.pickDisabled = false;
this.buttonShow = true;
} else {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
this.timeValue = [startTime, endTime];
this.buttonShow = false;
this.pickDisabled = false;
}
},
},
data() {
return {
disabled: true,
buttonShow: true, //向前向后按钮显示隐藏控制按钮
pickDisabled: false, //时间组件只读控制se,
falg1: true,
timeOptions: [
{ label: "年份", value: 1 },
{ label: "季度", value: 2 },
{ label: "月份", value: 3 },
],
pickerOptions: {
shortcuts: [
{
text: "最近一周",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近一个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit("pick", [start, end]);
},
},
{
text: "最近三个月",
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit("pick", [start, end]);
},
},
],
},
intervald:3,
tablenamed: this.tablename,
timeValue: [],
timehbValue: [],
backDisabled: false,
preDisabled: true,
huanbibiFalg: false,
tonbiFalg: false,
timeFlag: 0,
};
},
created() {},
mounted() {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
// console.log(endTime,startTime,'endtime','startTime')
this.$store.commit("sagServerity/SET_TIMEINTERVAL",[startTime,endTime] )
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
if (this.type == 2) {
this.huangbiyear();
} else if (!this.type) {
this.querfromdata();
}
},
methods: {
interchange(val) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.intervald, endTime);
// console.log(endTime,startTime,'endtime','startTime')
this.$store.commit("sagServerity/SET_TIMEINTERVAL",[startTime,endTime] )
this.$emit("time",[startTime,endTime,val] );
// console.log(val,'val')
if (val == 1 || val == 2) {
this.timeFlag = 0;
} else {
this.timeFlag = 1;
}
// console.log(this.timeFlag);
this.intervald = val;
if (val == 5) {
this.tablenamed == "tab1";
this.disabled = false;
} else {
this.tablenamed == "tab2";
this.disabled = true;
}
},
// 获取当前日期,精确到日
getEndTime() {
var now = new Date();
var sep = "-";
var year = now.getFullYear();
var month = now.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var date = now.getDate();
if (date < 10) {
date = "0" + date;
}
// 拼接当前的日期
var endTime = year + sep + month + sep + date;
return endTime;
},
// 获取起始日期
getStartTime(interval, endTime) {
var sep = "-";
var arr = endTime.split("-");
var year = arr[0];
var month = arr[1];
var date = arr[2];
// 按月份间隔
if (interval == 3) {
date = "01";
// 按季度间隔
} else if (interval == 2) {
if ((month > 0) & (month < 4)) {
// 第一季度
month = "01";
date = "01";
} else if (month > 3 && month < 7) {
// 第二季度
month = "04";
date = "01";
} else if (month > 6 && month < 10) {
// 第三季度
month = "07";
date = "01";
} else {
// 第四季度
month = "10";
date = "01";
}
} else if (interval == 1) {
month = "01";
date = "01";
} else if (interval == "半年") {
if (month < 7) {
month = "01";
date = "01";
} else {
month = "07";
date = "01";
}
} else if (interval == 4) {
//周
var start = new Date(year, month - 1, date);
var dayOfWeek = start.getDay() == 0 ? 7 : start.getDay(); // 如果为周日则置为7天
start.setDate(start.getDate() - dayOfWeek + 1); // 计算开始时间
if (this.formatTime(new Date()) != endTime) {
// 如果结束时间不是当前时间
var end = new Date(start);
end.setDate(end.getDate() + 6);
// $("#endTime").val(this.formatTime(end));
}
return this.formatTime(start);
}
var startTime = year + sep + month + sep + date;
return startTime;
},
// 时间格式化
formatTime(time) {
return (
time.getFullYear() +
"-" +
(time.getMonth() + 1 < 10 ? "0" : "") +
(time.getMonth() + 1) +
"-" +
(time.getDate() < 10 ? "0" : "") +
time.getDate()
);
},
//向前
preClick() {
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//向后
back() {
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
var now = new Date();
// 获取当前年份
var presentY = now.getFullYear();
// 获取当前月份
var presentM = now.getMonth() + 1;
// 获取当前日期
var presentD = now.getDate();
if (interval == 3) {
if (month == 12) {
year = year + 1;
// 年份进位后,大于当前的年份,是不科学的
if (presentY < year) {
startTime = presentY + "-12-01";
if (presentD < 10) {
endTime = presentY + "-12" + "-0" + presentD;
} else {
endTime = presentY + "-12" + "-" + presentD;
}
// 年份进位后,等于当前的年份
} else if (presentY == year) {
startTime = year + "-01-01";
if (presentM > 1) {
endTime = year + "-01-31";
} else {
if (presentD < 10) {
endTime = year + "-01" + "-0" + presentD;
} else {
endTime = year + "-01" + "-" + presentD;
}
}
// 年份进位后,依旧小于当前的年份
} else {
startTime = year + "-01-01";
endTime = year + "-01-31";
}
} else {
month = month + 1;
// 年份等于当前年份
if (presentY == year) {
// 月份超过当前月份,是不科学的
if (month >= presentM) {
if (presentM < 10) {
startTime = year + "-0" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
startTime = year + "-" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
// 年份小于当前的年份
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
}
} else if (interval == 2) {
// 前进需要年份进位
if (month == 10) {
year = year + 1;
// 年份进位后大于当前年份是不科学的
if (year > presentY) {
startTime = presentY + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
} else if (year == presentY) {
startTime = year + "-01-01";
// 当前月份大约3月份
if (presentM > 3) {
endTime = year + "-03-31";
} else {
// 当前月份也在第一季度里
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
}
} else {
startTime = year + "-01-01";
endTime = year + "-03-31";
}
} else {
month = month + 3;
// 季度进位后,超过当前月份是不科学的
if (year == presentY) {
if (month >= presentM) {
// 当季度进位后大于当前月,以当前月的时间显示季度
if (presentM > 0 && presentM < 4) {
// 第一季度
startTime = year + "-01-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 3 && presentM < 7) {
// 第二季度
startTime = year + "-04-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 6 && presentM < 10) {
// 第三季度
startTime = year + "-07-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
// 第四季度
startTime = year + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
} else {
startTime = year + "-0" + month + "-01";
}
month = month + 2;
if (month >= presentM) {
endTime = this.getEndTime();
} else {
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
} else {
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
}
}
} else if (interval == 5) {
} else if (interval == 4) {
//根据开始时间推
var start = new Date(year, month - 1, date);
start.setDate(start.getDate() + 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
if (parseInt((end - new Date()) / 1000 / 60) > 24) {
//相差小时大于24小时即超过当天置为当天日期
endTime = this.formatTime(new Date());
}
} else {
year = year + 1;
// 年份进位后大于当前年份,是不科学的
if (year >= presentY) {
startTime = presentY + "-01-01";
if (presentM < 10) {
if (presentD < 10) {
endTime = presentY + "-0" + presentM + "-0" + presentD;
} else {
endTime = presentY + "-0" + presentM + "-" + presentD;
}
} else {
endTime = presentY + "-" + presentM + "-" + presentD;
}
} else {
startTime = year + "-01-01";
endTime = year + "-12-31";
}
}
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//当前按钮点击事件
nowTime() {
let interval = this.intervald;
let endTime = this.getEndTime();
let startTime = this.getStartTime(interval, endTime);
this.timeValue = [startTime, endTime];
this.$emit("time",[startTime,endTime,this.intervald] );
// 判断向后键的状态
let temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//判断向后按钮
timeStatus(temp, endTime) {
// 判断next按钮的状态
if (temp == endTime) {
this.preDisabled = true;
} else {
this.preDisabled = false;
}
},
// 获取月份的天数
getDays(year, month) {
let max = new Date(year, month, 0).getDate();
return max;
},
querfromdata() {
//type用于区分是按钮触发还是钩子函数触发 1按钮触发 underfind 钩子触发
if (!this.type) {
var data = this.timeValue;
var timehbValue = "";
this.$emit("querfromdata", data, timehbValue, this.intervald);
} else if (this.type == 2) {
this.huangbiyear();
}
},
goto() {
this.$router.push({
path: "/harmonic-boot/algorithm",
query: { name: this.name, path: this.path },
});
},
//环比
huangbiyear() {
this.huanbibiFalg = true;
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timehbValue = [startTime, endTime];
var data = this.timeValue;
var timehbValue = this.timehbValue;
// debugger
this.$emit("querfromdata", data, timehbValue, interval);
// 判断向后键的状态
// var temp = this.getEndTime();
//this.timeStatus(temp, endTime);
},
//同比
tongbiyear() {
this.tonbiFalg = true;
let interval = this.intervald;
let startTime = this.timeValue[0];
let endTime = this.timeValue[1];
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
year = year - 1;
if (month <= 10) {
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year - 1, month, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
year = year - 1;
if (month < 10) {
startTime = year + "-0" + month + "-01";
} else {
startTime = year + "-" + month + "-01";
}
month = month + 2;
if (month <= 10) {
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timehbValue = [startTime, endTime];
var data = this.timeValue;
var timehbValue = this.timehbValue;
this.$emit("querfromdata", data, timehbValue, interval);
},
},
};
</script>
<style lang="scss" scoped>
.spanColor {
color: $themeColor;
}
</style>

View File

@@ -0,0 +1,657 @@
<template>
<div >
<el-form :inline="true" class="demo-form-inline">
<!-- 时间段 -->
<el-form-item label="时间段:">
<el-select v-model="intervald" @change="interchange" placeholder="请选择">
<el-option
v-for="item in timeOptions"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
<!-- 时间 -->
<el-form-item>
<template style="display: inline;" v-if="buttonShow">
<el-button :disabled="backDisabled" type="primary" icon="el-icon-d-arrow-left" @click="preClick"></el-button>
<el-date-picker
:disabled="disabled"
:readonly="pickDisabled"
v-model="timeValue"
:picker-options="pickerOptions"
type="daterange"
value-format="yyyy-MM-dd"
range-separator=""
start-placeholder="开始日期"
end-placeholder="结束日期"
@click="nowTime"
align="right">
</el-date-picker>
<!-- <el-button @click="nowTime" type="primary">当前</el-button> -->
<el-button :disabled="preDisabled" type="primary" icon="el-icon-d-arrow-right" @click="back" ></el-button>
</template>
</el-form-item>
<!-- 查询导出 -->
<el-form-item>
<el-button type="primary" class="ml10" icon="el-icon-search">查询</el-button>
<el-button type="primary" icon="el-icon-download">导出</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
export default {
name: "TimeSlot",
props:{
name:{
type:String,
default:undefined
},
path:{
type:String,
default:undefined
},
tablename:{
type:String,
default:undefined
},
interval:{
type:Number,
default:undefined
},
type:{
type:Number,
default:undefined
},
falg:{
type:Boolean,
default:false
},
thb:{
type:Boolean,
default:false
}
},
watch: {
interval(val) {
if (val != 5) {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.interval, endTime)
this.timeValue = [startTime, endTime]
this.pickDisabled = false
this.buttonShow = true
} else {
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.interval, endTime)
this.timeValue = [startTime, endTime]
this.buttonShow = false
this.pickDisabled = false
}
}
},
data() {
return {
options: [{
value: '选项1',
label: '电铁'
}, {
value: '选项2',
label: '换流站'
}, {
value: '选项3',
label: '风电'
}, {
value: '选项4',
label: '光伏'
}, {
value: '选项5',
label: '其他非线性负荷'
},
{
value: '选项6',
label: '敏感重要高危用户'
},
{
value: '选项7',
label: '变电站'
}, {
value: '选项8',
label: '跨省关口'
},
{
value: '选项9',
label: '其他'
},
],
value: '',
options1: [{
value: '选项1',
label: '频率偏差'
}, {
value: '选项2',
label: '电压偏差'
}, {
value: '选项3',
label: '闪变'
}, {
value: '选项4',
label: '谐波电压'
}, {
value: '选项5',
label: '谐波电流'
},
{
value: '选项6',
label: '间谐波电压'
},{
value: '选项7',
label: '三相电压不平衡度'
},{
value: '选项8',
label: '负序电流'
},
{
value: '选项7',
label: '总稳态指标'
},
],
value1: '',
disabled:true,
buttonShow: true, //向前向后按钮显示隐藏控制按钮
pickDisabled: false,//时间组件只读控制se,
// falg1:true,
timeOptions: [
{label: '年份', value: 1},
{label: '季度', value: 2},
{label: '月份', value: 3},
{label: '周', value: 4},
{label: '自定义', value: 5},
// {label: '半年', value: 6},
],
pickerOptions: {
shortcuts: [ {
text: '今日',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一周',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近一个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 30);
picker.$emit('pick', [start, end]);
}
}, {
text: '最近三个月',
onClick(picker) {
const end = new Date();
const start = new Date();
start.setTime(start.getTime() - 3600 * 1000 * 24 * 90);
picker.$emit('pick', [start, end]);
}
}]
},
intervald:this.interval,
// tablenamed:this.tablename,
timeValue: [],
timehbValue:[],
backDisabled: false,
preDisabled: true,
// huanbibiFalg:false,
// tonbiFalg:false
};
},
created() {
},
mounted(){
let endTime = this.getEndTime();
let startTime = this.getStartTime(this.interval, endTime)
this.timeValue = [startTime, endTime]
if(this.type==2){
this.huangbiyear()
}else if(!this.type){
// this.querfromdata()
}
},
methods: {
interchange(val){
this.interval = val
if(val==5){
// this.tablenamed == 'tab1'
this.disabled = false
}else{
// this.tablenamed == 'tab2'
this.disabled = true
}
},
// 获取当前日期,精确到日
getEndTime() {
var now = new Date();
var sep = "-";
var year = now.getFullYear();
var month = now.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var date = now.getDate();
if (date < 10) {
date = "0" + date;
}
// 拼接当前的日期
var endTime = year + sep + month + sep + date;
return endTime;
},
// 获取起始日期
getStartTime(interval, endTime) {
var sep = "-";
var arr = endTime.split("-");
var year = arr[0];
var month = arr[1];
var date = arr[2];
// 按月份间隔
if (interval == 3) {
date = "01";
// 按季度间隔
} else if (interval == 2) {
if (month > 0 & month < 4) {// 第一季度
month = "01";
date = "01";
} else if (month > 3 && month < 7) {// 第二季度
month = "04";
date = "01";
} else if (month > 6 && month < 10) {// 第三季度
month = "07";
date = "01";
} else {// 第四季度
month = '10';
date = "01";
}
} else if (interval == 1) {
month = "01";
date = "01";
} else if (interval == "半年") {
if (month < 7) {
month = "01";
date = "01";
} else {
month = "07";
date = "01";
}
} else if (interval == 4) {
//周
var start = new Date(year, month - 1, date);
var dayOfWeek = (start.getDay() == 0) ? 7 : start.getDay(); // 如果为周日,则置为7天
start.setDate(start.getDate() - dayOfWeek + 1);// 计算开始时间
if (this.formatTime(new Date()) != endTime) { // 如果结束时间不是当前时间
var end = new Date(start);
end.setDate(end.getDate() + 6);
// $("#endTime").val(this.formatTime(end));
}
return this.formatTime(start);
}
var startTime = year + sep + month + sep + date;
return startTime;
},
//获取一个月有几天
getDays(year, month) {
let days = [31,28,31,30,31,30,31,31,30,31,30,31]
if ( (year % 4 ===0) && (year % 100 !==0 || year % 400 ===0) ) {
days[1] = 29
}
return days[month-1]
},
// 获取月份的天数
// getDays(year, month) {
// let max = new Date(year, month, 0).getDate();
// return max;
// },
// 时间格式化
formatTime(time) {
return time.getFullYear() + '-' + ((time.getMonth() + 1) < 10 ? '0' : '') + (time.getMonth() + 1) + '-' + (time.getDate() < 10 ? '0' : '') + time.getDate();
},
//向前
preClick() {
let interval = this.interval
let startTime = this.timeValue[0]
let endTime = this.timeValue[1]
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
//按月
if (interval == 3) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-12-01";
endTime = year + "-12-31";
} else if (month <= 10) {
month = month - 1;
startTime = year + "-0" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
month = month - 1;
startTime = year + "-" + month + "-01";
let day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
//按周
} else if (interval == 4) {
//根据开始时间推
let start = new Date(year, month - 1, date);
start.setDate(start.getDate() - 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
//按季度
} else if (interval == 2) {
// 换年份
if (month == 1) {
year = year - 1;
startTime = year + "-10-01";
endTime = year + "-12-31";
} else {
// 还是本年
month = month - 3;
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
//自定义
} else if (interval == 5) {
//按年
} else if (interval == 1) {
year = year - 1;
startTime = year + "-01-01";
endTime = year + "-12-31";
} else if (interval == 6) {
if (month <= 6) {
year = year - 1;
startTime = year + "-07-01";
endTime = year + "-12-31";
} else {
startTime = year + "-01-01";
endTime = year + "-06-30";
}
}
this.timeValue = [startTime, endTime]
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//向后
back() {
let interval = this.interval
let startTime = this.timeValue[0]
let endTime = this.timeValue[1]
let year = parseInt(startTime.substring(0, 4));
let month = parseInt(startTime.substring(5, 7));
let date = parseInt(startTime.substring(8, 10));
var now = new Date();
// 获取当前年份
var presentY = now.getFullYear()
// 获取当前月份
var presentM = now.getMonth() + 1
// 获取当前日期
var presentD = now.getDate()
if (interval == 3) {
if (month == 12) {
year = year + 1;
// 年份进位后,大于当前的年份,是不科学的
if (presentY < year) {
startTime = presentY + "-12-01";
if (presentD < 10) {
endTime = presentY + "-12" + "-0" + presentD;
} else {
endTime = presentY + "-12" + "-" + presentD;
}
// 年份进位后,等于当前的年份
} else if (presentY == year) {
startTime = year + "-01-01";
if (presentM > 1) {
endTime = year + "-01-31";
} else {
if (presentD < 10) {
endTime = year + "-01" + "-0" + presentD;
} else {
endTime = year + "-01" + "-" + presentD;
}
}
// 年份进位后,依旧小于当前的年份
} else {
startTime = year + "-01-01";
endTime = year + "-01-31";
}
} else {
month = month + 1;
// 年份等于当前年份
if (presentY == year) {
// 月份超过当前月份,是不科学的
if (month >= presentM) {
if (presentM < 10) {
startTime = year + "-0" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {
startTime = year + "-" + presentM + "-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
// 年份小于当前的年份
} else {
if (month < 10) {
startTime = year + "-0" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
} else {
startTime = year + "-" + month + "-01";
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
}
} else if (interval == 2) {
// 前进需要年份进位
if (month == 10) {
year = year + 1;
// 年份进位后大于当前年份是不科学的
if (year > presentY) {
startTime = presentY + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
} else if (year == presentY) {
startTime = year + "-01-01";
// 当前月份大约3月份
if (presentM > 3) {
endTime = year + "-03-31";
} else {
// 当前月份也在第一季度里
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
}
} else {
startTime = year + "-01-01";
endTime = year + "-03-31";
}
} else {
month = month + 3;
// 季度进位后,超过当前月份是不科学的
if (year == presentY) {
if (month >= presentM) {
// 当季度进位后大于当前月,以当前月的时间显示季度
if (presentM > 0 && presentM < 4) {// 第一季度
startTime = year + "-01-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 3 && presentM < 7) {// 第二季度
startTime = year + "-04-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else if (presentM > 6 && presentM < 10) {// 第三季度
startTime = year + "-07-01";
if (presentD < 10) {
endTime = year + "-0" + presentM + "-0" + presentD;
} else {
endTime = year + "-0" + presentM + "-" + presentD;
}
} else {// 第四季度
startTime = year + "-10-01";
if (presentD < 10) {
endTime = year + "-" + presentM + "-0" + presentD;
} else {
endTime = year + "-" + presentM + "-" + presentD;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
} else {
startTime = year + "-0" + month + "-01";
}
month = month + 2;
if(month>=presentM){
endTime =getEndTime();;
}else{
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
}
}
} else {
if (month == 10) {
startTime = year + "-" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-" + month + "-" + day;
} else {
startTime = year + "-0" + month + "-01";
month = month + 2;
var day = this.getDays(year, month);
endTime = year + "-0" + month + "-" + day;
}
}
}
} else if (interval == 5) {
} else if(interval == 4){
//根据开始时间推
var start = new Date(year,month - 1,date);
start.setDate(start.getDate() + 7);
startTime = this.formatTime(start);
var end = new Date(start);
end.setDate(start.getDate() + 6);
endTime = this.formatTime(end);
if(parseInt((end - new Date()) / 1000 / 60) > 24){ //相差小时大于24小时,即超过当天,置为当天日期
endTime = this.formatTime(new Date());
}
}else {
year = year + 1;
// 年份进位后大于当前年份,是不科学的
if (year >= presentY) {
startTime = presentY + "-01-01";
if (presentM < 10) {
if (presentD < 10) {
endTime = presentY + "-0" + presentM + "-0" + presentD;
} else {
endTime = presentY + "-0" + presentM + "-" + presentD;
}
} else {
endTime = presentY + "-" + presentM + "-" + presentD;
}
} else {
startTime = year + "-01-01";
endTime = year + "-12-31";
}
}
this.timeValue = [startTime, endTime]
// 判断向后键的状态
var temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//当前按钮点击事件
nowTime() {
let interval = this.interval
let endTime = this.getEndTime();
let startTime = this.getStartTime(interval, endTime);
this.timeValue = [startTime, endTime]
// 判断向后键的状态
let temp = this.getEndTime();
this.timeStatus(temp, endTime);
},
//判断向后按钮
timeStatus(temp, endTime) {
// 判断next按钮的状态
if (temp == endTime) {
this.preDisabled = true
} else {
this.preDisabled = false
}
},
}
}
</script>
<style lang="less" scoped>
</style>

View File

@@ -0,0 +1,59 @@
<template>
<div>
<el-row>
<el-col>
<el-tabs v-model="activeName" @tab-click="handleClick" :style="'height:' + vh + ';'">
<el-tab-pane label="监测点报告" name="first">
<MonitoringpointReport></MonitoringpointReport>
</el-tab-pane>
<el-tab-pane label="区域报告" name="second">
<Region />
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import MonitoringpointReport from '@/views/Distributionnetwork-analysis/components/StatisticalReport/Analysisreport/MonitoringpointReport.vue'
import Region from '@/views/Distributionnetwork-analysis/components/StatisticalReport/Analysisreport/Region.vue'
export default {
components: { MonitoringpointReport, Region },
data() {
return {
vh: undefined,
activeName: 'first'
}
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 80 + 'px'
},
handleClick(tab, event) {
// console.log(tab, event);
}
}
}
</script>
<style lang="less" scoped>
#pane-first {
padding: 0 10px !important;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.block {
margin-top: 10px;
}
</style>

View File

@@ -0,0 +1,133 @@
<template>
<div class="Inspection">
<el-row>
<el-col :span="24">
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item label="监测点:">
<el-input v-model.trim="form.a" placeholder="请输入" clearable></el-input>
</el-form-item>
<el-form-item>
<Area @click="handleNodeClick" ref="area" class="box"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">查询</el-button>
<!-- <el-button type="primary" icon="el-icon-download">导出</el-button> -->
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col class="left" :style="'height:' + vh + ';'" :span="5"><Tree ref="tree" /></el-col>
<el-col :span="19">
<el-tabs v-model.trim="form.activeName" @tab-click="handleClick" type="border-card">
<el-tab-pane label="非谐波" name="1" v-loading="loading"><Tab :list="list" /></el-tab-pane>
<el-tab-pane label="谐波电压" name="2" v-loading="loading"><Tab :list="list" /></el-tab-pane>
<el-tab-pane label="谐波电流" name="3" v-loading="loading"><Tab :list="list" /></el-tab-pane>
<el-tab-pane label="合格率" name="4" v-loading="loading"><Tab :list="list" /></el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Tree from './tree.vue'
import Tab from './tab.vue'
import { MonitoringPoint } from '@/api/MonitoringPoint.js'
import Area from '@/views/components/Area/Area.vue'
import Timeinterval from '../../../../components/Timeinterval.vue'
// import { dictypeData } from "@/api/user";
export default {
components: { Tree, Tab, Area, Timeinterval },
props: {},
name: 'InspectionPoint',
data() {
return {
vh: undefined,
list: [],
loading: true,
form: {
monitor: '', // 所属单位
company: '', //监测点
time: '', // 统计日期
id: '', //树选中的id
activeName: '1' //区分是那个节点
},
//所属单位数据数据
CompanyList: []
}
},
created() {
// this.dictionaries()
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 195 + 'px'
},
handleClick(tab, event) {
this.onSubmit()
},
// 字典表
// dictionaries() {
// dictypeData().then(res => {
// res.data.forEach(item => {
// if (item.name == "单位") {
// this.CompanyList = item.children;
// }
// });
// });
// },
// 切换选项
handleNodeClick(data) {
// console.log(data);
},
// 表格查询
onSubmit() {
this.loading = true
this.form.id = this.$refs['tree'].id
MonitoringPoint(this.form).then(res => {
this.list = res.data
this.loading = false
})
}
},
computed: {
vhs() {
return this.vh - 800
}
},
watch: {}
}
</script>
<style lang="less" scoped>
.Inspection {
.left {
padding: 10px 0;
overflow-y: auto;
border: 1px solid #000;
}
}
// ::v-deep .el-form-item {
// margin-bottom: 0;
// }
</style>

View File

@@ -0,0 +1,249 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area" class="box"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="ml10"
icon="el-icon-search"
@click="onSubmit"
>查询</el-button
>
<!-- <el-button
type="primary"
class="ml10"
icon="el-icon-circle-plus-outline"
>导出</el-button
> -->
</el-form-item>
</el-form>
<el-table
stripe
:data="list.data"
:height="vh"
border
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderNetwork">
<el-table-column
:prop="item.prop"
:label="item.label"
:key="index"
:min-width="item.width"
>
<template v-for="(item, index) in item.children">
<el-table-column
:prop="item.prop"
:label="item.label"
:key="index"
:min-width="item.width"
></el-table-column>
</template>
</el-table-column>
</template>
</el-table>
<el-pagination
background
class="mt10"
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="form.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="form.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="list.total"
>
</el-pagination>
</div>
</template>
<script>
import { RegionalReports } from "@/api/MonitoringPoint.js";
// import { dictypeData } from "@/api/user";
import Area from "@/views/components/Area/Area.vue";
import Timeinterval from "../../../../components/Timeinterval.vue";
export default {
components: { Area, Timeinterval },
props: {},
data() {
return {
form: {
company: "", //所属单位
time: "", //时间
pageNum: 1,
pageSize: 20,
},
vh: undefined,
isLoading: false,
//全网水平评价表头
tableHeaderNetwork: [
{ prop: "company", label: "单位" },
{ prop: "monitoringPoint", label: "监测点总数", width: "100" },
{
prop: "",
label: "当月",
children: [
{ prop: "monthMonitor", label: "在线监测点", width: "100px" },
{
prop: "monthTransientMonitor",
label: "监测到暂态时间监测点数",
width: "110px",
},
{ prop: "monthTransientTimes", label: "暂态事件发生次数" },
{ prop: "monthTransientFrequency", label: "暂态事件发生频次" },
{
prop: "monthProportion",
label: "谐波电流超标监测点占比",
width: "110px",
},
{
prop: "monthSagMonitor",
label: "监测到暂降事件监测点数",
width: "110px",
},
{ prop: "monthSagTimes", label: "暂降事件发生次数" },
{ prop: "monthSagFrequency", label: "暂降事件发生频次" },
{
prop: "monthRiseMonito",
label: "监测到暂升事件监测点数",
width: "110px",
},
{ prop: "monthRisetTimes", label: "暂升事件发生次数" },
{ prop: "monthRiseFrequency", label: "暂升事件发生频次" },
{
prop: "monthInterruptMonitor",
label: "监测到中断事件监测点数",
width: "110px",
},
],
},
{
prop: "",
label: "当年",
children: [
{
prop: "yearTransientMonitor",
label: "累计监测到暂态事件监测点数",
width: "120px",
},
{
prop: "yearTransientTimes",
label: "累计暂态事件发生次数",
width: "110px",
},
{
prop: "yearTransientFrequency",
label: "累计暂态事件发生频次",
width: "110px",
},
{
prop: "yearSagMonitor",
label: "累计监测到暂降事件监测点数",
width: "120px",
},
{
prop: "yearSagTimes",
label: "累计暂降事件发生次数",
width: "110px",
},
{
prop: "yearSagFrequency",
label: "累计暂降事件发生频次",
width: "110px",
},
{
prop: "yearRiseMonito",
label: "累计监测到暂升事件监测点数",
width: "120px",
},
{
prop: "yearRisetTimes",
label: "累计暂升事件发生次数",
width: "110px",
},
{
prop: "yearRiseFrequency",
label: "累计暂升事件发生频次",
width: "110px",
},
],
},
],
//所属单位数据数据
CompanyList: [],
list: [],
};
},
created() {
// this.dictionaries()
this.onSubmit();
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem("appheight") - 220;
},
// 字典表
// dictionaries() {
// dictypeData().then(res => {
// res.data.forEach(item => {
// if (item.name == "单位") {
// this.CompanyList = item.children;
// }
// });
// });
// },
// 切换选项
handleNodeClick(data) {
// console.log(data);
},
// 查询
onSubmit() {
this.isLoading = true;
RegionalReports(this.form).then((res) => {
this.list = res;
this.isLoading = false;
});
}, //每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.form.pageSize = val;
this.onSubmit();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.form.pageNum = val;
this.onSubmit();
},
},
computed: {},
watch: {},
};
</script>
<style lang="less" scoped>
@import url("../../../../../styles/comStyle.less");
// ::v-deep .el-form-item {
// margin-bottom: 0;
// }
</style>

View File

@@ -0,0 +1,147 @@
<template>
<div class="tab">
<el-row>
<el-col :span="24" class="title">{{ list.title }}</el-col>
</el-row>
<el-row>
<el-col :span="4">统计报表时间</el-col>
<el-col :span="20">{{ list.ReportTime }}</el-col>
</el-row>
<el-row>
<el-col :span="4">检修时间</el-col>
<el-col :span="20">{{ list.repairTime }}</el-col>
</el-row>
<el-row>
<el-col :span="4">监测线路</el-col>
<el-col :span="12">{{ list.detectionLine }}</el-col>
<el-col :span="4">电压等级(kV)</el-col>
<el-col :span="4">{{ list.voltage }}</el-col>
</el-row>
<el-row>
<el-col :span="4">PT变化</el-col>
<el-col :span="4">{{ list.changePT }}</el-col>
<el-col :span="4">CT变化</el-col>
<el-col :span="4">{{ list.changeCT }}</el-col>
<el-col :span="4">基准短路容量(MVA)</el-col>
<el-col :span="4">{{ list.benchmark }}</el-col>
</el-row>
<el-row>
<el-col :span="4">母线最小短路容量(MVA)</el-col>
<el-col :span="4">{{ list.busBar }}</el-col>
<el-col :span="4">用户协议最小短路容量(MVA)</el-col>
<el-col :span="4">{{ list.UserAgreement }}</el-col>
<el-col :span="4">供电设备容量(MVA)</el-col>
<el-col :span="4">{{ list.powerSupply }}</el-col>
</el-row>
<el-row>
<el-col :span="4" class="bottom">工况</el-col>
<el-col :span="20" class="bottom">{{ list.workingCondition }}</el-col>
</el-row>
<el-row v-for="(item, ind) in list.tableData" :key="ind">
<el-row>
<el-col :span="24" class="title tableTitle">{{
list.tableTitle[ind]
}}</el-col>
</el-row>
<el-table
stripe
stripe
header-cell-class-name="table_header"
:data="item"
border
style="width: 100%"
:height="vh / num"
>
<el-table-column prop="name" label="名称"> </el-table-column>
<el-table-column prop="company" label="单位"> </el-table-column>
<el-table-column label="最大值">
<el-table-column prop="maxA" label="A"> </el-table-column>
<el-table-column prop="maxB" label="B"> </el-table-column>
<el-table-column prop="maxC" label="C"> </el-table-column>
</el-table-column>
<el-table-column label="最小值">
<el-table-column prop="minA" label="A"> </el-table-column>
<el-table-column prop="minB" label="B"> </el-table-column>
<el-table-column prop="minC" label="C"> </el-table-column>
</el-table-column>
<el-table-column label="平均值">
<el-table-column prop="averageA" label="A"> </el-table-column>
<el-table-column prop="averageB" label="B"> </el-table-column>
<el-table-column prop="averageC" label="C"> </el-table-column>
</el-table-column>
<el-table-column label="95概率大值">
<el-table-column prop="probabilityA" label="A"> </el-table-column>
<el-table-column prop="probabilityB" label="B"> </el-table-column>
<el-table-column prop="probabilityC" label="C"> </el-table-column>
</el-table-column>
<el-table-column prop="conclusion" label="结论"> </el-table-column>
<el-table-column prop="Limit" label="国际限值"> </el-table-column>
</el-table>
</el-row>
</div>
</template>
<script>
export default {
components: {},
props: {
list: {
type: [Array, Object],
required: true,
},
},
data() {
return {
vh: undefined,
num: "",
};
},
mounted() {},
created() {},
methods: {},
computed: {},
watch: {
list() {
if (this.list.tableData.length == 1) {
this.vh = window.sessionStorage.getItem("appheight") - 390;
} else {
this.vh = window.sessionStorage.getItem("appheight") - 470;
}
this.num = this.list.tableData.length;
},
},
};
</script>
<style lang="less" scoped>
.tab {
.el-row {
.el-col {
padding-left: 5px;
font-size: 14px;
border-top: 1px solid #ebeef5;
border-left: 1px solid #ebeef5;
&:last-child {
border-right: 1px solid #ebeef5;
}
}
}
.bottom {
border-bottom: 1px solid #ebeef5;
}
.title {
height: 30px;
font-size: 16px;
font-weight: 600;
line-height: 30px;
text-align: center;
}
.tableTitle {
border-top: 3px solid #ebeef5 !important;
}
}
</style>

View File

@@ -0,0 +1,109 @@
<template>
<div>
<el-input
placeholder="输入关键字进行过滤"
clearable
v-model="filterText"
style="margin-bottom: 10px"
></el-input>
<el-tree
:highlight-current="true"
:expand-on-click-node="false"
:style="'height: ' + (vh - 10) + 'px;'"
class="filter-tree"
:data="treeData"
:props="defaultProps"
default-expand-all
:filter-node-method="filterNode"
@node-click="handleNodeClick"
ref="tree"
v-loading="loadingTree"
></el-tree>
</div>
</template>
<script>
import { pvTree } from '@/api/AccountOperation'
export default {
components: {},
props: {},
data() {
return {
vh: 0,
filterText: '',
loadingTree: true,
defaultProps: {
children: 'children',
label: 'name'
},
treeList: [],
treeData: []
}
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
created() {
this.operationTree()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 180
},
// 树查询
async operationTree() {
this.loadingTree = true
const data = await pvTree()
this.treeData = data.data
this.loadingTree = false
},
// 树点击事件
handleNodeClick: function (data, node) {
this.breadList = []
this.treeList = data
let selectNode = this.$refs.tree.getNode(node) // 获取点击当节点的dom的信息
// console.log(data,'data',node,'node')
this.$emit('nodeData', data)
},
// 树过滤
filterNode(value, data, node) {
if (!value) {
return true
}
let _array = [] //这里使用数组存储 只是为了存储值。
this.getReturnNode(node, _array, value)
let result = false
_array.forEach(item => {
result = result || item
})
return result
},
getReturnNode(node, _array, value) {
let isPass = node.data && node.data.name && node.data.name.indexOf(value) !== -1
isPass ? _array.push(isPass) : ''
this.index++
if (!isPass && node.name != 1 && node.parent) {
this.getReturnNode(node.parent, _array, value)
}
}
},
computed: {},
watch: {
filterText(val) {
this.$refs.tree.filter(val)
}
}
}
</script>
<style lang="scss" scoped>
.el-tree {
// background-color: #ccc;
}
</style>

View File

@@ -0,0 +1,35 @@
<template>
<div>
<!-- 台账 -->
<StandingBook v-show="flag" @ViewReport="ViewReport" />
<!-- 报表 -->
<reportForm v-if="!flag" :reportID="reportID" @close='flag=true'/>
</div>
</template>
<script>
import reportForm from "./components/reportForm";
import StandingBook from "./components/StandingBook";
export default {
components: { reportForm, StandingBook },
props: {},
data() {
return {
flag: true,
reportID: "",
};
},
created() {},
methods: {
ViewReport(id) {
this.reportID = id;
this.flag = false;
},
},
computed: {},
watch: {},
};
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,631 @@
<template>
<div>
<el-row>
<el-col :span="24">
<div class="Top" ref="top">
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item label="日期">
<el-date-picker
v-show="tab == 'first-first'"
v-model="value2"
value-format="yyyy-MM-dd"
type="date"
placeholder="选择日期"
:picker-options="pickerOptions"
>
</el-date-picker>
<el-date-picker
v-show="tab == 'first-second'"
value-format="yyyy-MM"
v-model="value2"
type="month"
placeholder="选择月"
>
</el-date-picker>
</el-form-item>
<el-form-item label="监测点名称">
<el-input v-model="value" placeholder="请输入监测点名称">
</el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="ml10"
icon="el-icon-search"
@click="steady"
>查询</el-button
>
<!-- <el-button type="primary" icon="el-icon-download">导出</el-button> -->
</el-form-item>
</el-form>
<el-tabs
:tab-position="tabPosition"
v-model="active1"
@tab-click="handleClick11"
>
<el-tab-pane label="暂态指标监测点日报" name="first-first">
<el-row :gutter="10">
<el-col :span="14" class="mt10">
<div
style="
margin-bottom: 5px;
font-size: 14px;
font-weight: 600;
"
>
<span class="spanfont"
>监测点电压暂降和短时中断分布情况</span
>
</div>
<el-table
stripe
highlight-current-row
:data="serialData1"
height="280px"
style="width: 100%; height: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<el-table-column label="残余电压" width="110">
<el-table-column
prop="featureAmplitude"
label="U1(%)"
width="110"
>
</el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column label="t1">
<el-table-column
prop="duration100"
min-width="100"
label="(0.01,0.1]"
>
</el-table-column>
</el-table-column>
<el-table-column label="t2">
<el-table-column
prop="duration250"
min-width="100"
label="(0.1,0.25]"
>
</el-table-column>
</el-table-column>
<el-table-column label="t3">
<el-table-column
prop="duration500"
min-width="100"
label="(0.25,0.5]"
>
</el-table-column>
</el-table-column>
<el-table-column label="t4">
<el-table-column
prop="duration1000"
min-width="100"
label="(0.5,1]"
>
</el-table-column>
</el-table-column>
<el-table-column label="t5">
<el-table-column prop="duration3000" label="(1,3]">
</el-table-column>
</el-table-column>
<el-table-column label="t6">
<el-table-column prop="duration10000" label="(3,10]">
</el-table-column>
</el-table-column>
<el-table-column label="t7">
<el-table-column prop="duration20000" label="(10,20]">
</el-table-column>
</el-table-column>
<el-table-column label="t8">
<el-table-column prop="duration60000" label="(20,60]">
</el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
<el-col :span="10" class="mt10">
<div
style="
margin-bottom: 5px;
font-size: 14px;
font-weight: 600;
"
>
<span class="spanfont">监测点电压暂升分布情况</span>
</div>
<el-table
stripe
highlight-current-row
:data="serialData11"
height="280px"
style="width: 100%; height: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<el-table-column label="电压幅值" width="110">
<el-table-column
prop="featureAmplitude"
label="U1(%)"
width="110"
>
</el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column label="t1">
<el-table-column prop="duration500" label="(0.01,0.1]">
</el-table-column>
</el-table-column>
<el-table-column label="t2">
<el-table-column prop="duration5000" label="(0.1,0.25]">
</el-table-column>
</el-table-column>
<el-table-column label="t3">
<el-table-column
prop="duration60000"
label="(0.25,0.5]"
>
</el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24" class="mt10">
<div
style="
margin-top: 5px;
margin-top: 5px;
margin-bottom: 5px;
font-size: 14px;
font-weight: 600;
"
>
<span class="spanfont"> 监测点暂态事件发生次数</span>
</div>
<el-table
stripe
highlight-current-row
:data="serialData111"
:height="height1"
style="width: 100%; height: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<el-table-column prop="date" label="时间">
</el-table-column>
<el-table-column prop="orgName" label="所属单位">
</el-table-column>
<el-table-column
prop="voltageLevelName"
label="监测点电压等级"
min-width="120"
>
</el-table-column>
<el-table-column prop="monitorName" label="监测点名称">
</el-table-column>
<el-table-column label="暂态事件发生次数">
<el-table-column
prop="shortInterruptionCount"
label="短时中断"
>
</el-table-column>
<el-table-column prop="voltageDipCount" label="电压暂降">
</el-table-column>
<el-table-column prop="voltageRiseCount" label="电压暂升">
</el-table-column>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="暂态指标监测点月报" name="first-second">
<el-row :gutter="10">
<el-col :span="14" class="mt10">
<div style="font-size: 14px; font-weight: 600">
<span class="spanfont"
>监测点电压暂降和短时中断分布情况</span
>
</div>
<el-table
stripe
highlight-current-row
:data="serialData2"
height="280px"
style="width: 100%; height: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<el-table-column label="残余电压" min-width="110">
<el-table-column
prop="featureAmplitude"
label="U1(%)"
min-width="110"
>
</el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column label="t1">
<el-table-column prop="duration100" label="(0.01,0.1]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t2">
<el-table-column prop="duration250" label="(0.1,0.25]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t3">
<el-table-column prop="duration500" label="(0.25,0.5]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t4">
<el-table-column prop="duration1000" label="(0.5,1]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t5">
<el-table-column prop="duration3000" label="(1,3]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t6">
<el-table-column prop="duration10000" label="(3,10]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t7">
<el-table-column prop="duration20000" label="(10,20]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t8">
<el-table-column prop="duration60000" label="(20,60]" min-width="100">
</el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
<el-col :span="10" class="mt10">
<div
style="
margin-bottom: 5px;
font-size: 14px;
font-weight: 600;
"
>
<span class="spanfont">监测点电压暂升分布情况</span>
</div>
<el-table
stripe
highlight-current-row
:data="serialData22"
height="280px "
style="width: 100%; height: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<el-table-column label="电压幅值" min-width="110">
<el-table-column
prop="featureAmplitude"
label="U1(%)"
min-width="110"
>
</el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column label="t1">
<el-table-column prop="duration500" label="(0.01,0.1]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t2">
<el-table-column prop="duration5000" label="(0.1,0.25]" min-width="100">
</el-table-column>
</el-table-column>
<el-table-column label="t3">
<el-table-column
prop="duration60000"
label="(0.25,0.5]"
min-width="100"
>
</el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
</el-row>
<el-row :gutter="10">
<el-col :span="24" class="mt10">
<div
style="
margin-top: 5px;
margin-top: 5px;
margin-bottom: 5px;
font-size: 14px;
font-weight: 600;
"
>
<span class="spanfont"> 监测点暂态事件发生次数</span>
</div>
<el-table
stripe
highlight-current-row
:data="serialData222"
:height="height1"
style="width: 100%; height: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<el-table-column prop="date" label="时间">
</el-table-column>
<el-table-column
prop="orgName"
label="所属单位"
min-width="180"
>
</el-table-column>
<el-table-column
prop="voltageLevelName"
label="监测点电压等级"
min-width="120"
>
</el-table-column>
<el-table-column prop="monitorName" label="监测点名称">
</el-table-column>
<el-table-column label="暂态事件发生次数">
<el-table-column
prop="shortInterruptionCount"
label="短时中断"
>
</el-table-column>
<el-table-column prop="voltageDipCount" label="电压暂降">
</el-table-column>
<el-table-column prop="voltageRiseCount" label="电压暂升">
</el-table-column>
</el-table-column> </el-table
></el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</div>
</el-col>
</el-row>
</div>
</template>
<script>
import {
getEventDipShortDistribution,
getEventRiseDistribution,
getMonitorEventCount,
} from "@/api/Distributionnetwork-analysis/StatisticalReport/Transient/Transient.js";
import Area from "@/views/components/Area/Area.vue";
import { dicData } from "@/assets/commjs/dictypeData";
export default {
components: { Area },
data() {
return {
type: 5,
areaid: JSON.parse(window.sessionStorage.getItem("Info")).deptId,
tab: "first-first",
pickerOptions: {
disabledDate(time) {
return time.getTime() > Date.now();
},
shortcuts: [
{
text: "今天",
onClick(picker) {
picker.$emit("pick", new Date());
},
},
{
text: "昨天",
onClick(picker) {
const date = new Date();
date.setTime(date.getTime() - 3600 * 1000 * 24);
picker.$emit("pick", date);
},
},
{
text: "一周前",
onClick(picker) {
const date = new Date();
date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
picker.$emit("pick", date);
},
},
],
},
pickerOptions1: {
disabledDate(time) {
return time.getTime() > Date.now() - 2678400000;
},
},
value: "",
value2: this.getEndTime(),
voltageLevel: "",
active_active: "first-first",
zoom: undefined, //图表焦点校验
vh: "",
height: null,
height1: null,
device: "",
getHeight: "",
tabPosition: "top",
active1: "first-first",
isLoading: false,
isLoading2: false,
isLoading3: false,
isLoading4: false,
serialData: [],
serialData1: [],
serialData11: [],
serialData111: [],
serialData2: [],
serialData22: [],
serialData222: [],
level: [],
};
},
created() {
this.account();
},
mounted() {
this.level = dicData("Dev_Voltage", ["Load_Type"]);
this.device = window.devicePixelRatio;
//echarts图表调用
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.height = window.sessionStorage.getItem("appheight") - 215;
this.height1 = window.sessionStorage.getItem("appheight") - 532;
this.zoom = 1 / document.body.style.zoom;
},
getEndTime() {
var now = new Date();
var sep = "-";
var year = now.getFullYear();
var month = now.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var date = now.getDate();
if (date < 10) {
date = "0" + date;
}
// 拼接当前的日期
var endTime = year + sep + month + sep + date;
return endTime;
},
getEndTime1() {
var now = new Date();
var sep = "-";
var year = now.getFullYear();
var month = now.getMonth() + 1;
if (month < 10) {
month = "0" + month;
}
var date = now.getDate();
if (date < 10) {
date = "0" + date;
}
// 拼接当前的日期
var endTime = year + sep + month;
return endTime;
},
handleClick11(tab) {
this.tab = tab.name;
if (tab.name == "first-second") {
this.value2 = this.getEndTime1();
this.type = 3;
this.account();
} else {
this.type = 5;
this.value2 = this.getEndTime();
this.account();
}
},
handleNodeClick(data) {
this.areaid = data.id;
},
//方法调用获取稳态指标超标统计数据接口
steady() {
// console.log(this.tab, "tggtgtgtgt");
if (this.tab.name == "first-second") {
this.type = 5;
this.account();
} else {
this.type = 3;
this.account();
}
},
cellStyle(row, column, rowIndex, columnIndex) {
// console.log(row);
if (
row.columnIndex == 2 ||
row.columnIndex == 3 ||
row.columnIndex == 4 ||
row.columnIndex == 5
) {
return "font-weight: 100;";
}
},
//方法调用台账统计数据接口
account() {
this.isLoading = true;
this.isLoading2 = true;
//监测终端统计单位表格数据
getEventDipShortDistribution({
monitorName: this.value,
type: this.type,
startTime: this.value2,
endTime: this.value2,
id: this.areaid,
}).then((res) => {
this.isLoading = false;
this.serialData1 = res.data;
this.serialData2 = res.data;
});
getEventRiseDistribution({
monitorName: this.value,
type: this.type,
startTime: this.value2,
endTime: this.value2,
id: this.areaid,
}).then((res) => {
this.isLoading = false;
this.serialData11 = res.data;
this.serialData22 = res.data;
});
getMonitorEventCount({
monitorName: this.value,
type: this.type,
startTime: this.value2,
endTime: this.value2,
id: this.areaid,
}).then((res) => {
this.isLoading = false;
this.serialData111 = res.data;
this.serialData222 = res.data;
});
},
},
};
</script>
<style lang="less" scoped>
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.prop {
font-weight: 100;
}
</style>

View File

@@ -0,0 +1,278 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area" class="box"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval"></Timeinterval>
</el-form-item>
<el-form-item label="监测点名称:" class="box">
<el-input v-model.trim="valueName" placeholder="请选择" clearable>
</el-input>
</el-form-item>
<el-form-item label="监测点编号:" class="box">
<el-input v-model.trim="valueNumber" placeholder="请选择" clearable>
</el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="ml10"
icon="el-icon-search"
@click="searchFn"
>查询</el-button
>
<el-button type="primary" class="ml10" icon="el-icon-download"
>导出</el-button
>
<el-button
type="primary"
class="ml10"
icon="el-icon-refresh"
@click="reset"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row>
<el-col :span="12">
<div class="typeface">监测点电压暂降和短时中断分布情况</div>
<el-table
stripe
:data="daily1Data"
:height="height"
border
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<el-table-column prop="number" label="残余电压">
<el-table-column
prop="U1"
label="U1(%)"
width="100"
></el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column prop="point1" label="t1">
<el-table-column prop="t1" label="(0.01,0.1]"></el-table-column>
</el-table-column>
<el-table-column prop="point2" label="t2">
<el-table-column prop="t2" label="(0.1,0.25]"></el-table-column>
</el-table-column>
<el-table-column prop="point3" label="t3">
<el-table-column prop="t3" label="(0.25,0.5]"></el-table-column>
</el-table-column>
<el-table-column prop="point4" label="t4">
<el-table-column prop="t4" label="(0.5,1]"> </el-table-column>
</el-table-column>
<el-table-column prop="point5" label="t5">
<el-table-column prop="t5" label="(1,3]"> </el-table-column>
</el-table-column>
<el-table-column prop="point6" label="t6">
<el-table-column prop="t6" label="(3,10]"> </el-table-column>
</el-table-column>
<el-table-column prop="point7" label="t7">
<el-table-column prop="t7" label="(10,20]"> </el-table-column>
</el-table-column>
<el-table-column prop="point8" label="t8">
<el-table-column prop="t8" label="(20,60]"> </el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="24">
<div class="typeface">监测点电压暂升分布情况</div>
<el-table
stripe
:data="daily2Data"
:height="h"
border
style="width: 100%"
v-loading="isLoading1"
header-cell-class-name="table_header"
>
<el-table-column prop="number" label="电压幅值">
<el-table-column prop="U1" label="U1(%)" width="120">
</el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column prop="point1" label="t1">
<el-table-column
prop="t1"
label="(0.01,0.1]"
></el-table-column>
</el-table-column>
<el-table-column prop="point2" label="t2">
<el-table-column
prop="t2"
label="(0.1,0.25]"
></el-table-column>
</el-table-column>
<el-table-column prop="point3" label="t3">
<el-table-column
prop="t3"
label="(0.25,0.5]"
></el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
<el-col :span="24">
<div class="typeface">监测点暂态事件发生次数</div>
<el-table
stripe
:data="daily3Data"
:height="h"
border
style="width: 100%"
v-loading="isLoading2"
header-cell-class-name="table_header"
>
<el-table-column prop="time" label="时间"> </el-table-column>
<el-table-column
prop="company"
label="所属单位"
></el-table-column>
<el-table-column
prop="voltageLevel"
label="监测点电压等级"
width="120"
></el-table-column>
<el-table-column
prop="number"
label="监测点编号"
></el-table-column>
<el-table-column prop="name" label="监测点名称"></el-table-column>
<el-table-column label="暂态事件发生次数">
<el-table-column
prop="interrupt"
label="短时中断"
></el-table-column>
<el-table-column prop="sag" label="电压暂降"></el-table-column>
<el-table-column prop="rise" label="电压暂升"></el-table-column>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</template>
<script>
import Area from "@/views/components/Area/Area.vue";
import Timeinterval from "../../../../components/Timeinterval.vue";
import {
getDaily1Data,
getDaily2Data,
getDaily3Data,
} from "@/api/Distributionnetwork-analysis/StatisticalReport/Transient/Transient";
export default {
components: { Area, Timeinterval },
data() {
return {
h: null,
height: null,
zoom: null,
valueName: "",
valueNumber: "",
isLoading: false,
isLoading1: false,
isLoading2: false,
daily1Data: [],
daily2Data: [],
daily3Data: [],
};
},
created() {
this.daily();
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.zoom = window.devicePixelRatio;
if (this.zoom == 1) {
let heightd = window.sessionStorage.getItem("appheight") - 235;
this.h = heightd / 2 + "px";
this.height = window.sessionStorage.getItem("appheight") - 207;
}
if (this.zoom == 1.25) {
let heightd = window.sessionStorage.getItem("appheight") - 235;
this.h = heightd / 2 + "px";
this.height = window.sessionStorage.getItem("appheight") - 207;
}
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
},
//获取数据
daily() {
this.isLoading = true;
this.isLoading1 = true;
this.isLoading2 = true;
getDaily1Data().then((res) => {
this.isLoading = false;
this.daily1Data = res.data;
});
getDaily2Data().then((res) => {
this.isLoading1 = false;
this.daily2Data = res.data;
});
getDaily3Data().then((res) => {
this.isLoading2 = false;
this.daily3Data = res.data;
});
},
//查询
searchFn() {
this.daily();
},
//重置
reset() {
this.$refs.area.form.valueTitle = "全国";
this.$refs.interval.intervald = 1;
this.valueName = "";
this.valueNumber = "";
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../../styles/comStyle.less");
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
// ::v-deep .el-form-item {
// margin-bottom: 0;
// }
::v-deep .box {
.el-input {
width: 160px;
}
}
.typeface {
font-size: 18px;
font-weight: 400;
}
</style>

View File

@@ -0,0 +1,278 @@
<template>
<div>
<el-form :inline="true" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area" class="box"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval"></Timeinterval>
</el-form-item>
<el-form-item label="监测点名称:" class="box">
<el-input v-model.trim="valueName" placeholder="请选择" clearable>
</el-input>
</el-form-item>
<el-form-item label="监测点编号:" class="box">
<el-input v-model.trim="valueNumber" placeholder="请选择" clearable>
</el-input>
</el-form-item>
<el-form-item>
<el-button
type="primary"
class="ml10"
icon="el-icon-search"
@click="searchFn"
>查询</el-button
>
<el-button type="primary" class="ml10" icon="el-icon-download"
>导出</el-button
>
<el-button
type="primary"
class="ml10"
icon="el-icon-refresh"
@click="reset"
>重置</el-button
>
</el-form-item>
</el-form>
<el-row>
<el-col :span="12">
<div class="typeface">监测点电压暂降和短时中断分布情况</div>
<el-table
stripe
:data="daily1Data"
:height="height"
border
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
>
<el-table-column prop="number" label="残余电压">
<el-table-column
prop="U1"
label="U1(%)"
width="100"
></el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column prop="point1" label="t1">
<el-table-column prop="t1" label="(0.01,0.1]"></el-table-column>
</el-table-column>
<el-table-column prop="point2" label="t2">
<el-table-column prop="t2" label="(0.1,0.25]"></el-table-column>
</el-table-column>
<el-table-column prop="point3" label="t3">
<el-table-column prop="t3" label="(0.25,0.5]"></el-table-column>
</el-table-column>
<el-table-column prop="point4" label="t4">
<el-table-column prop="t4" label="(0.5,1]"> </el-table-column>
</el-table-column>
<el-table-column prop="point5" label="t5">
<el-table-column prop="t5" label="(1,3]"> </el-table-column>
</el-table-column>
<el-table-column prop="point6" label="t6">
<el-table-column prop="t6" label="(3,10]"> </el-table-column>
</el-table-column>
<el-table-column prop="point7" label="t7">
<el-table-column prop="t7" label="(10,20]"> </el-table-column>
</el-table-column>
<el-table-column prop="point8" label="t8">
<el-table-column prop="t8" label="(20,60]"> </el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
<el-col :span="12">
<el-row>
<el-col :span="24">
<div class="typeface">监测点电压暂升分布情况</div>
<el-table
stripe
:data="daily2Data"
:height="h"
border
style="width: 100%"
v-loading="isLoading1"
header-cell-class-name="table_header"
>
<el-table-column prop="number" label="电压幅值">
<el-table-column prop="U1" label="U1(%)" width="120">
</el-table-column>
</el-table-column>
<el-table-column label="持续时间t1(s)">
<el-table-column prop="point1" label="t1">
<el-table-column
prop="t1"
label="(0.01,0.1]"
></el-table-column>
</el-table-column>
<el-table-column prop="point2" label="t2">
<el-table-column
prop="t2"
label="(0.1,0.25]"
></el-table-column>
</el-table-column>
<el-table-column prop="point3" label="t3">
<el-table-column
prop="t3"
label="(0.25,0.5]"
></el-table-column>
</el-table-column>
</el-table-column>
</el-table>
</el-col>
<el-col :span="24">
<div class="typeface">监测点暂态事件发生次数</div>
<el-table
stripe
:data="daily3Data"
:height="h"
border
style="width: 100%"
v-loading="isLoading2"
header-cell-class-name="table_header"
>
<el-table-column prop="time" label="时间"> </el-table-column>
<el-table-column
prop="company"
label="所属单位"
></el-table-column>
<el-table-column
prop="voltageLevel"
label="监测点电压等级"
width="120"
></el-table-column>
<el-table-column
prop="number"
label="监测点编号"
></el-table-column>
<el-table-column prop="name" label="监测点名称"></el-table-column>
<el-table-column label="暂态事件发生次数">
<el-table-column
prop="interrupt"
label="短时中断"
></el-table-column>
<el-table-column prop="sag" label="电压暂降"></el-table-column>
<el-table-column prop="rise" label="电压暂升"></el-table-column>
</el-table-column>
</el-table>
</el-col>
</el-row>
</el-col>
</el-row>
</div>
</template>
<script>
import Area from "@/views/components/Area/Area.vue";
import Timeinterval from "../../../../components/Timeinterval.vue";
import {
getDaily1Data,
getDaily2Data,
getDaily3Data,
} from "@/api/Distributionnetwork-analysis/StatisticalReport/Transient/Transient";
export default {
components: { Area, Timeinterval },
data() {
return {
h: null,
height: null,
zoom: null,
valueName: "",
valueNumber: "",
isLoading: false,
isLoading1: false,
isLoading2: false,
daily1Data: [],
daily2Data: [],
daily3Data: [],
};
},
created() {
this.daily();
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.zoom = window.devicePixelRatio;
if (this.zoom == 1) {
let heightd = window.sessionStorage.getItem("appheight") - 235;
this.h = heightd / 2 + "px";
this.height = window.sessionStorage.getItem("appheight") - 207;
}
if (this.zoom == 1.25) {
let heightd = window.sessionStorage.getItem("appheight") - 235;
this.h = heightd / 2 + "px";
this.height = window.sessionStorage.getItem("appheight") - 207;
}
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
},
//获取数据
daily() {
this.isLoading = true;
this.isLoading1 = true;
this.isLoading2 = true;
getDaily1Data().then((res) => {
this.isLoading = false;
this.daily1Data = res.data;
});
getDaily2Data().then((res) => {
this.isLoading1 = false;
this.daily2Data = res.data;
});
getDaily3Data().then((res) => {
this.isLoading2 = false;
this.daily3Data = res.data;
});
},
//查询
searchFn() {
this.daily();
},
//重置
reset() {
this.$refs.area.form.valueTitle = "全国";
this.$refs.interval.intervald = 1;
this.valueName = "";
this.valueNumber = "";
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../../styles/comStyle.less");
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
// ::v-deep .el-form-item {
// margin-bottom: 0;
// }
::v-deep .box {
.el-input {
width: 160px;
}
}
.typeface {
font-size: 18px;
font-weight: 400;
}
</style>

View File

@@ -0,0 +1,438 @@
<template>
<el-container style="position: relative" id="dept">
<!-- <el-form ref="form" :inline="true" :model="form">
<el-form-item> -->
<!-- <div class="boxTop"> -->
<el-button style="margin-top: -10px" type="primary" class="flag" icon="el-icon-close" @click="$emit('close')">
返回
</el-button>
<!-- </div> -->
<!-- </el-form-item>
</el-form> -->
<el-main id="drag-dept-right ">
<div class="bm-view" id="container " :style="'height:' + (vh - 20) + 'px ;position: relative;'">
<div class="boxTop">
<el-form ref="form" :inline="true" :model="form">
<el-form-item label="模板:">
<el-select
value-key="id"
:popper-append-to-body="false"
v-model="form.TemplateId"
placeholder="请选择模板"
>
<el-option
v-for="item in options"
:key="item.id"
:label="item.name"
:value="item"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="报表类型:">
<el-select
v-model="form.TemplateId.reportForm"
:popper-append-to-body="false"
placeholder="请选择报表类型"
disabled
>
<el-option
v-for="item in reportFormList"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<Timeinterval ref="Timeinterval" :interval="3" />
</el-form-item>
<el-form-item>
<el-button class="buttons" type="primary" icon="el-icon-search" @click="Template">
查询
</el-button>
<el-button @click="downloadExcel" class="buttons" type="primary" icon="el-icon-download">
导出excel
</el-button>
</el-form-item>
</el-form>
</div>
<div
class="luckysheetBox"
style="padding: 0; margin: 0"
:style="`width:${vw - 50}px;height: ${vh - 200}px;`"
></div>
<div
id="luckysheet"
style="padding: 0; margin: 0"
:style="`width:${vw - 40}px;height: ${vh - 130}px;margin-top: 50px;`"
></div>
</div>
</el-main>
</el-container>
</template>
<script>
import jquery from 'jquery'
import { getCustomReport, getTemplateByDept } from '@/api/templateConfiguration'
import { exportExcel } from '@/views/components/luckyexcel/export'
import Timeinterval from '@/views/components/cgytree/TimeintervalTemplat.vue'
import TreeTemplat from '@/views/components/cgytree/TreeTemplat.vue'
import LuckyExcel from 'luckyexcel'
export default {
components: { TreeTemplat, Timeinterval },
props: {
reportID: {
type: String
}
},
data() {
return {
options: [],
zoom: '', //图表焦点校验
form: {
TemplateId: '',
reportForm: ''
},
reportFormList: [
{
value: '1',
label: '分析报表'
},
{
value: '2',
label: '统计报表'
},
{
value: '3',
label: '自定义报表'
}
],
loading: true,
vh: undefined,
vw: undefined,
view: true,
checkbox: false,
tablename: 1,
treenode: '',
statisticalList: {}, //树上面的选择框
data_info: [], //点位信息
map: null, //存储地图
flag: true,
showtoolbar: false, //富文本框头部显示
cellRightClickConfig: {
copy: false, // 复制
copyAs: false, // 复制为
paste: false, // 粘贴
insertRow: false, // 插入行
insertColumn: false, // 插入列
deleteRow: false, // 删除选中行
deleteColumn: false, // 删除选中列
deleteCell: false, // 删除单元格
hideRow: false, // 隐藏选中行和显示选中行
hideColumn: false, // 隐藏选中列和显示选中列
rowHeight: false, // 行高
columnWidth: false, // 列宽
clear: false, // 清除内容
matrix: false, // 矩阵操作选区
sort: false, // 排序选区
filter: false, // 筛选选区
chart: false, // 图表生成
image: false, // 插入图片
link: false, // 插入链接
data: false, // 数据验证
cellFormat: false // 设置单元格格式
}, //控制右键菜单
list: [
// {
// name: "Cell",
// index: 0,
// defaultRowHeight: 27,
// defaultColWidth: 105,
// },
],
deptId: ''
}
},
created() {},
mounted() {
this.deptId = JSON.parse(window.sessionStorage.getItem('Info')).deptId
this.zoom = 1 / document.body.style.zoom
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.getTemplateLists()
})
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight')
this.vw = document.getElementById('app-main-in').offsetWidth
this.zoom = 1 / document.body.style.zoom
},
async getTemplateLists() {
await getTemplateByDept({ id: this.deptId }).then(res => {
if (res != undefined && res.code == 'A0000') {
res.data.forEach(item => {
if (item.activation == 1) {
this.form.TemplateId = item
return
}
})
this.options = res.data
setTimeout(() => {
this.Template()
}, 0)
}
})
},
// 选择模板
async Template() {
let _this = this
await getCustomReport({
startTime: this.$refs.Timeinterval.timeValue[0],
endTime: this.$refs.Timeinterval.timeValue[1],
type: this.$refs.Timeinterval.intervald,
tempId: this.form.TemplateId.id,
activation: this.form.TemplateId.activation,
lineId: this.reportID
// lineId: "8696be1d170e05b7d848accc059f4558",
}).then(res => {
// jquery.getJSON(res.data[1], null, function (list) {
_this.list = res
_this.init()
//});
})
// .then((res) => {
// console.log("res", res.data);
// let Datalist = JSON.parse(res.data);
// console.log(`13323`, JSON.parse(res.data));
// this.list = Datalist;
// this.init();
// });
},
// 初始化插件
init() {
window.luckysheet.destroy()
let options = {
container: 'luckysheet', //luckysheet为容器id
title: '',
lang: 'zh',
showinfobar: false,
cellRightClickConfig: this.cellRightClickConfig,
showtoolbar: this.showtoolbar,
// column:8,
// row:7,
showtoolbarConfig: {
textRotateMode: false // '文本旋转方式'
},
data: this.list
}
//console.log(options);
luckysheet.create(options)
},
// 下载表格
downloadExcel() {
// const value = this.selected;;
exportExcel(luckysheet.getAllSheets(), '下载')
// testaaa();
}
},
computed: {},
watch: {}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
</style>
<style lang="scss" scoped>
ul {
list-style-type: none;
padding: 0;
}
li {
display: inline-block;
margin: 0 10px;
}
a {
color: #42b983;
}
.wrap {
display: flex;
justify-content: space-around;
}
#container {
width: 100%;
height: 83vh;
border: 1px solid rgb(0, 183, 255);
}
#container2 {
width: 500px;
height: 500px;
border: 3px solid pink;
}
#drag-dept-left {
min-width: 220px;
max-width: 35%;
}
.overview_scroll::-webkit-scrollbar {
width: 2px;
height: 1px;
background: rgba(6, 70, 122, 0.013);
}
.overview_scroll::-webkit-scrollbar-thumb {
border-radius: 4px;
margin-right: 5px;
-webkit-box-shadow: inset 0 0 0px #0090b411;
background: #03c1cf0e;
}
/**拖拽条样式 */
#drag-dept {
display: flex;
justify-content: center;
align-items: center;
position: relative;
top: 10;
right: 0;
width: 4px;
background-color: #04607c2a;
box-shadow: 0px 0px 1px rgba(0, 0, 0, 0.35);
cursor: col-resize;
}
#drag-dept i {
display: inline-block;
height: 14px;
width: 1px;
background-color: #e9e9e9;
margin: 0 1px;
}
.overview_scroll::-webkit-scrollbar {
width: 2px;
height: 1px;
background: rgba(6, 70, 122, 0.013);
}
::-webkit-scrollbar {
width: 5px;
height: 0px;
}
// .el-tabs--border-card > .el-tabs__header {
// background-color: #124da5;
// border-bottom: 2px solid #e4e7ed;
// margin: 0;
// }
// .el-tabs__header {
// padding: 0;
// position: relative;
// margin: 0 px;
// }
// .el-tabs--border-card > .el-tabs__content {
// padding: 0px;
// }
// .el-tabs__content {
// overflow: hidden;
// position: relative;
// }
// .el-aside,
// .el-main {
// margin-top: 0px;
// }
// .el-main {
// padding-top: 0px;
// padding-bottom: 0;
// padding-right: 0;
// }
::v-deep .boxDiv {
height: 25px;
line-height: 25px;
margin-left: 10px;
span:first-child {
font-weight: 600;
margin-right: 10px;
}
}
::v-deep .button {
margin-right: 5px;
background-color: $themeColor;
color: #fff;
height: 18px;
line-height: 18px;
border: 0 solid #000;
border-radius: 2px;
&:hover {
cursor: pointer;
}
}
.iconBox {
position: absolute;
top: 2px;
right: 2px;
width: 150px;
height: 260px;
padding: 10px;
z-index: 2000;
border-radius: 4px;
border: 1px solid #ccc;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.12), 0 0 6px rgba(0, 0, 0, 0.04);
background: rgba(255, 255, 255, 0.75) !important;
.div {
display: flex;
margin-bottom: 5px;
img {
height: 20px;
margin-right: 5px;
}
// span {
// line-height: 20px;
// }
}
}
.boxTop {
position: absolute;
top: -50px;
left: 5px;
z-index: 2000;
}
::v-deep .el-select-dropdown__list {
display: flex;
flex-direction: column;
max-width: 240px;
}
.luckysheetBox {
position: absolute;
top: 0;
left: 0;
z-index: 1500;
// background-color: #000;
}
.anchorBL {
display: none !important;
}
// ::v-deep .el-select {
// width: 150px;
// }
.flag {
position: absolute;
top: 10px;
right: 10px;
}
</style>

View File

@@ -0,0 +1,70 @@
<template>
<div>
<el-row>
<el-col>
<el-tabs v-model="activeName" @tab-click="handleClick">
<!-- 区域暂态事件统计 -->
<el-tab-pane label="区域稳态指标合格率统计" name="first">
<Statistics v-if="activeName == 'first'"></Statistics>
</el-tab-pane>
<!-- 区域暂态指标分类统计 -->
<el-tab-pane label="稳态指标合格率明细表" name="third">
<detailed v-if="activeName == 'third'"></detailed>
</el-tab-pane>
<!-- 暂态事件明细 -->
<!-- <el-tab-pane
label="在线时间趋势图"
name="trend"
>
<trend v-if="activeName=='trend'"></trend>
</el-tab-pane> -->
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Statistics from './PassRate/Statistics.vue'
import detailed from './PassRate/detailed.vue'
export default {
components: { Statistics, detailed },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
activeName: 'first' //区分是那个节点
}
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 110 + 'px'
},
handleClick(tab, event) {
// if (tab.label == "暂态事件分布统计") {
// this.echarts();
// this.echarts2();
// this.echarts4();
// this.iticData();
// this.semif();
// this.echarts3();
// }
// this.onSubmit();
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,222 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area" @sendMessage="send"></Area>
</el-form-item>
<el-form-item label="监测点类别:">
<el-select v-model="form.ids" clearable multiple collapse-tags placeholder="请选择监测点类别">
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</el-button>
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="Passrate"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
:formatter="formFilter"
>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
></vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</div>
</template>
<script>
import { getPwRStatOrgIndex } from '@/api/Distributionnetwork/steady-state/steady-state'
import { dicData } from '@/assets/commjs/dictypeData'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
item: ['', ''],
form: {
endTime: '',
id: '',
ids: [],
startTime: '',
type: ''
},
//监测点类别数据
typeList: [],
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: 'orgName', label: '单位', width: 150 },
{ prop: 'monitorSort', label: '监测点类别', width: 100 },
{ prop: 'allCount', label: '累计有效接入监测点数', width: 160 },
{ prop: 'freqPassRate', label: '频率合格率', width: 100 },
{ prop: 'vdevPassRate', label: '电压偏差合格率', width: 120 },
{ prop: 'flickerPassRate', label: '闪变合格率', width: 100 }
],
totalData: [],
device: '',
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
]
}
},
created() {
this.getclassificationData()
// this.form.id = JSON.parse(window.sessionStorage.getItem("Info")).deptId;
},
mounted() {
// this.onSubmit();
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 215
},
send(data) {
this.form.id = data
this.onSubmit()
// console.log(this.form.id,'11111111111');
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val
this.onSubmit()
},
// 表格查询
onSubmit() {
this.isLoading1 = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
getPwRStatOrgIndex(this.form).then(res => {
if (res.data == [] || res.data == null) {
this.isLoading1 = false
this.totalData = res.data
this.total = 0
} else {
this.isLoading1 = false
this.totalData = res.data
this.total = this.totalData.length
}
})
},
// 数据过滤
formFilter(row) {
if (row.column.property == 'monitorSort') {
let title = ''
this.typeList.forEach(item => {
if (item.value == row.row.monitorSort) {
title = item.label
}
})
return title
} else {
return row.row[row.column.property]
}
},
//获取类型
getclassificationData() {
// 监测点类别
var Monitoring = 'Line_Sort'
this.typeList = dicData(Monitoring, ['Load_Type'])
this.typeList.forEach(item => {
this.form.ids.push(item.id)
})
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
},
//导出
exportEvent() {
this.$refs.Passrate.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,388 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="Area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">查询</el-button>
<!-- <el-button
type="primary"
icon="el-icon-refresh-right"
@click="resetForm"
>重置</el-button
> -->
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</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>
<div class="container" id="container">
<i @click="closeHandle" class="el-icon-circle-close coles"></i>
<el-form :inline="true" label-width="110px">
<el-form-item label="监测点类别:">
<el-select
v-model="form.monitorSort"
clearable
multiple
collapse-tags
placeholder="请选择监测点类别"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="所属变电站:">
<el-select v-model="form.powerrIds" clearable multiple collapse-tags placeholder="请选择">
<el-option
v-for="item in substationData"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="监测点电压等级:">
<el-select
v-model="form.voltageLevels"
clearable
multiple
collapse-tags
style="width: 225px"
placeholder="请选择"
>
<el-option
v-for="item in VoltageList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="监测点名称:" class="box">
<el-input v-model="form.monitorName" clearable placeholder="请填写内容"></el-input>
</el-form-item>
</el-form>
</div>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="Partslist"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
:formatter="formFilter"
>
<!-- <template v-for="(item, index) in item.children">
<vxe-table-column
:prop="item.prop"
:label="item.label"
:min-width="item.width"
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-column
:prop="item.prop"
:label="item.label"
:key="index"
></vxe-table-column>
</template>
</vxe-table-column>
</template> -->
</vxe-table-column>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="form.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="form.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</div>
</template>
<script>
import { getPwRMpPassRateInfo } from '@/api/Distributionnetwork/steady-state/steady-state'
import { getPmsPowerrInfoWithInOrg } from '@/api/Statistical-analysis/steadyStateIndicators/steadyStateIndicators'
import { dicData } from '@/assets/commjs/dictypeData'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
view: false,
item: ['', ''],
form: {
endTime: '',
id: '',
monitorName: '',
monitorSort: [],
powerrIds: [],
startTime: '',
type: 0,
pageNum: 1,
pageSize: 20,
voltageLevels: []
},
formData: {
deptIndex: '',
manufacturer: [],
monitorObjectType: [],
monitorState: [],
statisticalType: {},
voltageLevel: [],
upToGrid: ''
},
//监测点类别数据
typeList: [],
VoltageList: [], //电压等级数据
substationData: [], //所属变电站
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: 'measurementPointName', label: '监测点名称', width: 150 },
{ prop: 'monitorSort', label: '监测点类型', width: 100 },
// { prop: "onlineMonitoring", label: "监测点编号" },
{ prop: 'monitorVoltageName', label: '监测点电压等级', width: 120 },
{ prop: 'orgName', label: '所属单位', width: 100 },
{ prop: 'powerName', label: '所属电站', width: 100 },
{ prop: 'freqPassRate', label: '频率合格率', width: 100 },
{ prop: 'vdevPassRate', label: '电压合格率', width: 100 },
{ prop: 'flickerPassRate', label: '长时闪变合格率', width: 100 }
],
totalData: [],
device: '',
total: undefined, // 总条数
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
]
}
},
created() {
this.getclassificationData()
this.formData.deptIndex = JSON.parse(window.sessionStorage.getItem('Info')).deptId
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
this.Obtain()
},
mounted() {
this.device = window.devicePixelRatio
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 215
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val
this.onSubmit()
},
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'
}
},
// 表格查询
onSubmit() {
this.isLoading1 = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
getPwRMpPassRateInfo(this.form).then(res => {
this.totalData = res.data.records
this.total = res.data.total
this.isLoading1 = false
})
},
// 数据过滤
formFilter(row, column) {
if (row.column.property == 'monitorSort') {
let title = ''
this.typeList.forEach(item => {
if (item.value == row.row.monitorSort) {
title = item.label
}
})
return title
} else if (row.column.property == 'monitorVoltageName') {
let title = ''
this.VoltageList.forEach(item => {
if (item.value == row.row.monitorVoltageName) {
title = item.label
}
})
return title
} else {
return row.row[row.column.property]
}
},
// 重置
resetForm() {
this.form = {}
this.$refs.interval.intervald = 1
},
//获取类型
getclassificationData() {
// 监测点类别
var Monitoring = 'Line_Sort'
this.typeList = dicData(Monitoring, ['Load_Type'])
this.typeList.forEach(item => {
this.form.monitorSort.push(item.id)
})
//电压等级
var Voltage = 'Dev_Voltage'
this.VoltageList = dicData(Voltage, ['Load_Type'])
this.VoltageList.forEach(item => {
this.form.voltageLevels.push(item.id)
})
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
this.formData.deptIndex = data.id
},
//获取变电站
Obtain() {
this.form.powerrIds = []
getPmsPowerrInfoWithInOrg(this.formData).then(res => {
let obj = {}
for (var i = 0; i < res.data.length; i++) {
if (!obj[res.data[i].id]) {
this.substationData.push(res.data[i])
obj[res.data[i].id] = true
}
}
this.substationData.forEach(item => {
this.form.powerrIds.push(item.id)
})
})
},
//导出
exportEvent() {
this.$refs.Partslist.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
.container {
/* margin: auto; */
top: 0px;
right: 0;
width: 40%;
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>

View File

@@ -0,0 +1,72 @@
<template>
<div>
<el-row>
<el-col>
<el-tabs v-model="activeName" @tab-click="handleClick">
<!-- 区域暂态事件统计 -->
<el-tab-pane label="区域超标统计" name="first">
<Exceedance v-if="activeName == 'first'"></Exceedance>
</el-tab-pane>
<!-- 区域暂态指标分类统计 -->
<el-tab-pane label="区域超标分类统计" name="third">
<classification v-if="activeName == 'third'"></classification>
</el-tab-pane>
<!-- 暂态事件明细 -->
<el-tab-pane label="稳态指标超标明细" name="detailed">
<detailed v-if="activeName == 'detailed'"></detailed>
</el-tab-pane>
<el-tab-pane label="变电站(换流站)稳态指标超标分类统计表" name="fifth">
<SubstationStatistics v-if="activeName == 'fifth'"></SubstationStatistics>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import Exceedance from './Total/Exceedance.vue'
import classification from './Total/classification.vue'
import detailed from './Total/detailed.vue'
import SubstationStatistics from './Total/SubstationStatistics.vue'
export default {
components: { Exceedance, classification, detailed, SubstationStatistics },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
activeName: 'first' //区分是那个节点
}
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 130 + 'px'
},
handleClick(tab, event) {
// if (tab.label == "暂态事件分布统计") {
// this.echarts();
// this.echarts2();
// this.echarts4();
// this.iticData();
// this.semif();
// this.echarts3();
// }
// this.onSubmit();
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,240 @@
<template>
<div id="echart" :style="`width:100%;height:${h};`" ref="fg" v-loading="isLoading1"></div>
</template>
<script>
export default {
props: {
trendChartData: {
type: Array,
default: undefined
}
},
data() {
return {
device: null,
zoom: undefined, //图表焦点校验
h: null,
isLoading1: false,
type: {},
deptId: '',
dataDate: [],
flickerTimes: [], //
freqTimes: [],
inegTimes: [],
inuharmTimes: [],
itimes: [],
unbalanceTimes: [],
vdevTimes: [],
vtimes: []
}
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.province()
})
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.zoom = window.devicePixelRatio
if (this.zoom == 1) {
let heightd = window.sessionStorage.getItem('appheight') - 300
this.h = heightd + 'px'
}
if (this.zoom == 1.25) {
let heightd = window.sessionStorage.getItem('appheight') - 405
this.h = heightd + 'px'
}
},
//echarts图
async province() {
this.isLoading1 = true
// console.log(this.trendChartData,'1111111111111111111111');
this.dataDate = []
this.freqTimes = []
this.vdevTimes = []
this.flickerTimes = []
this.vtimes = []
this.itimes = []
this.inuharmTimes = []
this.unbalanceTimes = []
this.inegTimes = []
this.trendChartData.forEach(item => {
this.dataDate.push(item.dataDate)
this.freqTimes.push(item.freqTimes)
this.vdevTimes.push(item.vdevTimes)
this.flickerTimes.push(item.flickerTimes)
this.vtimes.push(item.vtimes)
this.itimes.push(item.itimes)
this.inuharmTimes.push(item.inuharmTimes)
this.unbalanceTimes.push(item.unbalanceTimes)
this.inegTimes.push(item.inegTimes)
})
let echarts = require('echarts')
let domID1 = document.getElementById('echart')
let myChart = echarts.init(domID1)
this.isLoading1 = false
let option = {
color: ['#00bfff', '#00fa9a', '#000080', '#87ceeb', '#daa520', '#d2691e', '#ff6347', '#7b68ee'],
// title:{
// text: '配网运行指标',
// left: "1%",
// // top: 5,
// },
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
crossStyle: {
color: '#999'
}
}
},
grid: {
left: '3%',
right: '3%',
top: '8%',
bottom: '15%'
},
toolbox: {
feature: {
// dataView: { show: true, readOnly: false },
// magicType: { show: true, type: ["line", "bar"] },
// //restore: { show: true },
saveAsImage: { show: true }
}
},
legend: {
// data: ["日均", "累计"],
// icon: 'rect',
bottom: 10,
left: '25%',
itemGap: 20,
itemWidth: 12,
itemHeight: 8
},
xAxis: [
{
// name: '电压等级\n(监测点数)',// 给X轴加单位
type: 'category',
boundaryGap: false,
data: this.dataDate,
axisPointer: {
type: 'shadow'
},
itemStyle: {
barWidth: '30'
}
}
],
yAxis: [
{
type: 'value'
}
],
dataZoom: [
{
show: true,
height: 12,
xAxisIndex: [0],
bottom: '8%',
start: 0,
end: 100,
handleIcon:
'path://M306.1,413c0,2.2-1.8,4-4,4h-59.8c-2.2,0-4-1.8-4-4V200.8c0-2.2,1.8-4,4-4h59.8c2.2,0,4,1.8,4,4V413z',
handleSize: '110%',
handleStyle: {
color: '#d3dee5'
},
textStyle: {
color: '#fff'
},
borderColor: '#90979c'
},
{
type: 'inside',
show: true,
height: 15,
start: 0,
end: 100
}
],
series: [
{
name: '频率偏差',
type: 'line',
data: this.freqTimes
},
{
name: '电压偏差',
type: 'line',
data: this.vdevTimes
},
{
name: '闪变',
type: 'line',
data: this.flickerTimes
},
{
name: '谐波电压',
type: 'line',
data: this.vtimes
},
{
name: '谐波电流',
type: 'line',
data: this.itimes
},
{
name: '间谐波电压',
type: 'line',
data: this.inuharmTimes
},
{
name: '三相电压不平衡度',
type: 'line',
data: this.unbalanceTimes
},
{
name: '负序电流',
type: 'line',
data: this.inegTimes
}
]
}
myChart.setOption(option)
window.echartsArr.push(myChart)
// myChart.resize();
let _this = this
_this.$erd.listenTo(_this.$refs.fg, element => {
_this.$nextTick(() => {
myChart.resize()
})
})
window.onresize = function () {
myChart.resize()
}
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
.button {
float: right;
margin-top: 30px;
margin-right: 30px;
}
</style>

View File

@@ -0,0 +1,289 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item label="监测点类别:">
<el-select
v-model="form.ids"
clearable
multiple
collapse-tags
placeholder="请选择监测点类别"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
class="ml10"
icon="el-icon-search"
>查询</el-button
>
<el-button type="primary" icon="el-icon-download" @click="exportEvent"
>导出</el-button
>
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="Regionalstatistics"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
:formatter="formFilter"
>
<template v-for="(e, index) in item.children">
<vxe-table-colgroup
align="center"
:field="e.prop"
:title="e.label"
:min-width="e.width"
:key="index"
>
<template v-for="(val, index) in e.children">
<vxe-table-column
align="center"
:field="val.prop"
:title="val.label"
:min-width="val.width"
:key="index"
></vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
</div>
</template>
<script>
import { getPwAllRStatHarmonicOrg } from "@/api/Distributionnetwork/steady-state/steady-state";
import { dicData } from "@/assets/commjs/dictypeData";
import Timeinterval from "@/views/components/Timeinterval.vue";
import Area from "@/views/components/Area/Area.vue";
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: "",
input: "",
height: null,
item: ["", ""],
form: {
endTime: "",
id: "",
ids: [],
startTime: "",
type: "",
},
//监测点类别数据
typeList: [],
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: "orgName", label: "单位", width: 180 },
{ prop: "monitorSort", label: "监测点类别", width: 120 },
{
label: "有效监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "effectiveMeasurementAverage",
label: "日均",
width: 80,
},
{
prop: "effectiveMeasurementAccrued",
label: "累计",
width: 80,
},
],
},
{
label: "超标监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "overLimitMeasurementAverage",
label: "日均",
width: 80,
},
{
prop: "overLimitMeasurementAccrued",
label: "累计",
width: 80,
},
],
},
{
label: "超标监测点占比(%)",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "harmonicMeasurementRatioAverage",
label: "日均",
width: 80,
},
{
prop: "harmonicMeasurementRatioAccrued",
label: "累计",
width: 80,
},
],
},
{ prop: "averageOverDay", label: "稳态指标平均超标天数", width: 180 },
],
totalData: [],
device: "",
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions : [
{ label: "年份", value: 1 },
{ label: "季度", value: 2 },
{ label: "月份", value: 3 },
]
};
},
created() {
this.getclassificationData();
this.form.id = JSON.parse(window.sessionStorage.getItem("Info")).deptId;
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit();
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio;
this.vh = window.sessionStorage.getItem("appheight") - 215;
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val;
this.onSubmit();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val;
this.onSubmit();
},
// 表格查询
onSubmit() {
this.isLoading1 = true;
(this.form.type = this.$refs.interval.intervald);
this.item = this.$refs.interval.timeValue;
this.form.startTime = this.item[0];
this.form.endTime = this.item[1];
// console.log(this.form,'=========
//方法调用获取暂态事件统计数据接口
getPwAllRStatHarmonicOrg(this.form).then((res) => {
if (res.data == [] || res.data == null) {
this.isLoading1 = false;
this.totalData = res.data;
this.total = 0;
} else {
this.isLoading1 = false;
this.totalData = res.data;
this.total = this.totalData.length;
}
});
},
// 数据过滤
formFilter(row) {
// console.log(row);
if (row.column.property == "monitorSort") {
let title = "";
this.typeList.forEach((item) => {
if (item.value == row.row.monitorSort) {
title = item.label;
}
});
return title;
} else {
return row.row[row.column.property];
}
},
//获取类型
getclassificationData() {
// 监测点类别
var Monitoring = "Line_Sort";
this.typeList = dicData(Monitoring, ["Load_Type"]);
this.typeList.forEach((item) => {
this.form.ids.push(item.id);
});
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id;
},
//导出
exportEvent() {
this.$refs.Regionalstatistics.exportData({
filename: "export", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData, // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
});
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../../styles/comStyle.less");
</style>

View File

@@ -0,0 +1,282 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item label="变电站名称:">
<el-select
v-model="form.Ids"
clearable
multiple
collapse-tags
placeholder="请选择"
>
<el-option
v-for="item in substationData"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
class="ml10"
icon="el-icon-search"
>查询</el-button
>
<el-button type="primary" icon="el-icon-download" @click="exportEvent"
>导出</el-button
>
<!-- <el-button type="primary" icon="el-icon-refresh" @click="Reset">重置</el-button> -->
</el-form-item>
</el-form>
<vxe-table
:data="
totalData.slice((currentPage - 1) * pageSize, currentPage * pageSize)
"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="SubstationStatistics"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
show-overflow
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-column
align="center"
show-overflow
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<!-- <template v-for="(item, index) in item.children">
<vxe-table-column :field="item.prop" :title="item.label" :key="index" ></vxe-table-column>
</template> -->
</vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
</div>
</template>
<script>
import {
getPwRStatSubstationOrg,
getPmsPowerrInfoWithInOrg,
} from "@/api/Statistical-analysis/steadyStateIndicators/steadyStateIndicators";
import Timeinterval from "@/views/components/Timeinterval.vue";
import Area from "@/views/components/Area/Area.vue";
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: "",
input: "",
height: null,
item: ["", ""],
form: {
endTime: "",
id: "",
startTime: "",
type: 0,
Ids: [],
},
formData: {
deptIndex: "",
manufacturer: [],
monitorObjectType: [],
monitorState: [],
statisticalType: {},
voltageLevel: [],
upToGrid: "",
},
isLoading1: false,
substationData: [], //变电站名称
//区域超标统计
tableHeaderTotal: [
{ prop: "cityName", label: "单位", width: `120px` },
{ prop: "substationName", label: "变电站名称", width: `120px` },
{
prop: "effectiveMeasurementAccrued",
label: "累计有效接入点数",
width: `140px`,
},
{
label: "平均超标天数",
children: [
{ prop: "freqAverageOverDay", label: "频率偏差", width: `120px` },
{ prop: "vdevAverageOverDay", label: "电压偏差", width: `120px` },
{ prop: "flickerAverageOverDay", label: "长时闪变", width: `120px` },
{ prop: "vaverageOverDay", label: "谐波电压", width: `120px` },
{ prop: "iaverageOverDay", label: "谐波电流", width: `120px` },
{
prop: "inuharmAverageOverDay",
label: "间谐波电压",
width: `120px`,
},
{
prop: "unbalanceAverageOverDay",
label: "三相电压不平衡度",
width: `140px`,
},
{ prop: "inegAverageOverDay", label: "负序电流", width: `120px` },
],
},
],
totalData: [],
device: "",
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions : [
{ label: "年份", value: 1 },
{ label: "季度", value: 2 },
{ label: "月份", value: 3 },
// { label: "周", value: 4 },
// // { label: "自定义", value: 5 },
]
};
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem("Info")).deptId;
this.formData.deptIndex = JSON.parse(
window.sessionStorage.getItem("Info")
).deptId;
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.Obtain();
this.onSubmit();
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio;
this.vh = window.sessionStorage.getItem("appheight") - 215;
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val;
this.onSubmit();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val;
this.onSubmit();
},
// transient() {},
// 表格查询
onSubmit() {
this.isLoading1 = true;
(this.form.type = this.$refs.interval.intervald);
this.item = this.$refs.interval.timeValue;
this.form.startTime = this.item[0];
this.form.endTime = this.item[1];
// console.log(this.form,'===============================');
//方法调用获取暂态事件统计数据接口
getPwRStatSubstationOrg(this.form).then((res) => {
if (res.data == []) {
this.total = 0;
} else {
this.isLoading1 = false;
this.totalData = res.data;
this.total = this.totalData.length;
}
});
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id;
this.formData.deptIndex = data.id;
},
//获取变电站
Obtain() {
this.form.Ids = [];
getPmsPowerrInfoWithInOrg(this.formData).then((res) => {
// console.log(res,'=============================');
// this.substationData=res.data
// let arr=this.substationData
// arr=[...new Set(arr)]
// console.log(arr);
let obj = {};
for (var i = 0; i < res.data.length; i++) {
if (!obj[res.data[i].id]) {
this.substationData.push(res.data[i]);
obj[res.data[i].id] = true;
}
}
//console.log(this.substationData, "================");
this.substationData.forEach((item) => {
this.form.Ids.push(item.id);
});
});
},
//重置
Reset() {
this.$refs.area.form.valueTitle = "全国";
this.$refs.interval.intervald = 1;
this.form.substationName = "";
},
//导出
exportEvent() {
this.$refs.SubstationStatistics.exportData({
filename: "export", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData, // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
});
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../../styles/comStyle.less");
</style>

View File

@@ -0,0 +1,533 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item label="监测点类别:">
<el-select v-model="form.ids" clearable multiple collapse-tags placeholder="请选择监测点类别">
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</el-button>
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="Classifiedstatistics"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template slot-scope="scope">
<span>{{ scope.row[item.prop] == null ? '/' : scope.row[item.prop] }}</span>
</template>
<template v-for="(item, index) in item.children">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:key="index"
:min-width="item.width"
>
<template slot-scope="scope">
<span>{{ scope.row[item.prop] == null ? '/' : scope.row[item.prop] }}</span>
</template>
</vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 70, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</div>
</template>
<script>
import { getPwRStatSubstation } from '@/api/Distributionnetwork/steady-state/steady-state'
import { dicData } from '@/assets/commjs/dictypeData'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
item: ['', ''],
form: {
endTime: '',
id: '',
ids: [],
startTime: '',
type: ''
},
//监测点类别数据
typeList: [],
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: 'orgName', label: '单位', width: 180 },
{ prop: 'monitorSort', label: '监测点类别', width: 120 },
{
label: '有效监测点数',
children: [
{ prop: 'effectiveMeasurementAverage', label: '日均', width: 70 },
{ prop: 'effectiveMeasurementAccrued', label: '累计', width: 70 }
]
},
{
label: '超标监测点数',
children: [
{ prop: 'harmonicMeasurementAverage', label: '日均', width: 70 },
{ prop: 'harmonicMeasurementAccrued', label: '累计', width: 70 }
]
},
{
label: '频率偏差',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage', label: '日均', width: 70 },
{ prop: 'taccrued', label: '累计', width: 70, width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage', label: '日均', width: 70 },
{ prop: 'oaccrued', label: '累计', width: 70, width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage', label: '日均', width: 70 },
{ prop: 'chainAccrued', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage', label: '日均', width: 70 },
{ prop: 'sameAccrued', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay', label: '平均超标天数', width: 120 }
]
},
{
label: '电压偏差',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage1', label: '日均', width: 70 },
{ prop: 'taccrued1', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage1', label: '日均', width: 70 },
{ prop: 'oaccrued1', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage1', label: '日均', width: 70 },
{ prop: 'chainAccrued1', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage1', label: '日均', width: 70 },
{ prop: 'sameAccrued1', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay1', label: '平均超标天数', width: 120 }
]
},
{
label: '长时闪变',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage2', label: '日均', width: 70 },
{ prop: 'taccrued2', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage2', label: '日均', width: 70 },
{ prop: 'oaccrued2', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage2', label: '日均', width: 70 },
{ prop: 'chainAccrued2', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage2', label: '日均', width: 70 },
{ prop: 'sameAccrued2', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay2', label: '平均超标天数', width: 120 }
]
},
{
label: '谐波电流',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage4', label: '日均', width: 70 },
{ prop: 'taccrued4', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage4', label: '日均', width: 70 },
{ prop: 'oaccrued4', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage4', label: '日均', width: 70 },
{ prop: 'chainAccrued4', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage4', label: '日均', width: 70 },
{ prop: 'sameAccrued4', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay4', label: '平均超标天数', width: 120 }
]
},
{
label: '谐波电压',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage3', label: '日均', width: 70 },
{ prop: 'taccrued3', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage3', label: '日均', width: 70 },
{ prop: 'oaccrued3', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage3', label: '日均', width: 70 },
{ prop: 'chainAccrued3', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage3', label: '日均', width: 70 },
{ prop: 'sameAccrued3', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay3', label: '平均超标天数', width: 120 }
]
},
{
label: '间谐波电压',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage5', label: '日均', width: 70 },
{ prop: 'taccrued5', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage5', label: '日均', width: 70 },
{ prop: 'oaccrued5', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage5', label: '日均', width: 70 },
{ prop: 'chainAccrued5', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage5', label: '日均', width: 70 },
{ prop: 'sameAccrued5', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay5', label: '平均超标天数', width: 120 }
]
},
{
label: '三相电压不平衡度',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage6', label: '日均', width: 70 },
{ prop: 'taccrued6', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage6', label: '日均', width: 70 },
{ prop: 'oaccrued6', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage6', label: '日均', width: 70 },
{ prop: 'chainAccrued6', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage6', label: '日均', width: 70 },
{ prop: 'sameAccrued6', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay6', label: '平均超标天数', width: 120 }
]
},
{
label: '负序电流',
children: [
{
prop: 'monthVoltage',
label: '监测点数',
children: [
{ prop: 'taverage7', label: '日均', width: 70 },
{ prop: 'taccrued7', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '占比',
children: [
{ prop: 'oaverage7', label: '日均', width: 70 },
{ prop: 'oaccrued7', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '同比',
children: [
{ prop: 'chainAverage7', label: '日均', width: 70 },
{ prop: 'chainAccrued7', label: '累计', width: 70 }
]
},
{
prop: 'onlineMonitoring',
label: '环比',
children: [
{ prop: 'sameAverage7', label: '日均', width: 70 },
{ prop: 'sameAccrued7', label: '累计', width: 70 }
]
},
{ prop: 'averageOverDay7', label: '平均超标天数', width: 120 }
]
}
// { prop: "onlineMonitoring", label: "稳态指标平均超标天数", width: 120, width: 180 },
],
totalData: [],
device: '',
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
// { label: "周", value: 4 },
// // { label: "自定义", value: 5 },
]
}
},
created() {
this.getclassificationData()
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 215
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val
this.onSubmit()
},
transient() {},
// 表格查询
onSubmit() {
this.isLoading1 = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
//方法调用获取暂态事件统计数据接口
getPwRStatSubstation(this.form).then(res => {
if (res.data == [] || res.data == null) {
this.isLoading1 = false
this.totalData = res.data
this.total = 0
} else {
this.isLoading1 = false
this.totalData = res.data
this.total = this.totalData.length
}
})
},
//获取类型
getclassificationData() {
var Monitoring = 'Line_Sort'
this.typeList = dicData(Monitoring, ['Load_Type'])
this.typeList.forEach(item => {
this.form.ids.push(item.id)
})
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
},
cellStyle(row) {
this.typeList.forEach(item => {
if (item.value == row.row.monitorSort) {
row.row.monitorSort = item.label
}
})
},
//导出
exportEvent() {
this.$refs.Classifiedstatistics.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,722 @@
<template>
<div>
<el-form
id="zbmx"
:inline="true"
ref="formf"
:model="form"
class="demo-form-inline"
>
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
class="ml10"
icon="el-icon-search"
>查询</el-button
>
<!-- <el-button
type="primary"
icon="el-icon-refresh-right"
@click="resetForm"
>重置</el-button
> -->
<el-button type="primary" icon="el-icon-download" @click="exportEvent"
>导出</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>
<div class="container" id="container">
<i @click="closeHandle" class="el-icon-circle-close coles"></i>
<el-form :inline="true" label-width="110px">
<el-form-item label="电压等级:">
<el-select
v-model.trim="form.voltageLevels"
placeholder="请选择"
clearable
multiple
style="width: 225px"
collapse-tags
>
<el-option
v-for="item in VoltageList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<!-- <el-form-item label="监测点名称:">
<el-input
v-model.trim="form.monitorName"
placeholder="监测点名称"
clearable
>
</el-input>
</el-form-item> -->
<el-form-item label="监测点类别:">
<el-select
v-model="form.monitorSort"
clearable
multiple
collapse-tags
placeholder="请选择监测点类别"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
</el-form>
</div>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="Exceedancedetails"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<vxe-table-colgroup
v-for="(item, index) in tableHeaderTotal"
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
show-overflow
>
<template slot-scope="scope">
<span
v-if="item.label == '指标趋势图'"
type="primary"
size="small"
style="color: blue; text-decoration: underline; cursor: pointer"
@click="trendChartFn(scope.row)"
>查看</span
>
<!-- <span v-if="item.label == '指标趋势图'">
<vxe-button
status="primary"
size="mini"
icon="el-icon-view"
@click="trendChartFn(scope.row)"
>查看</vxe-button
></span
> -->
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
<vxe-table-column
v-for="(item, index) in item.children"
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<!-- <template v-for="(item, index) in item.children">
<vxe-table-column
:field="item.prop"
:label="item.label"
:key="index"
></vxe-table-column>
</template> -->
</vxe-table-column>
</vxe-table-colgroup>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="form.pageNum"
:page-sizes="[20, 30, 40, 80, 100]"
:page-size="form.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
<el-dialog
:close-on-click-modal="false"
title="趋势图"
:visible.sync="trendChart"
width="70%"
>
<Echarts :trendChartData="trendChartData" ref="echarts"></Echarts>
</el-dialog>
</div>
</template>
<script>
import {
getPwRMpPartHarmonicDetail,
getRMpPartHarmonicDetailIcon,
} from "@/api/Distributionnetwork/steady-state/steady-state";
import { dicData } from "@/assets/commjs/dictypeData";
import Echarts from "./Echarts.vue";
import Timeinterval from "@/views/components/Timeinterval.vue";
import Area from "@/views/components/Area/Area.vue";
export default {
components: { Area, Timeinterval, Echarts },
data() {
return {
fvh: "",
vh: null,
date: "",
input: "",
height: null,
IdData: {},
item: ["", ""],
form: {
endTime: "",
id: "",
startTime: "",
monitorName: "",
monitorSort: [],
voltageLevels: [],
powerrIds: [],
type: 0,
pageNum: 1,
pageSize: 20,
},
classificationData: [],
//监测点类别数据
typeList: [],
VoltageList: [], //电压等级数据
isLoading1: false,
trendChart: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: "orgName", label: "所属单位", width: 180 },
{ prop: "powerrName", label: "所属变电站", width: 120 },
{ prop: "monitorVoltageName", label: "监测点电压等级", width: 160 },
{ prop: "measurementPointName", label: "监测点名称", width: 120 },
{ prop: "measurementPointId", label: "监测点编号", width: 120 },
{ prop: "measurementOverDay", label: "监测点总超标天数", width: 160 },
{ prop: "onlineMonitoring", label: "指标趋势图", width: 120 },
{ prop: "freqOverDay", label: "频率偏差", width: 120 },
{
label: "电压偏差",
children: [
{
prop: "vdevUpOverDay",
label: "上偏差",
width: 80,
},
{
prop: "vdevLowOverDay",
label: "下偏差",
width: 80,
},
{
prop: "vdevOverDay",
label: "合计",
width: 80,
},
],
},
{ prop: "vthdOverDay", label: "电压总谐波畸变率", width: 160 },
{ prop: "voverDay", label: "谐波电压", width: 120 },
{ prop: "ioverDay", label: "谐波电流", width: 120 },
{
label: "谐波电压含有率",
children: [
{
prop: "v2OverDay",
label: "2次",
width: 80,
},
{
prop: "v3OverDay",
label: "3次",
width: 80,
},
{
prop: "v4OverDay",
label: "4次",
width: 80,
},
{
prop: "v5OverDay",
label: "5次",
width: 80,
},
{
prop: "v6OverDay",
label: "6次",
width: 80,
},
{
prop: "v7OverDay",
label: "7次",
width: 80,
},
{
prop: "v8OverDay",
label: "8次",
width: 80,
},
{
prop: "v9OverDay",
label: "9次",
width: 80,
},
{
prop: "v10OverDay",
label: "10次",
width: 80,
},
{
prop: "v11OverDay",
label: "11次",
width: 80,
},
{
prop: "v12OverDay",
label: "12次",
width: 80,
},
{
prop: "v13OverDay",
label: "13次",
width: 80,
},
{
prop: "v14OverDay",
label: "14次",
width: 80,
},
{
prop: "v15OverDay",
label: "15次",
width: 80,
},
{
prop: "v16OverDay",
label: "16次",
width: 80,
},
{
prop: "v17OverDay",
label: "17次",
width: 80,
},
{
prop: "v18OverDay",
label: "18次",
width: 80,
},
{
prop: "v19OverDay",
label: "19次",
width: 80,
},
{
prop: "v20OverDay",
label: "20次",
width: 80,
},
{
prop: "v21OverDay",
label: "21次",
width: 80,
},
{
prop: "v22OverDay",
label: "22次",
width: 80,
},
{
prop: "v23OverDay",
label: "23次",
width: 80,
},
{
prop: "v24OverDay",
label: "24次",
width: 80,
},
{
prop: "v25OverDay",
label: "25次",
width: 80,
},
],
},
{
label: "谐波电流幅值",
children: [
{
prop: "i2OverDay",
label: "2次",
width: 80,
},
{
prop: "i3OverDay",
label: "3次",
width: 80,
},
{
prop: "i4OverDay",
label: "4次",
width: 80,
},
{
prop: "i5OverDay",
label: "5次",
width: 80,
},
{
prop: "i6OverDay",
label: "6次",
width: 80,
},
{
prop: "i7OverDay",
label: "7次",
width: 80,
},
{
prop: "i8OverDay",
label: "8次",
width: 80,
},
{
prop: "i9OverDay",
label: "9次",
width: 80,
},
{
prop: "i10OverDay",
label: "10次",
width: 80,
},
{
prop: "i11OverDay",
label: "11次",
width: 80,
},
{
prop: "i12OverDay",
label: "12次",
width: 80,
},
{
prop: "i13OverDay",
label: "13次",
width: 80,
},
{
prop: "i14OverDay",
label: "14次",
width: 80,
},
{
prop: "i15OverDay",
label: "15次",
width: 80,
},
{
prop: "i16OverDay",
label: "16次",
width: 80,
},
{
prop: "i17OverDay",
label: "17次",
width: 80,
},
{
prop: "i18OverDay",
label: "18次",
width: 80,
},
{
prop: "i19OverDay",
label: "19次",
width: 80,
},
{
prop: "i20OverDay",
label: "20次",
width: 80,
},
{
prop: "i21OverDay",
label: "21次",
width: 80,
},
{
prop: "i22OverDay",
label: "22次",
width: 80,
},
{
prop: "i23OverDay",
label: "23次",
width: 80,
},
{
prop: "i24OverDay",
label: "24次",
width: 80,
},
{
prop: "i25OverDay",
label: "25次",
width: 80,
},
],
},
{ prop: "inuharmOverDay", label: "间谐波电压含有率", width: 160 },
{ prop: "unbalanceOverDay", label: "三相电压不平衡度", width: 160 },
{ prop: "inegOverDay", label: "负序电流", width: 120 },
{ prop: "flickerOverDay", label: "长时闪变", width: 120 },
],
totalData: [],
trendChartData: [], //趋势图
device: "",
view:false,
total: undefined, // 总条数
timeOptions : [
{ label: "年份", value: 1 },
{ label: "季度", value: 2 },
{ label: "月份", value: 3 },
]
};
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem("Info")).deptId;
this.getclassificationData();
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.fvh = document.getElementById("zbmx").offsetHeight;
//console.log("++++++++++++++++++++++",this.fvh)
this.device = window.devicePixelRatio;
this.onSubmit();
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem("appheight") - 215;
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val;
this.onSubmit();
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val;
this.onSubmit();
},
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";
}
},
transient() {},
// 表格查询
onSubmit() {
this.isLoading1 = true;
(this.form.type = this.$refs.interval.intervald);
this.item = this.$refs.interval.timeValue;
this.form.startTime = this.item[0];
this.form.endTime = this.item[1];
//方法调用获取暂态事件统计数据接口
getPwRMpPartHarmonicDetail(this.form).then((res) => {
this.totalData = res.data.records
this.total = res.data.total
this.isLoading1 = false;
});
},
//趋势图显示
trendChartFn(row) {
// console.log(row);
this.trendChart = true;
let form = {
id: row.measurementPointId,
startTime: this.form.startTime,
endTime: this.form.endTime,
};
getRMpPartHarmonicDetailIcon(form).then((res) => {
this.trendChartData = res.data;
setTimeout(() => {
this.$refs.echarts.province();
}, 100);
});
},
// 重置
resetForm() {
this.form = {};
},
//获取类型
getclassificationData() {
// 监测点类别
var Monitoring = "Line_Sort";
this.typeList = dicData(Monitoring, ["Load_Type"]);
this.typeList.forEach((item) => {
this.form.monitorSort.push(item.id);
});
//电压等级
var Voltage = "Dev_Voltage";
this.VoltageList = dicData(Voltage, ["Load_Type"]);
this.VoltageList.forEach((item) => {
this.form.voltageLevels.push(item.id);
});
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id;
},
cellStyle(row) {
this.VoltageList.forEach((item) => {
if (row.row.monitorVoltageName == item.id) {
row.row.monitorVoltageName = item.label;
}
});
},
//导出
exportEvent() {
this.$refs.Exceedancedetails.exportData({
filename: "export", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData, // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
});
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../../styles/comStyle.less");
::v-deep .vxe-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
::v-deep .el-row {
width: 100%;
}
::v-deep .form {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.el-form-item {
display: flex;
width: 48%;
.el-form-item__content {
flex: 1 !important;
.el-select {
width: 100%;
}
.el-input__inner {
width: 100% !important;
}
.el-date-editor {
width: 100%;
}
}
}
}
.container {
/* margin: auto; */
top: 0px;
right: 0;
width: 40%;
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>

View File

@@ -0,0 +1,35 @@
<template>
<div>
<!-- 台账 -->
<StandingBook v-show="flag" @ViewReport="ViewReport" />
<!-- 报表 --5-->
<TrendChart v-if="!flag" :reportID="reportID" @close='flag=true'/>
</div>
</template>
<script>
import TrendChart from "./components/TrendChart";
import StandingBook from "./components/StandingBook";
export default {
components: { TrendChart, StandingBook },
props: {},
data() {
return {
flag: true,
reportID: "",
};
},
created() {},
methods: {
ViewReport(id) {
this.reportID = id;
this.flag = false;
},
},
computed: {},
watch: {},
};
</script>

View File

@@ -0,0 +1,440 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item label="监测点类别:">
<el-select
v-model="form.monitorSort"
clearable
multiple
collapse-tags
placeholder="请选择监测点类别"
>
<el-option
v-for="item in typeList"
:key="item.id"
:label="item.name"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type="primary"
@click="onSubmit"
class="ml10"
icon="el-icon-search"
>查询</el-button
>
<el-button type="primary" icon="el-icon-download" @click="exportEvent"
>导出</el-button
>
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="classification"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template slot-scope="scope">
<span v-if="scope.row[item.prop] == null">/</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template slot-scope="scope">
<span v-if="scope.row[item.prop] == null">/</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
<template v-for="(item, index) in item.children">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template slot-scope="scope">
<span v-if="scope.row[item.prop] == null">/</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
</vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
>
</el-pagination>
</div>
</template>
<script>
import { getPwRStatOrgClassified } from "@/api/Distributionnetwork/transient/transient";
import { dicData } from "@/assets/commjs/dictypeData";
import Timeinterval from "@/views/components/Timeinterval.vue";
import Area from "@/views/components/Area/Area.vue";
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: "",
input: "",
height: null,
item: ["", ""],
form: {
monitorSort: [], //监测点类别
endTime: "",
startTime: "",
id: "",
type: "",
},
//监测点类别数据
typeList: [],
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: "orgName", label: "单位", width: "180" },
{ prop: "measurementTypeClass", label: "监测点类别", width: "120" },
{
prop: "Effectiveaccess",
label: "有效接入监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "effectiveMeasurementAverage",
label: "日均",
width: "100",
},
{
prop: "effectiveMeasurementAccrued",
label: "累计",
width: "100",
},
],
},
{
prop: "Transientmonitoring",
label: "暂态监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "eventMeasurementAverage",
label: "日均",
width: "100",
},
{
prop: "eventMeasurementAccrued",
label: "累计",
width: "100",
},
],
},
{
label: "暂态监测点占比(%)",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "eventMeasurementRatioAverage",
label: "日均",
width: "100",
},
{
prop: "eventMeasurementRatioAccrued",
label: "累计",
width: "100",
},
],
},
{ prop: "eventCount", label: "暂态发生次数", width: "120" },
{ prop: "eventFreq", label: "暂态发生频次", width: "120" },
{
label: "短时中断",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
label: "监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "dayShortInterruptions",
label: "日均",
width: "100",
},
{
prop: "cumulativeShortInterruptions",
label: "累计",
width: "100",
},
],
},
{
label: "占比(%)",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "dayShortInterruptionsProportion",
label: "日均",
width: "100",
},
{
prop: "cumulativeShortInterruptionsProportion",
label: "累计",
width: "100",
},
],
},
{
prop: "shortInterruptionsCount",
label: "暂态发生次数",
width: "120",
},
{
prop: "shortInterruptionsFreq",
label: "暂态发生频次",
width: "120",
},
],
},
{
label: "电压暂升",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
label: "监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "dayVoltageRise",
label: "日均",
width: "100",
},
{
prop: "cumulativeVoltageRise",
label: "累计",
width: "100",
},
],
},
{
label: "占比(%)",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "dayVoltageRiseProportion",
label: "日均",
width: "100",
},
{
prop: "cumulativeVoltageRiseProportion",
label: "累计",
width: "100",
},
],
},
{ prop: "voltageRiseCount", label: "暂态发生次数", width: "120" },
{ prop: "voltageRiseFreq", label: "暂态发生频次", width: "120" },
],
},
{
label: "电压暂降",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
label: "监测点数",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "dayVoltageDip",
label: "日均",
width: "100",
},
{
prop: "cumulativeVoltageDip",
label: "累计",
width: "100",
},
],
},
{
label: "占比(%)",
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: "dayVoltageDipProportion",
label: "日均",
width: "100",
},
{
prop: "cumulativeVoltageDipProportion",
label: "累计",
width: "100",
},
],
},
{ prop: "voltageDipCount", label: "暂态发生次数", width: "120" },
{ prop: "voltageDipFreq", label: "暂态发生频次", width: "120" },
],
},
],
totalData: [],
device: "",
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
]
};
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem("Info")).deptId;
this.getclassificationData();
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit();
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio;
this.vh = window.sessionStorage.getItem("appheight") - 215;
},
//获取类型
getclassificationData() {
var code = "Line_Sort";
this.typeList = dicData(code, []);
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
// console.log(`每页 ${val} 条`);
this.currentPage = 1;
this.pageSize = val;
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
// console.log(`当前页: ${val}`);
this.currentPage = val;
},
transient() {},
// 表格查询
onSubmit() {
this.isLoading1 = true;
(this.form.type = this.$refs.interval.intervald);
this.item = this.$refs.interval.timeValue;
this.form.startTime = this.item[0];
this.form.endTime = this.item[1];
//方法调用获取暂态事件统计数据接口
getPwRStatOrgClassified(this.form).then((res) => {
if (res.data == [] || res.data == null) {
this.isLoading1 = false;
this.totalData = res.data;
this.total = 0;
} else {
this.isLoading1 = false;
this.totalData = res.data;
this.total = this.totalData.length;
}
});
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id;
},
//导出
exportEvent() {
this.$refs.classification.exportData({
filename: "export", // 文件名字
sheetName: "Sheet1",
type: "xlsx", //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData, // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
});
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
::v-deep .vxe-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
::v-deep .el-row {
width: 100%;
}
::v-deep .form {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.el-form-item {
display: flex;
width: 48%;
.el-form-item__content {
flex: 1 !important;
.el-select {
width: 100%;
}
.el-input__inner {
width: 100% !important;
}
.el-date-editor {
width: 100%;
}
}
}
}
</style>

View File

@@ -0,0 +1,395 @@
<template>
<div>
<!-- 表格 -->
<div v-if="view">
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item label="监测点:">
<el-input
v-model="form.monitorName"
clearable
placeholder="请填写内容"
onkeyup="value = value.replace(/[@&<>/?#$%&*]/,'')"
></el-input>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" icon="el-icon-search">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</el-button>
<!-- <el-button
type="primary"
class="boxing"
icon="el-icon-download"
@click="fn"
>存在波形</el-button
> -->
</el-form-item>
</el-form>
<vxe-table
:data="PlatformData"
:height="vh"
size="mini"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
ref="EventDetails"
v-loading="isLoading"
style="width: 100%"
header-cell-class-name="table_header"
@checkbox-all="selectAllChangeEvent1"
@checkbox-change="selectChangeEvent1"
:cell-style="cellStyle"
>
<vxe-table-column type="checkbox" width="55"></vxe-table-column>
<template v-for="(item, index) in tableHeaderPlatform">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:key="index"
show-overflow
:min-width="item.width"
>
<template slot-scope="scope">
<!-- <el-button
type="primary"
v-if="item.prop == 'Waveform'"
@click="queryBxView(scope.row)"
>{{ scope.row[item.prop] == 0 ? "不存在波形" : "存在波形" }}
</el-button> -->
<!-- <span v-if="item.prop == 'Waveform'" style="color: blue; text-decoration: underline; cursor: pointer;" @click="queryBxView(scope.row)">波形查看</span> -->
<!-- <vxe-button v-if="item.prop == 'Waveform'" status="button" @click="queryBxView(scope.row)" >波形查看</vxe-button > -->
<!-- <span v-else>{{ scope.row[item.prop] }}</span> -->
<!-- <el-button v-if="scope.row.fileFlag == 0" type="primary" style="color: #000; background: #ccc;">暂无波形</el-button> -->
<!-- <el-button
v-if="item.prop == 'Waveform'"
type="primary"
size="mini"
icon="el-icon-view"
@click="queryBxView(scope.row)"
>波形查看</el-button>
<span v-else> {{ scope.row[item.prop] }}</span> -->
<span v-if="item.prop === 'duration'">
{{ scope.row[item.prop] / 1000 }}
</span>
<span v-else>{{ scope.row[item.prop] }}</span>
</template>
</vxe-table-column>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="form.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="form.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</div>
<el-form v-if="view2" :inline="true" :model="form" class="demo-form-inline">
<el-form-item label="值类型选择:">
<el-select v-if="view2" v-model="value" @change="changeView" placeholder="请选择值类型">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
</el-form-item>
<el-form-item style="float: right">
<el-button
v-if="view2"
@click="backbxlb"
type="primary"
class="el-icon-refresh-right"
style="float: right"
>
返回
</el-button>
</el-form-item>
</el-form>
<el-tabs :style="`height:${vhh}`" v-if="view2" v-model="bxactiveName" @tab-click="bxhandleClick">
<el-tab-pane label="瞬时波形" name="ssbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'">
<shushiboxi
v-if="bxactiveName == 'ssbx' && showBoxi"
:value="value"
:boxoList="boxoList"
:wp="wp"
></shushiboxi>
</el-tab-pane>
<el-tab-pane label="RMS波形" name="rmsbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'">
<rmsboxi
v-if="bxactiveName == 'rmsbx' && showBoxi"
:value="value"
:boxoList="boxoList"
:wp="wp"
></rmsboxi>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
// import { getSubstationData, getShapeData } from "@/api/TransientStateIndex";
import {
getPwRmpEventDetail,
getTransientAnalyseWave,
getTransientAnalyseWaves
} from '@/api/Distributionnetwork/transient/transient'
import rmsboxi from '@/views/Event-boot/components/echarts/rmsboxi'
import shushiboxi from '@/views/Event-boot/components/echarts/shushiboxi'
import { dicData } from '@/assets/commjs/dictypeData'
import Area from '@/views/components/Area/Area.vue'
import Timeinterval from '@/views/components/Timeinterval.vue'
// import boxis from "@/assets/commjs/boxi";
import transientlistVue from '@/views/Event-boot/Region/transientlist.vue'
export default {
components: { rmsboxi, shushiboxi, Area, Timeinterval },
data() {
return {
boxoList: {},
view: true,
view2: false,
bxecharts: undefined,
wp: {},
vh: undefined,
date: '',
input: '',
vhh: '',
height: null,
dialogVisible: false,
item: ['', ''],
form: {
// monitorSort: [], //监测点类别
monitorName: '', //监测点
endTime: '',
startTime: '',
id: '',
type: '',
pageNum: 1,
pageSize: 20
},
//电压等级
Voltagelevel: [],
//暂态指标
Sagindex: [],
//里层默认波形tab标签页
bxactiveName: 'ssbx',
value: 1,
showBoxi: true,
options: [
{
value: 1,
label: '一次值'
},
{
value: 2,
label: '二次值'
}
],
isLoading: false,
//暂态分布明细
tableHeaderPlatform: [
{ prop: 'orgName', label: '单位', width: 140 },
{ prop: 'subName', label: '所属变电站', width: 160 },
{ prop: 'powerDistributionArea', label: '所属台区', width: 140 },
{ prop: 'powerClient', label: '用户名称', width: 180 },
{ prop: 'monitorSort', label: '监测点类别', width: 180 },
{
prop: 'monitorVoltageLevel',
label: '监测点电压等级(kV)',
width: 180
},
{ prop: 'monitorName', label: '监测点名称', width: 150 },
{ prop: 'startTime', label: '暂态事件发生时间', width: 180 },
{ prop: 'eventType', label: '暂态事件类型', width: 180 },
{ prop: 'featureAmplitude', label: '特征幅值(%)', width: 180 },
{ prop: 'duration', label: '持续时间(秒)', width: 180 }
// { prop: "Waveform", label: "波形显示", width: 180 },
],
PlatformData: [],
device: '',
total: undefined, // 总条数
multipleSelection: [],
timeOptions : [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
// { label: "周", value: 4 },
// // { label: "自定义", value: 5 },
]
}
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
this.getclassificationData()
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
// this.vh2 = window.sessionStorage.getItem('appheight') - 205;
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 165
this.vhh = window.sessionStorage.getItem('appheight') - 140 + 'px'
this.height = window.sessionStorage.getItem('appheight') - 175 + 'px'
this.bxecharts = window.sessionStorage.getItem('appheight') - 210 + 'px'
},
//获取类型
getclassificationData() {
//电压等级
this.Voltagelevel = dicData('Dev_Voltage', [])
//暂态指标
this.Sagindex = dicData('Event_Statis', [])
},
changeView() {
this.showBoxi = false
setTimeout(() => {
this.showBoxi = true
}, 0)
},
//里层波形tab标签页触发事件
bxhandleClick(tab, event) {
if (tab.name == 'ssbx') {
this.bxactiveName = 'ssbx'
} else if (tab.name == 'rmsbx') {
this.bxactiveName = 'rmsbx'
}
// console.log(tab, event);
},
//返回触发事件
backbxlb() {
this.view = true
this.view2 = false
this.vh = window.sessionStorage.getItem('appheight') - 165 + 'px'
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val
this.boxi = val
this.onSubmit()
},
//查询
onSubmit() {
this.isLoading = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
getPwRmpEventDetail(this.form).then(res => {
// console.log("暂态事件分布明细:", res);
this.PlatformData = res.data.records
this.total = res.data.total
this.isLoading = false
})
},
// // 表格多选
// handleSelectionChange(val) {
// this.multipleSelection = val;
// },
selectAllChangeEvent1(row) {
this.multipleSelection = row.records
// console.log(this.multipleSelection);
},
selectChangeEvent1(row) {
this.multipleSelection1 = row.records
// console.log(this.multipleSelection1);
},
//波形查看触发按钮
async queryBxView(e) {
this.view = false
this.view2 = true
this.boxoList = e
let from = {
lineId: this.boxoList.eventId,
systemType: 1,
type: 1
}
await getTransientAnalyseWaves(from).then(res => {
// console.log(res);
this.wp = res.data
setTimeout(() => {
this.view = false
this.view2 = true
this.vh = window.sessionStorage.getItem('appheight') - 80 + 'px'
}, 0)
// this.initWaves()
})
//调取波形图
this.$nextTick(() => {})
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
},
cellStyle(row) {
// console.log(row,'================');
// if(row.row.monitoringPoint=='Ⅱ类监测点' || row.row.monitoringPoint=='Ⅲ类监测点'){
// row.row.substation = '/'
// }
// if(row.row.monitoringPoint=='Ⅰ类监测点' || row.row.monitoringPoint=='Ⅲ类监测点'){
// row.row.platform = '/'
// }
// if(row.row.monitoringPoint=='Ⅱ类监测点' || row.row.monitoringPoint=='Ⅱ类监测点'){
// row.row.username = '/'
// }
// if(row.columnIndex==11){
// row.row.duration=row.row.duration/1000
// }
this.Voltagelevel.forEach(item => {
if (item.value == row.row.monitorVoltageLevel) {
row.row.monitorVoltageLevel = item.label
} else {
row.row.monitorVoltageLevel = ''
}
})
this.Sagindex.forEach(item => {
if (item.value == row.row.eventType) {
row.row.eventType = item.label
}
})
},
//导出
exportEvent() {
this.$refs.EventDetails.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,65 @@
<template>
<div>
<el-row>
<el-col>
<el-tabs v-model="activeName" @tab-click="handleClick">
<!-- 区域暂态事件统计 -->
<el-tab-pane label="ITIC曲线" name="first">
<ITIC v-if="activeName == 'first'"></ITIC>
</el-tab-pane>
<!-- 区域暂态指标分类统计表 -->
<el-tab-pane label="SEMI F47曲线" name="second">
<SEMIF47 v-if="activeName == 'second'"></SEMIF47>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
import ITIC from './curve/ITIC.vue'
import SEMIF47 from './curve/SEMIF47.vue'
// import ClassifiedStatistics from "./Indicatorstatistics/ClassifiedStatistics.vue"
export default {
components: { ITIC, SEMIF47 },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
activeName: 'first' //区分是那个节点
}
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 143 + 'px'
},
handleClick(tab, event) {
// if (tab.label == "暂态事件分布统计") {
// this.echarts();
// this.echarts2();
// this.echarts4();
// this.iticData();
// this.semif();
// this.echarts3();
// }
// this.onSubmit();
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
</style>

View File

@@ -0,0 +1,286 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item label="监测点类别:">
<el-select v-model="form.monitorSort" clearable multiple collapse-tags placeholder="请选择监测点类别">
<el-option v-for="item in typeList" :key="item.id" :label="item.name" :value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</el-button>
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="vh"
stripe
size="mini"
border
:row-config="{ isCurrent: true, isHover: true }"
ref="Eventstatistics"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
:cell-style="cellStyle"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
></vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</div>
</template>
<script>
import { getPwRStatOrg } from '@/api/Distributionnetwork/transient/transient'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
import { dicData } from '@/assets/commjs/dictypeData'
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
item: ['', ''],
form: {
monitorSort: [], //监测点类别
endTime: '',
startTime: '',
id: '',
type: ''
},
//监测点类别数据
typeList: [],
VoltageList: [], //电压等级数据
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: 'orgName', label: '单位', width: 180 },
{ prop: 'monitorSort', label: '监测点类别', width: 120 },
{
label: '有效接入监测点数',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'effectiveMeasurementAverage',
label: '日均',
width: 100
},
{
prop: 'effectiveMeasurementAccrued',
label: '累计',
width: 100
}
]
},
{
label: '监测到暂态事件监测点数',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'eventMeasurementAverage',
label: '日均',
width: 100
},
{
prop: 'eventMeasurementAccrued',
label: '累计',
width: 100
}
]
},
{
label: '监测到暂态事件监测点占比(%)',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'eventMeasurementRatioAverage',
label: '日均',
width: 110
},
{
prop: 'eventMeasurementRatioAccrued',
label: '累计',
width: 110
}
]
},
{ prop: 'eventCount', label: '暂态发生次数', width: 120 },
{ prop: 'eventFreq', label: '暂态发生频次', width: 120 }
],
totalData: [],
device: '',
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
]
}
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
this.getclassificationData()
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 215
},
//获取类型
getclassificationData() {
var code = 'Line_Sort'
this.typeList = dicData(code, [])
this.typeList.forEach(item => {
this.form.monitorSort.push(item.id)
})
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val
this.onSubmit()
},
// transient() {},
// 表格查询
onSubmit() {
this.isLoading1 = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
//方法调用获取暂态事件统计数据接口
getPwRStatOrg(this.form).then(res => {
if (res.data == [] || res.data == null) {
this.isLoading1 = false
this.totalData = res.data
this.total = 0
} else {
this.isLoading1 = false
this.totalData = res.data
this.total = this.totalData.length
}
})
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
},
cellStyle(row) {
if (row.row.monitorSort == 'Ⅱ类监测点' || row.row.monitorSort == 'Ⅲ类监测点') {
row.row.eventMeasurementRatioAverage = '/'
row.row.eventMeasurementRatioAccrued = '/'
row.row.eventFreq = '/'
}
},
//导出
exportEvent() {
this.$refs.Eventstatistics.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
::v-deep .vxe-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
::v-deep .el-row {
width: 100%;
}
::v-deep .form {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.el-form-item {
display: flex;
width: 48%;
.el-form-item__content {
flex: 1 !important;
.el-select {
width: 100%;
}
.el-input__inner {
width: 100% !important;
}
.el-date-editor {
width: 100%;
}
}
}
}
</style>

View File

@@ -0,0 +1,91 @@
<template>
<div>
<el-row>
<el-col>
<el-tabs v-model="activeName" @tab-click="handleClick">
<!-- 区域暂态事件统计 -->
<el-tab-pane label="区域暂态事件统计" name="first">
<EventStatistics v-if="activeName == 'first'"></EventStatistics>
</el-tab-pane>
<!-- 区域暂态指标分类统计 -->
<el-tab-pane label="区域暂态指标分类统计" name="third">
<ClassifiedStatistics
v-if="activeName == 'third'"
></ClassifiedStatistics>
</el-tab-pane>
<!-- 变电站暂态指标分类统计表 -->
<el-tab-pane
label="变电站暂态指标分类统计表"
name="Substationstatistics"
>
<Substationstatistics
v-if="activeName == 'Substationstatistics'"
></Substationstatistics>
</el-tab-pane>
</el-tabs>
</el-col>
</el-row>
</div>
</template>
<script>
// import { tableheight } from "@/assets/commjs/common";
import EventStatistics from "./EventStatistics.vue";
import ClassifiedStatistics from "./ClassifiedStatistics.vue";
import Substationstatistics from "./Substationstatistics.vue";
export default {
components: { EventStatistics, ClassifiedStatistics, Substationstatistics },
data() {
return {
vh: undefined,
date: "",
input: "",
height: null,
activeName: "first", //区分是那个节点
};
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 143 + "px";
},
handleClick(tab, event) {
// if (tab.label == "暂态事件分布统计") {
// this.echarts();
// this.echarts2();
// this.echarts4();
// this.iticData();
// this.semif();
// this.echarts3();
// }
// this.onSubmit();
},
},
};
</script>
<style lang="less" scoped>
@import url("../../../../styles/comStyle.less");
::v-deep .el-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
::v-deep .el-table.el-table--small td {
height: 40px;
}
::v-deep .el-row {
width: 100%;
}
</style>

View File

@@ -0,0 +1,288 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item label="变电站名称:">
<el-input v-model="form.subName" clearable placeholder="请填写内容"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</el-button>
<!-- <el-button type="primary" icon="el-icon-refresh" @click="Reset">重置</el-button> -->
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="vh"
border
stripe
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="substation"
v-loading="isLoading1"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTotal">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
show-overflow-tooltip
>
<template v-for="(item, index) in item.children">
<vxe-table-colgroup
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
>
<template v-for="(item, index) in item.children">
<vxe-table-column
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
></vxe-table-column>
</template>
</vxe-table-colgroup>
</template>
</vxe-table-colgroup>
</template>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="currentPage"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
</div>
</template>
<script>
import { getPwRStatSubstation } from '@/api/Statistical-analysis/transientIndicators/transientIndicators'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
export default {
components: { Area, Timeinterval },
data() {
return {
vh: undefined,
date: '',
input: '',
height: null,
substationName: '',
item: ['', ''],
form: {
endTime: '',
id: '',
startTime: '',
type: 0,
subName: ''
},
isLoading1: false,
//暂态事件统计
tableHeaderTotal: [
{ prop: 'deptName', label: '单位', width: 180 },
{ prop: 'substationName', label: '变电站名称', width: 180 },
{
label: '有效接入监测点数',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'effectiveMeasurementAverage',
label: '日均',
width: 100
},
{
prop: 'effectiveMeasurementAccrued',
label: '累计',
width: 100
}
]
},
{ prop: 'eventCount', label: '暂态发生次数', width: 120 },
{ prop: 'eventFreq', label: '暂态发生频次', width: 120 },
{
label: '短时中断',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'interruptCount',
label: '次数',
width: 80
},
{
prop: 'interruptFreq',
label: '频次',
width: 80
}
]
},
{
label: '电压暂升',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'swellCount',
label: '次数',
width: 80
},
{
prop: 'swellFreq',
label: '频次',
width: 80
}
]
},
{
label: '电压暂降',
children: [
// { prop: "monthVoltage", label: "谐波电流超标监测点占比(%)" ,width:200},
{
prop: 'sagCount',
label: '次数',
width: 80
},
{
prop: 'sagFreq',
label: '频次',
width: 80
}
]
}
],
totalData: [],
device: '',
currentPage: 1, // 当前页码
total: undefined, // 总条数
pageSize: 20, // 每页的数据条数
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
]
}
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
},
mounted() {
this.item = this.$refs.interval.timeValue
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.device = window.devicePixelRatio
this.vh = window.sessionStorage.getItem('appheight') - 215
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.currentPage = val
this.onSubmit()
},
// transient() {},
// 表格查询
onSubmit() {
this.isLoading1 = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
//方法调用获取暂态事件统计数据接口
getPwRStatSubstation(this.form).then(res => {
if (res.data == []) {
this.total = 0
} else {
this.isLoading1 = false
this.totalData = res.data
this.total = this.totalData.length
}
})
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
},
//重置
Reset() {
this.$refs.area.form.valueTitle = '全国'
this.$refs.interval.intervald = 1
this.form.sunName = ''
},
//导出
exportEvent() {
this.$refs.substation.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData // 数据源 // 过滤那个字段导出 // columnFilterMethod: function(column, $columnIndex) { //   return !(column.$columnIndex === 0 ) //   // 0是复选框 不导出 // }
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
::v-deep .vxe-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 10px;
}
::v-deep .el-row {
width: 100%;
}
::v-deep .form {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
.el-form-item {
display: flex;
width: 48%;
.el-form-item__content {
flex: 1 !important;
.el-select {
width: 100%;
}
.el-input__inner {
width: 100% !important;
}
.el-date-editor {
width: 100%;
}
}
}
}
</style>

View File

@@ -0,0 +1,211 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" @click="queryFn">查询</el-button>
</el-form-item>
</el-form>
<el-row :gutter="24" :style="'height:' + vhh + ';overflow:hidden'">
<el-col :span="8">
<!-- 剩余电压表格 -->
<el-table
stripe
highlight-current-row
:data="voltageData"
:height="height"
border
align="center"
:row-config="{ isCurrent: true, isHover: true }"
v-loading="isLoading"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderVoltage">
<el-table-column
align="center"
:prop="item.prop"
:label="item.label"
:key="index"
:width="item.width"
></el-table-column>
</template>
</el-table>
</el-col>
<!-- echarts图1 -->
<el-col :span="8">
<ITICechartsLeft :form="form" ref="left"></ITICechartsLeft>
</el-col>
<!-- echarts图2 -->
<el-col :span="8">
<ITICechartsRight :form="form" ref="right"></ITICechartsRight>
</el-col>
</el-row>
<el-row :style="'height:' + vhh + ';overflow:hidden'">
<div class="dw">
<el-table
stripe
highlight-current-row
:data="tolerateData"
border
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTolerate">
<el-table-column
align="center"
:prop="item.prop"
:label="item.label"
:key="index"
:width="item.width"
></el-table-column>
</template>
</el-table>
</div>
<ITICecharts @transfer-data="transferData" :form="form" ref="echart"></ITICecharts>
</el-row>
</div>
</template>
<script>
import { getPwEventCategoryDetails } from '@/api/Distributionnetwork/transient/transient'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
import ITICechartsLeft from './components/ITICechartsLeft.vue'
import ITICechartsRight from './components/ITICechartsRight.vue'
import ITICecharts from '../curve/components/ITICecharts.vue'
export default {
components: {
Area,
Timeinterval,
ITICechartsLeft,
ITICechartsRight,
ITICecharts
},
data() {
return {
height: null,
vhh: '',
item: ['', ''],
form: {
endTime: '',
id: '',
startTime: '',
type: ''
},
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
],
//暂态事件分布统计表格数据
tableHeaderVoltage: [
{ prop: 'featureAmplitude', label: '剩余电压(%)', width: 120 },
{ prop: 'duration20', label: '20ms' },
{ prop: 'duration100', label: '100ms' },
{ prop: 'duration500', label: '500ms' },
{ prop: 'duration1000', label: '1s' },
{ prop: 'duration3000', label: '3s' },
{ prop: 'duration20000', label: '20s' },
{ prop: 'duration60000', label: '60s' },
{ prop: 'duration180000', label: '180s' }
],
voltageData: [],
//可容忍表格数据
tableHeaderTolerate: [
{ prop: 'toleranceName', label: '名称' },
{ prop: 'totalEvents', label: '事件总数' },
{ prop: 'tolerable', label: '可容忍' },
{ prop: 'Intolerable', label: '不可容忍' }
],
tolerateData: [],
isLoading: false,
device: ''
}
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
// this.item=this.$refs.interval.timeValue;
this.form.type = this.$refs.interval.intervald
this.device = window.devicePixelRatio
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let vh = window.sessionStorage.getItem('appheight') - 250
this.vhh = (window.sessionStorage.getItem('appheight') - 180) / 2 + 'px'
this.height = vh / 2 + 'px'
},
// 表格查询
onSubmit() {
this.isLoading = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
// console.log(this.form,'===============================');
getPwEventCategoryDetails(this.form).then(res => {
// console.log(res,'==================');
this.isLoading = false
this.voltageData = res.data
})
// this.$refs.left.echarts()
},
//获取数据
transferData(data, pointIData, pointIunData) {
// console.log(data,pointIData,pointIunData,1111);
let obj = [
{
toleranceName: '事件个数',
totalEvents: data.data.totalNumberOfEvents,
tolerable: pointIData.length,
Intolerable: pointIunData.length
}
]
this.tolerateData = obj
},
//查询
queryFn() {
this.onSubmit()
this.$refs.left.echarts()
this.$refs.right.echarts()
this.$refs.echart.iticData()
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
.dw {
position: absolute;
right: 50px;
width: 500px;
z-index: 2;
top: -10px;
}
::v-deep .el-col .el-col-8 {
padding-right: 0 !important;
padding-left: 0 !important;
}
</style>

View File

@@ -0,0 +1,205 @@
<template>
<div>
<el-form :inline="true" :model="form" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick"></Area>
</el-form-item>
<el-form-item>
<Timeinterval :interval="3" ref="interval" :timeOptions="timeOptions"></Timeinterval>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" icon="el-icon-search" @click="queryFn">查询</el-button>
</el-form-item>
</el-form>
<el-row :gutter="24" :style="'height:' + vhh + ';overflow:hidden'">
<el-col :span="8">
<!-- 剩余电压表格 -->
<el-table
stripe
highlight-current-row
:data="voltageData"
:height="height"
border
align="center"
:row-config="{ isCurrent: true, isHover: true }"
v-loading="isLoading"
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderVoltage">
<el-table-column
align="center"
:prop="item.prop"
:label="item.label"
:key="index"
:min-width="item.width"
></el-table-column>
</template>
</el-table>
</el-col>
<!-- echarts图1 -->
<el-col :span="8">
<SEMIF47echartsLeft :form="form" ref="left"></SEMIF47echartsLeft>
</el-col>
<!-- echarts图2 -->
<el-col :span="8">
<SEMIF47echartsRight :form="form" ref="right"></SEMIF47echartsRight>
</el-col>
</el-row>
<el-row :style="'height:' + vhh + ';overflow:hidden'">
<div class="dw">
<el-table
stripe
:data="tolerateData"
border
highlight-current-row
style="width: 100%"
header-cell-class-name="table_header"
>
<template v-for="(item, index) in tableHeaderTolerate">
<el-table-column
align="center"
:prop="item.prop"
:label="item.label"
:key="index"
:min-width="item.width"
></el-table-column>
</template>
</el-table>
</div>
<SEMIF47echarts @transfer-data="transferData" :form="form" ref="echart"></SEMIF47echarts>
</el-row>
</div>
</template>
<script>
import { getPwEventCategoryDetails } from '@/api/Distributionnetwork/transient/transient'
import Timeinterval from '@/views/components/Timeinterval.vue'
import Area from '@/views/components/Area/Area.vue'
import SEMIF47echartsLeft from './components/SEMIF47echartsLeft.vue'
import SEMIF47echartsRight from '../curve/components/SEMIF47echartsRight.vue'
import SEMIF47echarts from '../curve/components/SEMIF47echarts.vue'
export default {
components: {
Area,
Timeinterval,
SEMIF47echartsLeft,
SEMIF47echartsRight,
SEMIF47echarts
},
data() {
return {
height: null,
item: ['', ''],
vhh: '',
form: {
endTime: '',
id: '',
startTime: '',
type: ''
},
timeOptions: [
{ label: '年份', value: 1 },
{ label: '季度', value: 2 },
{ label: '月份', value: 3 }
],
//暂态事件分布统计表格数据
tableHeaderVoltage: [
{ prop: 'featureAmplitude', label: '剩余电压(%)', width: 120 },
{ prop: 'duration20', label: '20ms' },
{ prop: 'duration100', label: '100ms' },
{ prop: 'duration500', label: '500ms' },
{ prop: 'duration1000', label: '1s' },
{ prop: 'duration3000', label: '3s' },
{ prop: 'duration20000', label: '20s' },
{ prop: 'duration60000', label: '60s' },
{ prop: 'duration180000', label: '180s' }
],
voltageData: [],
//可容忍表格数据
tableHeaderTolerate: [
{ prop: 'toleranceName', label: '名称' },
{ prop: 'totalEvents', label: '事件总数' },
{ prop: 'tolerable', label: '可容忍' },
{ prop: 'Intolerable', label: '不可容忍' }
],
tolerateData: [],
isLoading: false,
device: ''
}
},
created() {
this.form.id = JSON.parse(window.sessionStorage.getItem('Info')).deptId
},
mounted() {
// this.item=this.$refs.interval.timeValue;
this.form.type = this.$refs.interval.intervald
this.device = window.devicePixelRatio
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.onSubmit()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let vh = window.sessionStorage.getItem('appheight') - 250
this.vhh = (window.sessionStorage.getItem('appheight') - 180) / 2 + 'px'
this.height = vh / 2 + 'px'
},
// 表格查询
onSubmit() {
this.isLoading = true
this.form.type = this.$refs.interval.intervald
this.item = this.$refs.interval.timeValue
this.form.startTime = this.item[0]
this.form.endTime = this.item[1]
// console.log(this.form,'===============================');
getPwEventCategoryDetails(this.form).then(res => {
// console.log(res,'==================');
this.isLoading = false
this.voltageData = res.data
})
},
//获取数据
transferData(data, pointIData, pointIunData) {
let obj = [
{
toleranceName: '事件个数',
totalEvents: data.data.totalNumberOfEvents,
tolerable: pointIData.length,
Intolerable: pointIunData.length
}
]
this.tolerateData = obj
},
//查询
queryFn() {
this.onSubmit()
this.$refs.left.echarts()
this.$refs.right.echarts()
this.$refs.echart.semif()
},
// 切换选项
handleNodeClick(data) {
// console.log(data);
this.form.id = data.id
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../../styles/comStyle.less');
.dw {
position: absolute;
right: 50px;
width: 500px;
z-index: 2;
top: -10px;
}
</style>

View File

@@ -0,0 +1,469 @@
<template>
<div
id="itic"
style="width: 100%; height: 100%;"
ref="fg13"
v-loading="isLoading"
></div>
</template>
<script>
import { getPwEventFeatureAmplitudeCurve } from "@/api/Distributionnetwork/transient/transient";
export default {
props:{
form:{
type:Object,
default:undefined
},
},
data() {
return {
device: null,
zoom: '', //图表焦点校验
h: null,
isLoading: false,
//ITIC模拟数据
datalist: [
],
pointI: [],
pointIun: [],
pointF: [],
pointFun: [],
white: "#ffffff",
top: [
[0.001, 200],
[0.003, 140],
[0.003, 120],
[0.5, 120],
[0.5, 110],
[10, 110],
[1000, 110],
],
bot: [
[0.02, 0],
[0.02, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[10, 90],
[1000, 90],
],
part: [
[0.05, 0],
[0.05, 50],
[0.2, 50],
[0.2, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[1000, 80],
],
};
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.iticData();
});
// console.log(this.time[0],'1234567');
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let domID1 = document.getElementById("itic");
setTimeout(()=>{
domID1.style.width = window.sessionStorage.getItem('appwidth') - 40 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')- 180)/2 + 'px'
},0)
},
//公共的方法
gongfunction() {
var standI = 0;
var unstandI = 0;
var standF = 0;
var unstandF = 0;
this.pointI = [];
this.pointIun = [];
this.pointF = [];
this.pointFun = [];
var total = 0;
// console.log(this.datalist);
total = this.datalist.length;
if (total == 0) {
} else {
for (var i = 0; i < this.datalist.length; i++) {
var point = [];
var xx = this.datalist[i].duration / 1000;
var yy = this.datalist[i].featureAmplitude;
var time = this.datalist[i].startTime.replace("T", " ");
// var company = this.datalist[i].gdName;
// var substation = this.datalist[i].subName;
// var index = this.datalist[i].lineId;
point = [xx, yy, time];
if (xx <= 0.003) {
var line = 0;
line = 230 - 30000 * xx;
if (yy > line) {
unstandI++;
this.pointIun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
} else {
standI++;
this.pointI.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
}
} else if (xx <= 0.02) {
if (yy > 120) {
unstandI++;
this.pointIun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
} else {
standI++;
this.pointI.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
}
} else if (xx <= 0.5) {
if (yy > 120 || yy < 70) {
unstandI++;
this.pointIun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
} else {
standI++;
this.pointI.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
}
} else if (xx <= 10) {
if (yy > 110 || yy < 80) {
unstandI++;
this.pointIun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
} else {
standI++;
this.pointI.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
}
} else {
if (yy > 110 || yy < 90) {
unstandI++;
this.pointIun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
} else {
standI++;
this.pointI.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
}
}
if (xx < 0.05) {
standF++;
this.pointF.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
} else if (xx < 0.2) {
if (yy > 50) {
standF++;
this.pointF.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
} else {
unstandF++;
this.pointFun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
}
} else if (xx < 0.5) {
if (yy > 70) {
standF++;
this.pointF.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
} else {
unstandF++;
this.pointFun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
}
} else {
if (yy > 80) {
standF++;
this.pointF.push({
value: point,
itemStyle: { normal: { color: "green" } },
});
} else {
unstandF++;
this.pointFun.push({
value: point,
itemStyle: { normal: { color: "red" } },
});
}
}
}
}
},
//itic曲线图
async iticData() {
this.isLoading= true;
const data = await getPwEventFeatureAmplitudeCurve(this.form)
// console.log(data);
this.datalist = data.data.eventFeatureAmplitudeCurveDataList;
this.gongfunction();
let white = "#000";
const echarts = require("echarts");
let domID1 = document.getElementById("itic");
setTimeout(()=>{
domID1.style.width = window.sessionStorage.getItem('appwidth') - 40 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')- 180)/2 + 'px'
},0)
let myChartes = echarts.init(domID1);
let echartsColor = JSON.parse(window.localStorage.echartsColor);
this.isLoading = false;
let option = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: "ITIC曲线",
x: "center",
textStyle: {
fontSize: 16,
color: echartsColor.WordColor,
},
},
grid: {
top: "25%",
left: "2%",
right: "2%",
bottom: "0%",
containLabel: true,
},
toolbox: {
show: true,
feature: {
saveAsImage: { show: true },
},
},
tooltip: {
trigger: "item",
show: true,
formatter: function (a) {
// console.log(a);
let relVal = "";
// relVal =
// "<font style='color:" +
// white +
// "'>供电公司:" +
// "&nbsp" +
// "&nbsp" +
// a.value[3] +
// "</font><br/>";
// relVal +=
// "<font style='color:" +
// white +
// "'>变电站:" +
// "&nbsp" +
// "&nbsp" +
// a.value[4] +
// "</font><br/>";
relVal +=
"<font style='color:" +
white +
"'>发生时刻:" +
"&nbsp" +
"&nbsp" +
a.value[2] +
"</font><br/>";
relVal +=
"<font style='color:" +
white +
"'>持续时间:" +
"&nbsp" +
"&nbsp" +
(a.value[0]).toFixed(3) +
"s</font><br/>";
relVal +=
"<font style='color:" +
white +
"'>特征幅值:" +
"&nbsp" +
"&nbsp" +
a.value[1] +
"%</font>";
return relVal;
},
axisPointer: {
type: "cross",
label: {
color: "#fff",
fontSize: 16,
},
},
textStyle: {
color: "#fff",
fontStyle: "normal",
opacity: 0.35,
fontSize: 14,
},
// backgroundColor: "rgba(0,0,0,0.35)",
borderWidth: 0
},
legend: {
data: ["上限", "下限", "可容忍事件", "不可容忍事件"],
x: "1%",
textStyle: {
color: echartsColor.WordColor,
rich: {
a: {
verticalAlign: "middle",
},
},
padding: [2, 0, 0, 0], //[上、右、下、左]
},
},
color: ["#FF8C00", "#00BFFF", "green", "red"],
xAxis: [
{
type: "log",
min: "0.001",
max: "1000",
splitLine: {
show: false,
},
name: "s",
nameTextStyle: {
padding: 5,
color:echartsColor.WordColor
},
axisLine: {
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
},
],
yAxis: [
{
type: "value",
splitNumber: 10,
minInterval: 3,
name: "%",
nameTextStyle: {
color: echartsColor.WordColor,
padding: 0,
},
minInterval: 1,
type: "value",
axisLine: {
show: true,
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: [echartsColor.thread],
type: "dashed",
opacity: 0.5,
},
},
},
],
series: [
{
name: "上限",
type: "line",
data: this.top,
showSymbol: false,
tooltips: {
show: false,
},
},
{
name: "下限",
type: "line",
data: this.bot,
showSymbol: false,
tooltips: {
show: false,
},
},
{
name: "可容忍事件",
type: "scatter",
symbol: "circle",
data: this.pointI,
},
{
name: "不可容忍事件",
type: "scatter",
symbol: "circle",
data: this.pointIun,
},
],
};
let pointIData=this.pointI
let pointIunData=this.pointIun
this.$emit('transfer-data', data,pointIData,pointIunData)
myChartes.setOption(option)
window.echartsArr.push(myChartes);
setTimeout(() => {
myChartes.resize();
}, 100);
let _this = this;
_this.$erd.listenTo(_this.$refs.fg13, (element) => {
_this.$nextTick(() => {
myChartes.resize();
});
});
window.onresize = function () {
myChartes.resize();
};
},
},
};
</script>
<style lang="less" scoped></style>

View File

@@ -0,0 +1,192 @@
<template>
<div
id="left"
style="width: 100%;"
ref="fg11"
v-loading="Loading"
></div>
</template>
<script>
import { getPwDurationLineChart } from "@/api/Distributionnetwork/transient/transient";
export default {
props:{
form:{
type:Object,
default:undefined
},
},
data() {
return {
device: null,
zoom: '', //图表焦点校验
h: null,
Loading: false,
dataListX:[],
dataListY:[],
};
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.echarts();
});
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let domID1 = document.getElementById("left");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 50)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')-185)/2 + 'px'
},0)
},
async echarts() {
this.Loading= true;
this.dataListX=[]
this.dataListY=[]
const data = await getPwDurationLineChart(this.form)
data.data.forEach(item => {
this.dataListX.push(item.name)
this.dataListY.push(item.value)
});
this.Loading= false;
let echarts = require("echarts");
let domID1 = document.getElementById("left");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 50)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')-185)/2 + 'px'
},0)
let myChart = echarts.init(domID1);
let echartsColor = JSON.parse(window.localStorage.echartsColor);
myChart.clear()
let option = {
title: {
text: "持续时间的概率分布函数 ",
left: "center",
top: 0,
textStyle: {
fontSize: 12,
color: echartsColor.WordColor,
},
},
grid: {
top: "10%",
left: "10%",
bottom: "14%",
right: "3%",
},
xAxis: {
type: "category",
data: this.dataListX,
name: "暂降持续时间(s)",
nameLocation: "middle",
boundaryGap: false,
nameTextStyle: {
padding: 5,
color:echartsColor.WordColor,
},
axisLine: {
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
},
yAxis: {
// type: "value",
name: "概率分布",
nameGap: '20',
nameTextStyle: {
color: echartsColor.WordColor,
padding: 0,
},
minInterval: 1,
type: "value",
axisLine: {
show: true,
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: [echartsColor.thread],
type: "dashed",
opacity: 0.5,
},
},
},
tooltip: {
trigger: "axis",
axisPointer: {
type: "cross",
label: {
color: "#fff",
fontSize: 16,
},
},
textStyle: {
color: "#fff",
fontStyle: "normal",
opacity: 0.35,
fontSize: 14,
},
backgroundColor: "rgba(0,0,0,0.35)",
borderWidth: 0
},
series: [
{
data: this.dataListY,
type: "line",
itemStyle: {
normal: { show: true, color: echartsColor.FigureColor[0] },
},
label: {
show: true,
position: "top",
textStyle: {
//数值样式
color: echartsColor.WordColor,
},
fontSize: 12,
},
},
],
};
myChart.setOption(option)
window.echartsArr.push(myChart);
// myChart.resize();
let _this = this;
_this.$erd.listenTo(_this.$refs.fg11, (element) => {
_this.$nextTick(() => {
myChart.resize();
});
});
window.onresize = function () {
myChart.resize();
};
},
},
};
</script>
<style lang="less" scoped></style>

View File

@@ -0,0 +1,191 @@
<template>
<div
id="right"
style="width: 100%; height: 100%;"
ref="fg12"
v-loading="isLoading"
></div>
</template>
<script>
import { getPwFeatureAmplitudeLineChart } from "@/api/Distributionnetwork/transient/transient";
export default {
props:{
form:{
type:Object,
default:undefined
},
},
data() {
return {
device: null,
zoom: '', //图表焦点校验
h: null,
isLoading: false,
dataListX:[],
dataListY:[],
};
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.echarts();
});
// console.log(this.time[0],'1234567');
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let domID1 = document.getElementById("right");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 80)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')-185)/2 + 'px'
},0)
},
async echarts() {
this.isLoading = true;
this.dataListX=[]
this.dataListY=[]
const data = await getPwFeatureAmplitudeLineChart(this.form)
if(data.data==null){
this.isLoading = false;
}else{
data.data.forEach(item => {
this.dataListX.push(item.name)
this.dataListY.push(item.value)
});
this.isLoading = false;
}
let echarts = require("echarts");
let domID1 = document.getElementById("right");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 80)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')-185)/2 + 'px'
},0)
let myChart = echarts.init(domID1);
let echartsColor = JSON.parse(window.localStorage.echartsColor);
let option = {
//backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: "暂降幅值的概率分布函数 ",
left: "center",
top: 0,
textStyle: {
fontSize: 12,
color: echartsColor.WordColor,
},
},
grid: {
top: "10%",
left: "10%",
bottom: "14%",
right: "4%",
},
xAxis: {
type: "category",
data: this.dataListX,
name: "暂降幅值",
nameLocation: "middle",
boundaryGap: false,
nameTextStyle: {
padding: 5,
color:echartsColor.WordColor
},
axisLine: {
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
},
tooltip: { trigger: "axis",
axisPointer: {
type: "cross",
label: {
color: "#fff",
fontSize: 16,
},
},
textStyle: {
color: "#fff",
fontStyle: "normal",
opacity: 0.35,
fontSize: 14,
},
backgroundColor: "rgba(0,0,0,0.35)",
borderWidth: 0},
yAxis: {
name: "概率分布",
nameGap: '20',
nameTextStyle: {
color: echartsColor.WordColor,
padding: 0,
},
minInterval: 1,
type: "value",
axisLine: {
show: true,
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: [echartsColor.thread],
type: "dashed",
opacity: 0.5,
},
},
},
series: [
{
data: this.dataListY,
type: "line",
itemStyle: {
normal: { show: true, color: echartsColor.FigureColor[0] },
},
label: {
show: true,
position: "top",
textStyle: {
//数值样式
color: echartsColor.WordColor,
},
fontSize: 12,
},
},
],
};
myChart.setOption(option)
window.echartsArr.push(myChart);
// myChart.resize();
let _this = this;
_this.$erd.listenTo(_this.$refs.fg12, (element) => {
_this.$nextTick(() => {
myChart.resize();
});
});
window.onresize = function () {
myChart.resize();
};
},
},
};
</script>
<style lang="less" scoped>
</style>

View File

@@ -0,0 +1,457 @@
<template>
<div id="semif" style="width: 100%; height: 100%" ref="fg20" v-loading="isLoading"></div>
</template>
<script>
import { getPwEventFeatureAmplitudeCurve } from '@/api/Distributionnetwork/transient/transient'
export default {
props: {
form: {
type: Object,
default: undefined
}
},
data() {
return {
device: null,
zoom: undefined, //图表焦点校验
h: null,
isLoading: false,
//ITIC模拟数据
datalist: [],
pointI: [],
pointIun: [],
pointF: [],
pointFun: [],
white: '#ffffff',
top: [
[0.001, 200],
[0.003, 140],
[0.003, 120],
[0.5, 120],
[0.5, 110],
[10, 110],
[1000, 110]
],
bot: [
[0.02, 0],
[0.02, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[10, 90],
[1000, 90]
],
part: [
[0.05, 0],
[0.05, 50],
[0.2, 50],
[0.2, 70],
[0.5, 70],
[0.5, 80],
[10, 80],
[1000, 80]
]
}
},
created() {},
mounted() {
this.zoom = window.devicePixelRatio
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.semif()
})
// console.log(this.time[0],'1234567');
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
if (this.zoom == 1) {
let heightd = window.sessionStorage.getItem('appheight') - 125
this.h = heightd / 2 + 'px'
}
if (this.zoom == 1.25) {
let heightd = window.sessionStorage.getItem('appheight') - 320
this.h = heightd / 2 + 'px'
}
let domID1 = document.getElementById('semif')
setTimeout(() => {
domID1.style.width = window.sessionStorage.getItem('appwidth') - 40 + 'px'
domID1.style.height = (window.sessionStorage.getItem('appheight') - 180) / 2 + 'px'
}, 0)
},
//公共的方法
gongfunction() {
var standI = 0
var unstandI = 0
var standF = 0
var unstandF = 0
this.pointI = []
this.pointIun = []
this.pointF = []
this.pointFun = []
var total = 0
// console.log(this.datalist);
total = this.datalist.length
if (total == 0) {
} else {
for (var i = 0; i < this.datalist.length; i++) {
var point = []
var xx = this.datalist[i].duration / 1000
var yy = this.datalist[i].featureAmplitude
var time = this.datalist[i].startTime.replace('T', ' ')
// var company = this.datalist[i].gdName;
// var substation = this.datalist[i].subName;
// var index = this.datalist[i].lineId;
point = [xx, yy, time]
if (xx <= 0.003) {
var line = 0
line = 230 - 30000 * xx
if (yy > line) {
unstandI++
this.pointIun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
} else {
standI++
this.pointI.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
}
} else if (xx <= 0.02) {
if (yy > 120) {
unstandI++
this.pointIun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
} else {
standI++
this.pointI.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
}
} else if (xx <= 0.5) {
if (yy > 120 || yy < 70) {
unstandI++
this.pointIun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
} else {
standI++
this.pointI.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
}
} else if (xx <= 10) {
if (yy > 110 || yy < 80) {
unstandI++
this.pointIun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
} else {
standI++
this.pointI.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
}
} else {
if (yy > 110 || yy < 90) {
unstandI++
this.pointIun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
} else {
standI++
this.pointI.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
}
}
if (xx < 0.05) {
standF++
this.pointF.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
} else if (xx < 0.2) {
if (yy > 50) {
standF++
this.pointF.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
} else {
unstandF++
this.pointFun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
}
} else if (xx < 0.5) {
if (yy > 70) {
standF++
this.pointF.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
} else {
unstandF++
this.pointFun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
}
} else {
if (yy > 80) {
standF++
this.pointF.push({
value: point,
itemStyle: { normal: { color: 'green' } }
})
} else {
unstandF++
this.pointFun.push({
value: point,
itemStyle: { normal: { color: 'red' } }
})
}
}
}
}
},
//itic曲线图
async semif() {
this.isLoading = true
const data = await getPwEventFeatureAmplitudeCurve(this.form)
// console.log(data);
this.datalist = data.data.eventFeatureAmplitudeCurveDataList
this.gongfunction()
let white = '#000'
const echarts = require('echarts')
let domID1 = document.getElementById('semif')
setTimeout(() => {
domID1.style.width = window.sessionStorage.getItem('appwidth') - 40 + 'px'
domID1.style.height = (window.sessionStorage.getItem('appheight') - 180) / 2 + 'px'
}, 0)
let myChartes = echarts.init(domID1)
this.isLoading = false
let echartsColor = JSON.parse(window.localStorage.echartsColor)
let option = {
//backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: 'F47曲线',
x: 'center',
textStyle: {
fontSize: 16,
color: echartsColor.WordColor
}
},
grid: {
top: '25%',
left: '2%',
right: '2%',
bottom: '0%',
containLabel: true
},
tooltip: {
// trigger: "item",
show: true,
formatter: function (a) {
// console.log(a);
let relVal = ''
// relVal =
// "<font style='color:" +
// white +
// "'>供电公司:" +
// "&nbsp" +
// "&nbsp" +
// a.value[3] +
// "</font><br/>";
// relVal +=
// "<font style='color:" +
// white +
// "'>变电站:" +
// "&nbsp" +
// "&nbsp" +
// a.value[4] +
// "</font><br/>";
relVal +=
"<font style='color:" +
white +
"'>发生时刻:" +
'&nbsp' +
'&nbsp' +
a.value[2] +
'</font><br/>'
relVal +=
"<font style='color:" +
white +
"'>持续时间:" +
'&nbsp' +
'&nbsp' +
a.value[0].toFixed(3) +
's</font><br/>'
relVal +=
"<font style='color:" + white + "'>特征幅值:" + '&nbsp' + '&nbsp' + a.value[1] + '%</font>'
return relVal
},
axisPointer: {
type: 'cross',
label: {
color: '#fff',
fontSize: 16
}
},
textStyle: {
color: '#fff',
fontStyle: 'normal',
opacity: 0.35,
fontSize: 14
},
// backgroundColor: "rgba(0,0,0,0.35)",
borderWidth: 0
},
toolbox: {
show: true,
feature: {
saveAsImage: { show: true }
}
},
legend: {
data: ['分割线', '可容忍事件', '不可容忍事件'],
// selectedMode: false,
left: '1%',
textStyle: {
color: echartsColor.WordColor,
rich: {
a: {
verticalAlign: 'middle'
}
},
padding: [2, 0, 0, 0] //[上、右、下、左]
}
},
color: ['yellow', 'green', 'red'],
xAxis: [
{
type: 'log',
min: '0.001',
max: '1000',
splitLine: {
show: false
},
name: 's',
nameTextStyle: {
padding: 5,
color: echartsColor.WordColor
},
axisLine: {
lineStyle: {
color: echartsColor.thread
}
},
axisLabel: {
color: echartsColor.WordColor
}
}
],
yAxis: [
{
type: 'value',
// max: function (value) {
// return value.max + 20;
// },
splitNumber: 10,
minInterval: 0.1,
name: '%',
nameTextStyle: {
color: echartsColor.WordColor,
padding: 0
},
type: 'value',
axisLine: {
show: true,
lineStyle: {
color: echartsColor.thread
}
},
axisLabel: {
color: echartsColor.WordColor
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: [echartsColor.thread],
type: 'dashed',
opacity: 0.5
}
}
}
],
series: [
{
name: '分割线',
type: 'line',
data: this.part,
showSymbol: false,
tooltips: {
show: false
}
},
{
name: '可容忍事件',
type: 'scatter',
symbol: 'circle',
data: this.pointF
},
{
name: '不可容忍事件',
type: 'scatter',
symbol: 'circle',
data: this.pointFun
}
]
}
let pointFData = this.pointF
let pointFunData = this.pointFun
this.$emit('transfer-data', data, pointFData, pointFunData)
myChartes.setOption(option)
window.echartsArr.push(myChartes)
setTimeout(() => {
myChartes.resize()
}, 100)
let _this = this
_this.$erd.listenTo(_this.$refs.fg20, element => {
_this.$nextTick(() => {
myChartes.resize()
})
})
window.onresize = function () {
myChartes.resize()
}
}
}
}
</script>
<style lang="less" scoped></style>

View File

@@ -0,0 +1,184 @@
<template>
<div
id="left"
style="width: 100%; height: 100%;"
ref="fg21"
v-loading="isLoading1"
></div>
</template>
<script>
import { getPwDurationLineChart } from "@/api/Distributionnetwork/transient/transient";
export default {
props:{
form:{
type:Object,
default:undefined
},
},
data() {
return {
device: null,
zoom: undefined, //图表焦点校验
h: null,
isLoading1: false,
dataListX:[],
dataListY:[],
};
},
created() {},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.echarts();
});
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let domID1 = document.getElementById("left");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 50)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')-185)/2 + 'px'
},0)
},
async echarts() {
this.isLoading1 = true;
this.dataListX=[]
this.dataListY=[]
const data = await getPwDurationLineChart(this.form)
data.data.forEach(item => {
this.dataListX.push(item.name)
this.dataListY.push(item.value)
});
this.isLoading1 = false;
let echarts = require("echarts");
let domID1 = document.getElementById("left");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 50)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight')-185)/2 + 'px'
},0)
let myChart = echarts.init(domID1);
let echartsColor = JSON.parse(window.localStorage.echartsColor);
let option = {
// backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: "持续时间的概率分布函数 ",
left: "center",
top: 0,
textStyle: {
fontSize: 16,
color: echartsColor.WordColor,
},
},
grid: {
top: "10%",
left: "10%",
bottom: "14%",
right: "3%",
},
xAxis: {
type: "category",
data: this.dataListX,
name: "暂降持续时间(s)",
nameLocation: "middle",
nameTextStyle: {
padding: 5,
color:echartsColor.WordColor
},
axisLine: {
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
},
yAxis: {
// type: "value",
name: "概率分布",
nameGap: '20',
nameTextStyle: {
color: echartsColor.WordColor,
padding: 0,
},
minInterval: 1,
type: "value",
axisLine: {
show: true,
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: [echartsColor.thread],
type: "dashed",
opacity: 0.5,
},
},
},
tooltip: { axisPointer: {
type: "cross",
label: {
color: "#fff",
fontSize: 16,
},
},
textStyle: {
color: "#fff",
fontStyle: "normal",
opacity: 0.35,
fontSize: 14,
},
backgroundColor: "rgba(0,0,0,0.35)",
borderWidth: 0},
series: [
{
data: this.dataListY,
type: "line",
itemStyle: {
normal: { show: true, color: echartsColor.FigureColor[0] },
},
label: {
show: true,
position: "top",
textStyle: {
//数值样式
color: echartsColor.WordColor,
},
fontSize: 12,
},
},
],
};
myChart.setOption(option)
window.echartsArr.push(myChart);
// myChart.resize();
let _this = this;
_this.$erd.listenTo(_this.$refs.fg21, (element) => {
_this.$nextTick(() => {
myChart.resize();
});
});
window.onresize = function () {
myChart.resize();
};
},
},
};
</script>
<style lang="less" scoped></style>

View File

@@ -0,0 +1,187 @@
<template>
<div
id="right"
style="width: 100%; height: 100%;"
ref="fg19"
v-loading="isLoading"
></div>
</template>
<script>
import { getPwFeatureAmplitudeLineChart } from "@/api/Distributionnetwork/transient/transient";
export default {
props:{
form:{
type:Object,
default:undefined
},
},
data() {
return {
device: null,
zoom: undefined, //图表焦点校验
h: null,
isLoading: false,
dataListX:[],
dataListY:[],
};
},
created() {},
mounted() {
window.addEventListener('resize', this.setHeight)
this.$nextTick(() => {
this.echarts();
});
// console.log(this.time[0],'1234567');
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
let domID1 = document.getElementById("right");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 50)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight') - 185)/2 + 'px'
},0)
},
async echarts() {
this.isLoading = true;
this.dataListX=[]
this.dataListY=[]
const data = await getPwFeatureAmplitudeLineChart(this.form)
data.data.forEach(item => {
this.dataListX.push(item.name)
this.dataListY.push(item.value)
});
this.isLoading = false;
let echarts = require("echarts");
let domID1 = document.getElementById("right");
setTimeout(()=>{
domID1.style.width = (window.sessionStorage.getItem('appwidth') - 50)/3 +'px'
domID1.style.height = (window.sessionStorage.getItem('appheight') - 185)/2 + 'px'
},0)
let myChart = echarts.init(domID1);
let echartsColor = JSON.parse(window.localStorage.echartsColor);
let option = {
//backgroundColor: "#f9f9f9", //地图背景色深蓝
title: {
text: "暂降幅值的概率分布函数 ",
left: "center",
top: 0,
textStyle: {
fontSize: 16,
color: echartsColor.WordColor,
},
},
grid: {
top: "10%",
left: "10%",
bottom: "14%",
right: "3%",
},
xAxis: {
type: "category",
data: this.dataListX,
name: "暂降幅值",
nameLocation: "middle",
nameTextStyle: {
padding: 5,
color:echartsColor.WordColor
},
axisLine: {
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
},
tooltip: {
axisPointer: {
type: "cross",
label: {
color: "#fff",
fontSize: 16,
},
},
textStyle: {
color: "#fff",
fontStyle: "normal",
opacity: 0.35,
fontSize: 14,
},
backgroundColor: "rgba(0,0,0,0.35)",
borderWidth: 0
},
yAxis: {
name: "概率分布",
nameGap: '20',
nameTextStyle: {
color: echartsColor.WordColor,
padding: 0,
},
minInterval: 1,
type: "value",
axisLine: {
show: true,
lineStyle: {
color: echartsColor.thread,
},
},
axisLabel: {
color: echartsColor.WordColor,
},
splitLine: {
lineStyle: {
// 使用深浅的间隔色
color: [echartsColor.thread],
type: "dashed",
opacity: 0.5,
},
},
},
series: [
{
data: this.dataListY,
type: "line",
itemStyle: {
normal: { show: true, color: echartsColor.FigureColor[0] },
},
label: {
show: true,
position: "top",
textStyle: {
//数值样式
color: echartsColor.WordColor,
},
fontSize: 12,
},
},
],
};
myChart.setOption(option)
window.echartsArr.push(myChart);
// myChart.resize();
let _this = this;
_this.$erd.listenTo(_this.$refs.fg19, (element) => {
_this.$nextTick(() => {
myChart.resize();
});
});
window.onresize = function () {
myChart.resize();
};
},
},
};
</script>
<style lang="less" scoped></style>

View File

@@ -0,0 +1,919 @@
<template>
<div>
<el-row>
<el-form ref="form">
<el-col :span="6">
<el-form-item label-width="80px" label="数据类型">
<el-select style="width: 180px" v-model="valueType" placeholder="请选择">
<el-option
v-for="item in [
{ value: 'MAX', label: '最大值' },
{ value: 'MIN', label: '最小值' },
{ value: 'AVG', label: '平均值' },
{ value: 'CP95', label: 'CP95值' }
]"
:key="item.value"
:label="item.label"
:value="item.value"
></el-option>
</el-select>
<el-button type="primary" size="mini" @click="initData">获取</el-button>
</el-form-item>
</el-col>
<el-col :span="14">
<el-form-item label-width="120px" label="数据刷新时间">
<el-tag>{{ timeId }}</el-tag>
</el-form-item>
</el-col>
<el-col :span="4" style="text-align: right">
<el-button type="primary" size="small" class="flag" icon="el-icon-close" @click="$emit('close')">
返回
</el-button>
</el-col>
</el-form>
</el-row>
<el-tabs v-model="activeName" @tab-click="handleClick">
<el-tab-pane label="基本电能质量数据" name="0">
<el-table
:data="energyQualityData"
border
highlight-current-row
:height="rowvh"
header-cell-class-name="table_header"
stripe
style="width: 100%"
>
<el-table-column prop="name" align="center" label="数据名称"></el-table-column>
<el-table-column prop="A" align="center" label="A/AB/0"></el-table-column>
<el-table-column prop="B" align="center" label="B/BC/+"></el-table-column>
<el-table-column prop="C" align="center" label="C/CA/-"></el-table-column>
<el-table-column prop="D" align="center" label="Total"></el-table-column>
</el-table>
<!-- <div :style="'height:' + rowvh + '; overflow-y:auto'">
<table id="areaTable">
<thead>
<tr>
<th class="table-middle">数据名称</th>
<th class="table-middle">A/AB/0</th>
<th class="table-middle">B/BC/+</th>
<th class="table-middle">C/CA/-</th>
<th class="table-middle">Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>相电压总有效值(V)</td>
<td>{{ data.PhV_phsA }}</td>
<td>{{ data.PhV_phsB }}</td>
<td>{{ data.PhV_phsC }}</td>
<td>-</td>
</tr>
<tr>
<td>电流总有效值(A)</td>
<td>{{ data.A_phsA }}</td>
<td>{{ data.A_phsB }}</td>
<td>{{ data.A_phsC }}</td>
<td>-</td>
</tr>
<tr>
<td>线电压总有效值(V)</td>
<td>{{ data.PPV_phsAB }}</td>
<td>{{ data.PPV_phsBC }}</td>
<td>{{ data.PPV_phsCA }}</td>
<td>-</td>
</tr>
<tr>
<td>相电压偏差(%)</td>
<td>{{ data.PhVDev_phsA }}</td>
<td>{{ data.PhVDev_phsB }}</td>
<td>{{ data.PhVDev_phsC }}</td>
<td>-</td>
</tr>
<tr>
<td>线电压偏差(%)</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>/</td>
</tr>
<tr>
<td>频率(Hz)</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>{{ data.Freq }}</td>
</tr>
<tr>
<td>频率偏差(Hz)</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>{{ data.FreqDev }}</td>
</tr>
<tr>
<td>电压序分量(V)</td>
<td>{{ data.SeqV_C0 }}</td>
<td>{{ data.SeqV_C1 }}</td>
<td>{{ data.SeqV_C2 }}</td>
<td>-</td>
</tr>
<tr>
<td>电流序分量(A)</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>/</td>
</tr>
<tr>
<td>总有功功率(W)</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>{{ data.TotW }}</td>
</tr>
<tr>
<td>总无功功率(Var)</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>{{ data.TotVar }}</td>
</tr>
<tr>
<td>总视在功率(VA)</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>{{ data.TotVA }}</td>
</tr>
<tr>
<td>视在功率因数</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>{{ data.TotPF }}</td>
</tr>
<tr>
<td>位移功率因数</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>/</td>
</tr>
<tr>
<td>电压波动</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>/</td>
</tr>
<tr>
<td>短时闪变</td>
<td>{{ data.PstPhV_phsA }}</td>
<td>{{ data.PstPhV_phsB }}</td>
<td>{{ data.PstPhV_phsC }}</td>
<td>-</td>
</tr>
<tr>
<td>长时闪变</td>
<td>{{ data.PltPhV_phsA }}</td>
<td>{{ data.PltPhV_phsB }}</td>
<td>{{ data.PltPhV_phsC }}</td>
<td>-</td>
</tr>
<tr>
<td>电压谐波畸变率(%)</td>
<td>{{ data.ThdPhV_phsA }}</td>
<td>{{ data.ThdPhV_phsB }}</td>
<td>{{ data.ThdPhV_phsC }}</td>
<td>-</td>
</tr>
<tr>
<td>电流谐波畸变率(%)</td>
<td>/</td>
<td>/</td>
<td>/</td>
<td>-</td>
</tr>
</tbody>
</table>
</div> -->
</el-tab-pane>
<el-tab-pane label="谐波电压含有率" name="1">
<el-table
:data="containmentRate"
border
highlight-current-row
:height="rowvh"
header-cell-class-name="table_header"
stripe
style="width: 100%"
>
<el-table-column prop="name" align="center" label="谐波次数"></el-table-column>
<el-table-column prop="A" align="center" label="A/AB"></el-table-column>
<el-table-column prop="B" align="center" label="B/BC"></el-table-column>
<el-table-column prop="C" align="center" label="C/CA"></el-table-column>
</el-table>
<!-- <div :style="'height:' + rowvh + '; overflow-y:auto'">
<table :style="'height:' + rowvh">
<thead>
<tr>
<th>谐波次数</th>
<th>A/AB</th>
<th>B/BC</th>
<th>C/CA</th>
</tr>
</thead>
<tbody>
<tr>
<td>基波 (%)</td>
<td>100.000</td>
<td>100.000</td>
<td>100.000</td>
</tr>
<tr>
<td>2次 (%)</td>
<td>{{ data.HRPhV_H2_phsA ? data.HRPhV_H2_phsA : '/' }}</td>
<td>{{ data.HRPhV_H2_phsB ? data.HRPhV_H2_phsB : '/' }}</td>
<td>{{ data.HRPhV_H2_phsC ? data.HRPhV_H2_phsC : '/' }}</td>
</tr>
<tr>
<td>3次 (%)</td>
<td>{{ data.HRPhV_H3_phsA ? data.HRPhV_H3_phsA : '/' }}</td>
<td>{{ data.HRPhV_H3_phsB ? data.HRPhV_H3_phsB : '/' }}</td>
<td>{{ data.HRPhV_H3_phsC ? data.HRPhV_H3_phsC : '/' }}</td>
</tr>
<tr>
<td>4次 (%)</td>
<td>{{ data.HRPhV_H4_phsA ? data.HRPhV_H4_phsA : '/' }}</td>
<td>{{ data.HRPhV_H4_phsB ? data.HRPhV_H4_phsB : '/' }}</td>
<td>{{ data.HRPhV_H4_phsC ? data.HRPhV_H4_phsC : '/' }}</td>
</tr>
<tr>
<td>5次 (%)</td>
<td>{{ data.HRPhV_H5_phsA ? data.HRPhV_H5_phsA : '/' }}</td>
<td>{{ data.HRPhV_H5_phsB ? data.HRPhV_H5_phsB : '/' }}</td>
<td>{{ data.HRPhV_H5_phsC ? data.HRPhV_H5_phsC : '/' }}</td>
</tr>
<tr>
<td>6次 (%)</td>
<td>{{ data.HRPhV_H6_phsA ? data.HRPhV_H6_phsA : '/' }}</td>
<td>{{ data.HRPhV_H6_phsB ? data.HRPhV_H6_phsB : '/' }}</td>
<td>{{ data.HRPhV_H6_phsC ? data.HRPhV_H6_phsC : '/' }}</td>
</tr>
<tr>
<td>7次 (%)</td>
<td>{{ data.HRPhV_H7_phsA ? data.HRPhV_H7_phsA : '/' }}</td>
<td>{{ data.HRPhV_H7_phsB ? data.HRPhV_H7_phsB : '/' }}</td>
<td>{{ data.HRPhV_H7_phsC ? data.HRPhV_H7_phsC : '/' }}</td>
</tr>
<tr>
<td>8次 (%)</td>
<td>{{ data.HRPhV_H8_phsA ? data.HRPhV_H8_phsA : '/' }}</td>
<td>{{ data.HRPhV_H8_phsB ? data.HRPhV_H8_phsB : '/' }}</td>
<td>{{ data.HRPhV_H8_phsC ? data.HRPhV_H8_phsC : '/' }}</td>
</tr>
<tr>
<td>9次 (%)</td>
<td>{{ data.HRPhV_H9_phsA ? data.HRPhV_H9_phsA : '/' }}</td>
<td>{{ data.HRPhV_H9_phsB ? data.HRPhV_H9_phsB : '/' }}</td>
<td>{{ data.HRPhV_H9_phsC ? data.HRPhV_H9_phsC : '/' }}</td>
</tr>
<tr>
<td>10次 (%)</td>
<td>{{ data.HRPhV_H10_phsA ? data.HRPhV_H10_phsA : '/' }}</td>
<td>{{ data.HRPhV_H10_phsB ? data.HRPhV_H10_phsB : '/' }}</td>
<td>{{ data.HRPhV_H10_phsC ? data.HRPhV_H10_phsC : '/' }}</td>
</tr>
<tr>
<td>11次 (%)</td>
<td>{{ data.HRPhV_H11_phsA ? data.HRPhV_H11_phsA : '/' }}</td>
<td>{{ data.HRPhV_H11_phsB ? data.HRPhV_H11_phsB : '/' }}</td>
<td>{{ data.HRPhV_H11_phsC ? data.HRPhV_H11_phsC : '/' }}</td>
</tr>
<tr>
<td>12次 (%)</td>
<td>{{ data.HRPhV_H12_phsA ? data.HRPhV_H12_phsA : '/' }}</td>
<td>{{ data.HRPhV_H12_phsB ? data.HRPhV_H12_phsB : '/' }}</td>
<td>{{ data.HRPhV_H12_phsC ? data.HRPhV_H12_phsC : '/' }}</td>
</tr>
<tr>
<td>13次 (%)</td>
<td>{{ data.HRPhV_H13_phsA ? data.HRPhV_H13_phsA : '/' }}</td>
<td>{{ data.HRPhV_H13_phsB ? data.HRPhV_H13_phsB : '/' }}</td>
<td>{{ data.HRPhV_H13_phsC ? data.HRPhV_H13_phsC : '/' }}</td>
</tr>
<tr>
<td>14次 (%)</td>
<td>{{ data.HRPhV_H14_phsA ? data.HRPhV_H14_phsA : '/' }}</td>
<td>{{ data.HRPhV_H14_phsB ? data.HRPhV_H14_phsB : '/' }}</td>
<td>{{ data.HRPhV_H14_phsC ? data.HRPhV_H14_phsC : '/' }}</td>
</tr>
<tr>
<td>15次 (%)</td>
<td>{{ data.HRPhV_H15_phsA ? data.HRPhV_H15_phsA : '/' }}</td>
<td>{{ data.HRPhV_H15_phsB ? data.HRPhV_H15_phsB : '/' }}</td>
<td>{{ data.HRPhV_H15_phsC ? data.HRPhV_H15_phsC : '/' }}</td>
</tr>
<tr>
<td>16次 (%)</td>
<td>{{ data.HRPhV_H16_phsA ? data.HRPhV_H16_phsA : '/' }}</td>
<td>{{ data.HRPhV_H16_phsB ? data.HRPhV_H16_phsB : '/' }}</td>
<td>{{ data.HRPhV_H16_phsC ? data.HRPhV_H16_phsC : '/' }}</td>
</tr>
<tr>
<td>17次 (%)</td>
<td>{{ data.HRPhV_H17_phsA ? data.HRPhV_H17_phsA : '/' }}</td>
<td>{{ data.HRPhV_H17_phsB ? data.HRPhV_H17_phsB : '/' }}</td>
<td>{{ data.HRPhV_H17_phsC ? data.HRPhV_H17_phsC : '/' }}</td>
</tr>
<tr>
<td>18次 (%)</td>
<td>{{ data.HRPhV_H18_phsA ? data.HRPhV_H18_phsA : '/' }}</td>
<td>{{ data.HRPhV_H18_phsB ? data.HRPhV_H18_phsB : '/' }}</td>
<td>{{ data.HRPhV_H18_phsC ? data.HRPhV_H18_phsC : '/' }}</td>
</tr>
<tr>
<td>19次 (%)</td>
<td>{{ data.HRPhV_H19_phsA ? data.HRPhV_H19_phsA : '/' }}</td>
<td>{{ data.HRPhV_H19_phsB ? data.HRPhV_H19_phsB : '/' }}</td>
<td>{{ data.HRPhV_H19_phsC ? data.HRPhV_H19_phsC : '/' }}</td>
</tr>
<tr>
<td>20次 (%)</td>
<td>{{ data.HRPhV_H20_phsA ? data.HRPhV_H20_phsA : '/' }}</td>
<td>{{ data.HRPhV_H20_phsB ? data.HRPhV_H20_phsB : '/' }}</td>
<td>{{ data.HRPhV_H20_phsC ? data.HRPhV_H20_phsC : '/' }}</td>
</tr>
<tr>
<td>21次 (%)</td>
<td>{{ data.HRPhV_H21_phsA ? data.HRPhV_H21_phsA : '/' }}</td>
<td>{{ data.HRPhV_H21_phsB ? data.HRPhV_H21_phsB : '/' }}</td>
<td>{{ data.HRPhV_H21_phsC ? data.HRPhV_H21_phsC : '/' }}</td>
</tr>
<tr>
<td>22次 (%)</td>
<td>{{ data.HRPhV_H22_phsA ? data.HRPhV_H22_phsA : '/' }}</td>
<td>{{ data.HRPhV_H22_phsB ? data.HRPhV_H22_phsB : '/' }}</td>
<td>{{ data.HRPhV_H22_phsC ? data.HRPhV_H22_phsC : '/' }}</td>
</tr>
<tr>
<td>23次 (%)</td>
<td>{{ data.HRPhV_H23_phsA ? data.HRPhV_H23_phsA : '/' }}</td>
<td>{{ data.HRPhV_H23_phsB ? data.HRPhV_H23_phsB : '/' }}</td>
<td>{{ data.HRPhV_H23_phsC ? data.HRPhV_H23_phsC : '/' }}</td>
</tr>
<tr>
<td>24次 (%)</td>
<td>{{ data.HRPhV_H24_phsA ? data.HRPhV_H24_phsA : '/' }}</td>
<td>{{ data.HRPhV_H24_phsB ? data.HRPhV_H24_phsB : '/' }}</td>
<td>{{ data.HRPhV_H24_phsC ? data.HRPhV_H24_phsC : '/' }}</td>
</tr>
<tr>
<td>25次 (%)</td>
<td>{{ data.HRPhV_H25_phsA ? data.HRPhV_H25_phsA : '/' }}</td>
<td>{{ data.HRPhV_H25_phsB ? data.HRPhV_H25_phsB : '/' }}</td>
<td>{{ data.HRPhV_H25_phsC ? data.HRPhV_H25_phsC : '/' }}</td>
</tr>
</tbody>
</table>
</div> -->
</el-tab-pane>
<el-tab-pane label="谐波频谱" name="2">
<div style="width: 100%">
<div id="pinPuChar" :style="'height:' + rowvh + ';width:' + rowvw + ';'"></div>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import {
getMonitorOverLimit,
getPmsInfo
} from '@/api/Distributionnetwork-analysis/IndicatorClassification/IndicatorClassification.js'
export default {
name: 'RealDataPms',
props: {
reportID: {
type: String,
required: true
}
},
data() {
return {
data: {},
activeName: 0,
rowvh: '',
rowvw: '',
timeId: '',
energyQualityData: [],
containmentRate: [],
vEchar: null,
serviseV: [],
message: {},
valueType: 'AVG',
overLimitData:[]
}
},
created() {
this.rowvw = window.sessionStorage.getItem('appwidth') - 100 + 'px'
this.setHeight()
this.initData()
},
mounted() {
window.addEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.rowvh = window.sessionStorage.getItem('appheight') - 100 + 'px'
},
handleClick(tab, event) {
console.log(tab, event)
if (tab.name == 2) {
this.initVEchart()
}
},
thStyleFun() {
return 'text-align:center'
},
cellStyleFun() {
return 'text-align:center'
},
initVEchart() {
var pinPuX = []
for (let i = 2; i < 26; i++) {
pinPuX.push(i + '次')
}
this.serviseV = []
for (let i = 2; i < 26; i++) {
let temValV =
(Number(this.data['HRPhV_H' + i + '_phsA']) +
Number(this.data['HRPhV_H' + i + '_phsB']) +
Number(this.data['HRPhV_H' + i + '_phsC'])) /
3
this.serviseV.push(temValV.toFixed(3))
}
const echarts = require('echarts')
// 基于准备好的dom初始化echarts实例
this.vEchar = echarts.init(document.getElementById('pinPuChar'))
this.vEchar.clear()
// 指定图表的配置项和数据
let option = {
title: {
left: 'center',
text: '2~25次谐波电压含有率',
textStyle: {
color: 'black'
}
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#283b56'
}
}
},
legend: {
left: '80px',
verticalAlign: 'top',
enabled: true,
itemDistance: 5,
textStyle: {
rich: {
a: {
verticalAlign: 'middle'
}
},
padding: [0, 0, 0, 0] //[上、右、下、左]
}
},
xAxis: {
name: '次数',
data: pinPuX,
boundaryGap: true,
axisLine: {
show: true,
onZero: false,
lineStyle: {
color: '#000000'
}
},
axisLabel: {
textStyle: {
fontFamily: 'dinproRegular',
color: '#000000'
}
}
},
yAxis: {
name: '%',
boundaryGap: true,
axisLine: {
show: true,
onZero: false,
lineStyle: {
color: '#000000'
}
},
axisLabel: {
textStyle: {
fontFamily: 'dinproRegular',
color: '#000000'
}
}
},
series: [
{
name: '谐波电压含有率',
type: 'bar',
data: this.serviseV,
color: '#339966'
},
{
color: '#FF9900',
name: '限值',
type: 'bar',
data: this.overLimitData
}
]
}
// 使用刚指定的配置项和数据显示图表。
this.vEchar.setOption(option)
this.vEchar.resize()
},
initData() {
let params = {
valueType: this.valueType,
monitorId: this.reportID
}
getPmsInfo(params).then(res => {
let obj = res.data
this.data = JSON.parse(obj.pmsContent)
this.timeId = obj.timeId
this.energyQualityData = [
{
name: '相电压总有效值',
A: this.data.PhV_phsA,
B: this.data.PhV_phsB,
C: this.data.PhV_phsC,
D: '-'
},
{
name: '电流总有效值(A)',
A: this.data.A_phsA,
B: this.data.A_phsB,
C: this.data.A_phsC,
D: '-'
},
{
name: '线电压总有效值(V)',
A: this.data.PPV_phsAB,
B: this.data.PPV_phsBC,
C: this.data.PPV_phsCA,
D: '-'
},
{
name: '相电压偏差(%)',
A: this.data.PhVDev_phsA,
B: this.data.PhVDev_phsB,
C: this.data.PhVDev_phsC,
D: '-'
},
{
name: '线电压偏差(%)',
A: '/',
B: '/',
C: '/',
D: '/'
},
{
name: '频率(Hz)',
A: '-',
B: '-',
C: '-',
D: this.data.Freq
},
{
name: '频率偏差(Hz)',
A: '-',
B: '-',
C: '-',
D: this.data.FreqDev
},
{
name: '电压序分量(V)',
A: this.data.SeqV_C0,
B: this.data.SeqV_C1,
C: this.data.SeqV_C2,
D: '-'
},
{
name: '电流序分量(A)',
A: '/',
B: '/',
C: '/',
D: '/'
},
{
name: '总有功功率(W)',
A: '/',
B: '/',
C: '/',
D: this.data.TotW
},
{
name: '总无功功率(Var)',
A: '/',
B: '/',
C: '/',
D: this.data.TotVar
},
{
name: '总视在功率(VA)',
A: '/',
B: '/',
C: '/',
D: this.data.TotVA
},
{
name: '视在功率因数',
A: '/',
B: '/',
C: '/',
D: this.data.TotPF
},
{ name: '位移功率因数', A: '/', B: '/', C: '/', D: '/' },
{ name: '电压波动', A: '/', B: '/', C: '/', D: '/' },
{
name: '短时闪变',
A: this.data.PstPhV_phsA,
B: this.data.PstPhV_phsB,
C: this.data.PstPhV_phsC,
D: '-'
},
{
name: '长时闪变',
A: this.data.PltPhV_phsA,
B: this.data.PltPhV_phsB,
C: this.data.PltPhV_phsC,
D: '-'
},
{
name: '电压谐波畸变率(%)',
A: this.data.ThdPhV_phsA,
B: this.data.ThdPhV_phsB,
C: this.data.ThdPhV_phsC,
D: '-'
},
{
name: '电流谐波畸变率(%)',
A: '/',
B: '/',
C: '/',
D: '/'
}
]
this.containmentRate = [
{
name: '基波 (%)',
A: '100.000',
B: '100.000',
C: '100.000'
},
{
name: '2次 (%)',
A: this.data.HRPhV_H2_phsA ? this.data.HRPhV_H2_phsA : '/',
B: this.data.HRPhV_H2_phsB ? this.data.HRPhV_H2_phsB : '/',
C: this.data.HRPhV_H2_phsC ? this.data.HRPhV_H2_phsC : '/'
},
{
name: '3次 (%)',
A: this.data.HRPhV_H3_phsA ? this.data.HRPhV_H3_phsA : '/',
B: this.data.HRPhV_H3_phsB ? this.data.HRPhV_H3_phsB : '/',
C: this.data.HRPhV_H3_phsC ? this.data.HRPhV_H3_phsC : '/'
},
{
name: '4次 (%)',
A: this.data.HRPhV_H4_phsA ? this.data.HRPhV_H4_phsA : '/',
B: this.data.HRPhV_H4_phsB ? this.data.HRPhV_H4_phsB : '/',
C: this.data.HRPhV_H4_phsC ? this.data.HRPhV_H4_phsC : '/'
},
{
name: '5次 (%)',
A: this.data.HRPhV_H5_phsA ? this.data.HRPhV_H5_phsA : '/',
B: this.data.HRPhV_H5_phsB ? this.data.HRPhV_H5_phsB : '/',
C: this.data.HRPhV_H5_phsC ? this.data.HRPhV_H5_phsC : '/'
},
{
name: '6次 (%)',
A: this.data.HRPhV_H6_phsA ? this.data.HRPhV_H6_phsA : '/',
B: this.data.HRPhV_H6_phsB ? this.data.HRPhV_H6_phsB : '/',
C: this.data.HRPhV_H6_phsC ? this.data.HRPhV_H6_phsC : '/'
},
{
name: '7次 (%)',
A: this.data.HRPhV_H7_phsA ? this.data.HRPhV_H7_phsA : '/',
B: this.data.HRPhV_H7_phsB ? this.data.HRPhV_H7_phsB : '/',
C: this.data.HRPhV_H7_phsC ? this.data.HRPhV_H7_phsC : '/'
},
{
name: '8次 (%)',
A: this.data.HRPhV_H8_phsA ? this.data.HRPhV_H8_phsA : '/',
B: this.data.HRPhV_H8_phsB ? this.data.HRPhV_H8_phsB : '/',
C: this.data.HRPhV_H8_phsC ? this.data.HRPhV_H8_phsC : '/'
},
{
name: '9次 (%)',
A: this.data.HRPhV_H9_phsA ? this.data.HRPhV_H9_phsA : '/',
B: this.data.HRPhV_H9_phsB ? this.data.HRPhV_H9_phsB : '/',
C: this.data.HRPhV_H9_phsC ? this.data.HRPhV_H9_phsC : '/'
},
{
name: '10次 (%)',
A: this.data.HRPhV_H10_phsA ? this.data.HRPhV_H10_phsA : '/',
B: this.data.HRPhV_H10_phsB ? this.data.HRPhV_H10_phsB : '/',
C: this.data.HRPhV_H10_phsC ? this.data.HRPhV_H10_phsC : '/'
},
{
name: '11次 (%)',
A: this.data.HRPhV_H11_phsA ? this.data.HRPhV_H11_phsA : '/',
B: this.data.HRPhV_H11_phsB ? this.data.HRPhV_H11_phsB : '/',
C: this.data.HRPhV_H11_phsC ? this.data.HRPhV_H11_phsC : '/'
},
{
name: '12次 (%)',
A: this.data.HRPhV_H12_phsA ? this.data.HRPhV_H12_phsA : '/',
B: this.data.HRPhV_H12_phsB ? this.data.HRPhV_H12_phsB : '/',
C: this.data.HRPhV_H12_phsC ? this.data.HRPhV_H12_phsC : '/'
},
{
name: '13次 (%)',
A: this.data.HRPhV_H13_phsA ? this.data.HRPhV_H13_phsA : '/',
B: this.data.HRPhV_H13_phsB ? this.data.HRPhV_H13_phsB : '/',
C: this.data.HRPhV_H13_phsC ? this.data.HRPhV_H13_phsC : '/'
},
{
name: '14次 (%)',
A: this.data.HRPhV_H14_phsA ? this.data.HRPhV_H14_phsA : '/',
B: this.data.HRPhV_H14_phsB ? this.data.HRPhV_H14_phsB : '/',
C: this.data.HRPhV_H14_phsC ? this.data.HRPhV_H14_phsC : '/'
},
{
name: '15次 (%)',
A: this.data.HRPhV_H15_phsA ? this.data.HRPhV_H15_phsA : '/',
B: this.data.HRPhV_H15_phsB ? this.data.HRPhV_H15_phsB : '/',
C: this.data.HRPhV_H15_phsC ? this.data.HRPhV_H15_phsC : '/'
},
{
name: '16次 (%)',
A: this.data.HRPhV_H16_phsA ? this.data.HRPhV_H16_phsA : '/',
B: this.data.HRPhV_H16_phsB ? this.data.HRPhV_H16_phsB : '/',
C: this.data.HRPhV_H16_phsC ? this.data.HRPhV_H16_phsC : '/'
},
{
name: '17次 (%)',
A: this.data.HRPhV_H17_phsA ? this.data.HRPhV_H17_phsA : '/',
B: this.data.HRPhV_H17_phsB ? this.data.HRPhV_H17_phsB : '/',
C: this.data.HRPhV_H17_phsC ? this.data.HRPhV_H17_phsC : '/'
},
{
name: '18次 (%)',
A: this.data.HRPhV_H18_phsA ? this.data.HRPhV_H18_phsA : '/',
B: this.data.HRPhV_H18_phsB ? this.data.HRPhV_H18_phsB : '/',
C: this.data.HRPhV_H18_phsC ? this.data.HRPhV_H18_phsC : '/'
},
{
name: '19次 (%)',
A: this.data.HRPhV_H19_phsA ? this.data.HRPhV_H19_phsA : '/',
B: this.data.HRPhV_H19_phsB ? this.data.HRPhV_H19_phsB : '/',
C: this.data.HRPhV_H19_phsC ? this.data.HRPhV_H19_phsC : '/'
},
{
name: '20次 (%)',
A: this.data.HRPhV_H20_phsA ? this.data.HRPhV_H20_phsA : '/',
B: this.data.HRPhV_H20_phsB ? this.data.HRPhV_H20_phsB : '/',
C: this.data.HRPhV_H20_phsC ? this.data.HRPhV_H20_phsC : '/'
},
{
name: '21次 (%)',
A: this.data.HRPhV_H21_phsA ? this.data.HRPhV_H21_phsA : '/',
B: this.data.HRPhV_H21_phsB ? this.data.HRPhV_H21_phsB : '/',
C: this.data.HRPhV_H21_phsC ? this.data.HRPhV_H21_phsC : '/'
},
{
name: '22次 (%)',
A: this.data.HRPhV_H22_phsA ? this.data.HRPhV_H22_phsA : '/',
B: this.data.HRPhV_H22_phsB ? this.data.HRPhV_H22_phsB : '/',
C: this.data.HRPhV_H22_phsC ? this.data.HRPhV_H22_phsC : '/'
},
{
name: '23次 (%)',
A: this.data.HRPhV_H23_phsA ? this.data.HRPhV_H23_phsA : '/',
B: this.data.HRPhV_H23_phsB ? this.data.HRPhV_H23_phsB : '/',
C: this.data.HRPhV_H23_phsC ? this.data.HRPhV_H23_phsC : '/'
},
{
name: '24次 (%)',
A: this.data.HRPhV_H24_phsA ? this.data.HRPhV_H24_phsA : '/',
B: this.data.HRPhV_H24_phsB ? this.data.HRPhV_H24_phsB : '/',
C: this.data.HRPhV_H24_phsC ? this.data.HRPhV_H24_phsC : '/'
},
{
name: '25次 (%)',
A: this.data.HRPhV_H25_phsA ? this.data.HRPhV_H25_phsA : '/',
B: this.data.HRPhV_H25_phsB ? this.data.HRPhV_H25_phsB : '/',
C: this.data.HRPhV_H25_phsC ? this.data.HRPhV_H25_phsC : '/'
}
]
})
let overLimit = {
id: this.reportID
}
getMonitorOverLimit(overLimit).then(res => {
let data = res.data
this.overLimitData =[]
for(let i =2;i<26;i++){
let tem ='uharm'+i;
this.overLimitData.push(data[tem])
}
})
}
}
}
</script>
<style scoped>
table {
width: 100%;
border-collapse: collapse;
overflow-y: auto; /* 启用竖向滚动 */
}
table caption {
font-size: 2em;
font-weight: bold;
margin: 1em 0;
}
th,
td {
border: 1px solid #999;
text-align: center;
padding: 4px 0;
}
table thead tr {
background-color: #008c8c;
color: #fff;
}
table tbody tr:nth-child(odd) {
background-color: #eee;
}
table tbody tr:hover {
background-color: #ccc;
}
table tbody tr td:first-child {
color: #3d34fc;
}
table tfoot tr td {
text-align: right;
padding-right: 20px;
}
</style>

View File

@@ -0,0 +1,671 @@
<template>
<div class="Inspection">
<div>
<el-row>
<el-col :span="24">
<el-form ref="form" :inline="true" :model="form" class="demo-form-inline">
<el-form-item label="监测点名称:">
<el-input clearable v-model="form.searchValue" placeholder="请输入监测点名称"></el-input>
</el-form-item>
<el-form-item label="监测点状态:">
<el-select clearable v-model.trim="form.monitorState" placeholder="请选择监测点状态">
<el-option v-for="item in options" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="监测点类型:" v-if="activeName == 3">
<el-select clearable v-model.trim="form.treeType" placeholder="请选择监测点类型">
<el-option v-for="item in Subcategory" :key="item.id" :label="item.name"
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit" class="ml10" icon="el-icon-search">
查询
</el-button>
<el-button type="primary" icon="el-icon-download">导出历史数据</el-button>
</el-form-item>
</el-form>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-left: 0; position: relative">
<i v-if="colSpan == 24" class="el-icon-caret-right" @click="colSpan = 19"></i>
<el-col v-show="colSpan != 24" class="left" :style="'height:' + (vh + 55) + 'px;'" :span="5">
<i class="el-icon-caret-left" v-if="colSpan == 19" @click="colSpan = 24"></i>
<el-input placeholder="输入关键字进行过滤" clearable v-model="filterText"
style="margin-bottom: 10px"></el-input>
<el-tree class="treeEl" :highlight-current="true" :expand-on-click-node="false"
:style="'height: ' + (vh - 10) + 'px;overflow-y: auto;'" :data="treeData" :props="defaultProps"
node-key="id" default-expand-all :filter-node-method="filterNode" @node-click="handleNodeClick"
ref="tree" v-loading="loadingTree"></el-tree>
</el-col>
<el-col :span="colSpan" style="padding-right: 0">
<!-- 发电 -->
<el-table stripe highlight-current-row :data="tableData" border :height="vh + 'px'"
header-cell-class-name="table_header" :header-cell-style="thStyleFun" :cell-style="cellStyleFun"
@selection-change="handleSelectionChange">
<el-table-column show-overflow-tooltip label="序号" width="60">
<template scope="scope">
<span>{{ (form.pageNum - 1) * form.pageSize + scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="id" label="用户编号" min-width="190"></el-table-column>
<el-table-column show-overflow-tooltip prop="name" label="用户名称" width="200"></el-table-column>
<el-table-column show-overflow-tooltip prop="orgName" label="组织机构名称"
width="180"></el-table-column>
<el-table-column show-overflow-tooltip prop="operationName" label="运维单位名称"
min-width="180"></el-table-column>
<el-table-column show-overflow-tooltip prop="isUpToGrid" label="是否上送网公司监测点" min-width="180">
<template slot-scope="scope">
<span>{{ scope.row.isUpToGrid == 1 ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="userType" label="用户分类" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="industryType" label="行业分类" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="electricityType" label="用电类别" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="contractCapacity" label="合同容量"
min-width="120"></el-table-column>
<el-table-column show-overflow-tooltip prop="operatingCapacity" label="运行容量"
min-width="120"></el-table-column>
<el-table-column show-overflow-tooltip prop="productionShift" label="生产班次" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="loadNature" label="负荷性质" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="voltageLevel" label="供电电压" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="highIndustryType" label="高耗能行业类别" min-width="160"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="powerTransmissionDate" label="送电日期"
min-width="120"></el-table-column>
<el-table-column show-overflow-tooltip prop="importanceLevel" label="重要性等级" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="eccStat" label="用电客户状态" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column show-overflow-tooltip prop="userTag" label="用户标签"
min-width="150"></el-table-column>
<el-table-column show-overflow-tooltip prop="ifSensitiveUser" label="是否敏感用户" min-width="120">
<template slot-scope="scope">
<span>{{ scope.row.ifSensitiveUser == 1 ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="ifPowerQuality" label="是否影响电能质量" min-width="160">
<template slot-scope="scope">
<span>{{ scope.row.ifPowerQuality == 1 ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="ifKeyCustomers" label="是否重要客户" min-width="120">
<template slot-scope="scope">
<span>{{ scope.row.ifKeyCustomers == 1 ? '是' : '否' }}</span>
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="sensitiveType" label="敏感用户类别" min-width="120"
:formatter="formFilter"></el-table-column>
<el-table-column fixed="right" label="操作" width="350">
<template slot-scope="scope">
<el-button type="primary" icon="el-icon-view" size="mini"
@click="ViewReport(scope.row)">
历史趋势
</el-button>
<el-button type="primary" icon="el-icon-data-line" size="mini"
@click="ViewRealData(scope.row)">
准实时数据
</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background class="mt10" align="right" @size-change="handleSizeChange"
@current-change="handleCurrentChange" :current-page="form.pageNum"
:page-sizes="[20, 30, 40, 50, 100]" :page-size="form.pageSize"
layout="total, sizes, prev, pager, next, jumper" :total="total"></el-pagination>
</el-col>
</el-row>
</div>
</div>
</template>
<script>
import {
typeTree,
getOneMonitorByOrgId,
getTwoMonitorByOrgId,
getThreeYongMonitorByOrgId,
delPvLineDetail,
getPvDeviceById,
delDistributionMonitor,
pvDisOrLv
} from '@/api/AccountOperation'
import terminalDialog from '@/views/Account-management/components/StandingBook/terminalDialog.vue'
import { getPhotovoltaicAccountData } from '@/api/distributed'
import { getDicDataByTypeName } from '@/api/admin/dept'
import { dicData } from '@/assets/commjs/dictypeData'
import { getPvLvUserList, updateLvUser, delPvLvUser } from '@/api/LowVoltageUserAccount'
export default {
components: {
terminalDialog
},
props: {},
name: 'InspectionPoint',
data() {
return {
value: 0,
colSpan: 19,
vh: 0,
activeName: '3',
list: [],
title: '',
loading: false,
loadingTree: true,
formInline: {},
flag: true,
form: {
dataType: 1,
searchValue: '',
monitorState: '',
orgId: '',
treeType: 0,
pageNum: 1,
pageSize: 20
},
Subcategory: [
{
id: 0,
name: '用电用户'
},
{
id: 1,
name: '发电用户'
}
],
breadList: [], //存储树点击的父节点
options: [],
// 监测点类型 数组
typeList: [],
shwoMainNetworkAddition: false,
MainNetworkAddition: false,
tableData: [],
multipleSelection: [], //表格多选
filterText: '',
treeData: [],
treeList: null, //保存 树点击节点
defaultProps: {
children: 'children',
label: 'name'
},
total: 0
}
},
created() {
this.vh = window.sessionStorage.getItem('appheight') - 110
this.operationTree()
},
mounted() {
this.device = window.devicePixelRatio
this.options = dicData('Line_State', [])
this.setHeight()
window.addEventListener('resize', this.setHeight)
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.vh = window.sessionStorage.getItem('appheight') - 110
},
// 树查询
async operationTree() {
this.loadingTree = true
const data = await typeTree()
this.treeData = data.data
this.treeList = this.treeData[0]
setTimeout(() => {
this.$refs.tree.setCurrentKey(this.treeData[0].id)
this.onSubmit()
}, 0)
this.loadingTree = false
},
// 表格查询
onSubmit() {
this.form.orgId = this.treeList.id
this.flag = this.form.treeType == 0 ? false : true
this.loading = true
if (this.activeName == 1) {
getOneMonitorByOrgId(this.form).then(res => {
this.tableData = res.data.records
this.total = res.data.total
this.loading = false
})
} else if (this.activeName == 2) {
getTwoMonitorByOrgId(this.form).then(res => {
this.tableData = res.data.records
this.total = res.data.total
this.loading = false
})
} else if (this.activeName == 3) {
// getThreeYongMonitorByOrgId
getThreeYongMonitorByOrgId(this.form).then(res => {
this.tableData = res.data.records
this.total = res.data.total
this.loading = false
})
}
// if (this.treeList != null) {
// this.form.id = this.treeList.id;
// this.form.level = this.treeList.level;
// }
// pvLineDetail(this.form).then((res) => {
// this.tableData = res.data.records;
// this.total = res.data.total;
// });
},
// 树过滤
filterNode(value, data, node) {
if (!value) {
return true
}
let _array = [] //这里使用数组存储 只是为了存储值。
this.getReturnNode(node, _array, value)
let result = false
_array.forEach(item => {
result = result || item
})
return result
},
getReturnNode(node, _array, value) {
let isPass = node.data && node.data.name && node.data.name.indexOf(value) !== -1
isPass ? _array.push(isPass) : ''
this.index++
if (!isPass && node.name != 1 && node.parent) {
this.getReturnNode(node.parent, _array, value)
}
},
// 树点击事件
handleNodeClick: function (data, node) {
this.breadList = []
this.treeList = data
this.form.orgId = this.treeList.id
let selectNode = this.$refs.tree.getNode(node) // 获取点击当节点的dom的信息
this.getparentsNode(selectNode) //调用递归函数
},
// 递归
getparentsNode(node) {
if (!node.parent) {
// for (let i = 0; i <= this.breadList.length; i++) {
// this.breadList[i] = `-` + this.breadList[i];
// }
this.breadList.forEach((item, ind) => {
this.breadList[ind] = ` > ` + item
})
this.breadList = this.breadList.join('')
return
}
this.breadList.unshift(node.label)
this.getparentsNode(node.parent) //调用递归
},
// filterNode(value, data) {
// if (!value) return true;
// return data.label.indexOf(value) !== -1;
// },
// 表格多选
handleSelectionChange(val) {
this.multipleSelection = []
val.forEach(item => {
this.multipleSelection.push(item.id)
})
// this.multipleSelection = val;
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.form.pageSize = val
this.onSubmit()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.form.pageNum = val
this.onSubmit()
},
thStyleFun() {
return 'text-align:center'
},
cellStyleFun() {
return 'text-align:center'
},
// 数据过滤
formFilter(row, column) {
if (column.property == 'voltageLevel') {
let title = ''
dicData('Dev_Voltage', []).forEach(item => {
if (item.id == row.voltageLevel) {
title = item.label
}
})
return title
} else if (column.property == 'monitorState') {
let title = ''
dicData('Line_State', []).forEach(item => {
if (item.id == row.monitorState) {
title = item.name
}
})
return title
} else if (column.property == 'monitorType') {
let title = ''
dicData('Line_Type', []).forEach(item => {
if (item.id == row.monitorType) {
title = item.name
}
})
return title
} else if (column.property == 'potentialTransFormerType') {
let title = ''
dicData('Voltage_Transformer', []).forEach(item => {
if (item.id == row.potentialTransFormerType) {
title = item.name
}
})
return title
} else if (column.property == 'neutralGroundingMode') {
let title = ''
dicData('Neutral_Point', []).forEach(item => {
if (item.id == row.neutralGroundingMode) {
title = item.name
}
})
return title
} else if (column.property == 'monitorObjectType') {
let title = ''
dicData('Monitoring_Labels', []).forEach(item => {
if (item.id == row.monitorObjectType) {
title = item.name
}
})
return title
} else if (column.property == 'terminalWiringMethod') {
let title = ''
dicData('Dev_Connect', []).forEach(item => {
if (item.id == row.terminalWiringMethod) {
title = item.name
}
})
return title
} else if (column.property == 'monitorTag') {
let title = ''
dicData('Monitoring_Labels', []).forEach(item => {
if (item.id == row.monitorTag) {
title = item.name
}
})
return title
} else if (column.property == 'regionalism') {
let title = ''
dicData('Area', []).forEach(item => {
if (item.id == row.regionalism) {
title = item.name
}
})
return title
} else if (column.property == 'state') {
let title = ''
dicData('Line_State', []).forEach(item => {
if (item.id == row.state) {
title = item.name
}
})
return title
} else if (column.property == 'userType') {
let title = ''
dicData('User_Class', []).forEach(item => {
if (item.id == row.userType) {
title = item.name
}
})
return title
} else if (column.property == 'industryType') {
let title = ''
dicData('Business_Type', []).forEach(item => {
if (item.id == row.industryType) {
title = item.name
}
})
return title
} else if (column.property == 'electricityType') {
let title = ''
dicData('Ele_Class', []).forEach(item => {
if (item.id == row.electricityType) {
title = item.name
}
})
return title
} else if (column.property == 'productionShift') {
let title = ''
dicData('Production_Shifts', []).forEach(item => {
if (item.id == row.productionShift) {
title = item.name
}
})
return title
} else if (column.property == 'loadNature') {
let title = ''
dicData('Load_Type', []).forEach(item => {
if (item.id == row.loadNature) {
title = item.name
}
})
return title
} else if (column.property == 'highIndustryType') {
let title = ''
dicData('High_Cate', []).forEach(item => {
if (item.id == row.highIndustryType) {
title = item.name
}
})
return title
} else if (column.property == 'importanceLevel') {
let title = ''
dicData('Importance_Level', []).forEach(item => {
if (item.id == row.importanceLevel) {
title = item.name
}
})
return title
} else if (column.property == 'eccStat') {
let title = ''
dicData('Ecc_Stat', []).forEach(item => {
if (item.id == row.eccStat) {
title = item.name
}
})
return title
} else if (column.property == 'sensitiveType') {
let title = ''
dicData('Sensitive_User_Type', []).forEach(item => {
if (item.id == row.sensitiveType) {
title = item.name
}
})
return title
} else if (column.property == 'connectionMode') {
let title = ''
dicData('Connection_Mode', []).forEach(item => {
if (item.id == row.connectionMode) {
title = item.name
}
})
return title
} else if (column.property == 'gcStat') {
let title = ''
dicData('Ecc_Stat', []).forEach(item => {
if (item.id == row.gcStat) {
title = item.name
}
})
return title
} else if (column.property == 'powerStationType') {
let title = ''
dicData('Power_Station_Type', []).forEach(item => {
if (item.id == row.powerStationType) {
title = item.name
}
})
return title
} else if (column.property == 'powerGenerationMode') {
let title = ''
dicData('Power_Generation', []).forEach(item => {
if (item.id == row.powerGenerationMode) {
title = item.name
}
})
return title
} else if (column.property == 'powerCategory') {
let title = ''
dicData('Power_Category', []).forEach(item => {
if (item.id == row.powerCategory) {
title = item.name
}
})
return title
} else {
return row[column.property]
}
},
// 查看报表
ViewReport(row) {
this.$emit('ViewReport', row.id)
},
ViewRealData(row) {
this.$emit('ViewRealData', row.id)
}
// // 查看趋势图
// trend(row) {
// if (this.form.dataType == 0) {
// // 主网
// this.$router.push({
// path: "/Statistical-analysis/steadyStateIndicators",
// name: "steadyStateIndicators",
// params: {
// id: row.id,
// },
// });
// } else {
// // 配网
// this.$router.push({
// path: "/Distributionnetwork-analysis/SteadyStateIndicators",
// name: "SteadyStateIndicators",
// params: {
// id: row.id,
// },
// });
// }
// },
},
computed: {},
watch: {
filterText(val) {
this.$refs.tree.filter(val)
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
.Inspection {
margin-right: 10px;
//box-shadow: 0 2px 4px 0 rgb(0 0 0 / 12%), 0 0 6px 0 rgb(0 0 0 / 4%);
}
</style>
<style lang="scss" scoped>
.left {
position: relative;
padding: 10px 0;
// overflow-y: auto;
border: 1px solid $themeColor !important;
.el-icon-caret-left {
position: absolute;
top: 50%;
right: -5px;
font-size: 16px;
cursor: pointer;
}
}
::v-deep.el-table__fixed {
// 左固定列
height: auto !important;
bottom: 10px; // 改为自动高度后,设置与父容器的底部距离,高度会动态改变,值可以设置比滚动条的高度稍微大一些
right: 10px;
}
::v-deep .el-table__fixed-right {
// 右固定列
height: auto !important;
bottom: 10px; // 改为自动高度后,设置与父容器的底部距离,高度会动态改变,值可以设置比滚动条的高度稍微大一些
margin-right: 4px;
}
::v-deep .el-table__fixed,
.el-table__fixed-right {
height: calc(100% - 10px) !important;
}
::v-deep.el-table__fixed-body-wrapper {
height: 100% !important;
}
// ::v-deep.el-table__fixed-body-wrapper .el-table__body {
// /*滚动条高度*/
// padding-bottom: 50px !important;
// }
// // .el-icon-caret-right {
// // position: absolute;
// // top: 50%;
// // left: -5px;
// // cursor: pointer;
// // font-size: 16px;
// // }</style>

View File

@@ -0,0 +1,49 @@
<template>
<div class="pd10">
<!-- 台账 -->
<StandingBook v-show="flag" @ViewReport="ViewReport" @ViewRealData="ViewRealData" />
<!-- 报表 --5-->
<TrendChart v-if="trendFlag" :reportID="reportID" @close='flag=true;trendFlag=false;realFlag=false'/>
<RealDataPms v-if="realFlag" :reportID="reportID" @close='flag=true;trendFlag=false;realFlag=false'/>
</div>
</template>
<script>
import TrendChart from "./components/historicalTrendChart/TrendChart";
import StandingBook from "./components/historicalTrendChart/StandingBook";
import RealDataPms from "./components/historicalTrendChart/RealDataPms";
export default {
components: { TrendChart, StandingBook,RealDataPms },
props: {},
data() {
return {
flag: true,
realFlag:false,
trendFlag:false,
reportID: "",
};
},
created() {},
methods: {
ViewReport(id) {
this.reportID = id;
this.flag = false;
this.trendFlag = true
this.realFlag = false
},
ViewRealData(id) {
this.reportID = id;
this.flag = false;
this.trendFlag = false
this.realFlag = true
},
},
computed: {},
watch: {},
};
</script>