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,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>