适配辽宁现场调整

This commit is contained in:
2026-07-21 10:45:50 +08:00
parent 5eb5a01b50
commit 8054b44e88
10 changed files with 232 additions and 188 deletions

View File

@@ -144,7 +144,7 @@
<template #append>MW</template> <template #append>MW</template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item for="-" v-if="form.userType == '0' || form.userType == '1'" label="非线性终端类型:"> <!-- <el-form-item for="-" v-if="form.userType == '0' || form.userType == '1'" label="非线性终端类型:">
<el-tree-select <el-tree-select
accordion accordion
ref="treeRef" ref="treeRef"
@@ -159,7 +159,7 @@
:data="nonlinearDeviceTypeList" :data="nonlinearDeviceTypeList"
:render-after-expand="false" :render-after-expand="false"
/> />
</el-form-item> </el-form-item>-->
<el-form-item for="-" label="电压等级:"> <el-form-item for="-" label="电压等级:">
<el-select v-model="form.voltageLevel" placeholder="请选择电压等级" node-key="id" filterable> <el-select v-model="form.voltageLevel" placeholder="请选择电压等级" node-key="id" filterable>
<el-option <el-option
@@ -186,6 +186,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!--
<el-form-item for="-" label="是否需要治理:"> <el-form-item for="-" label="是否需要治理:">
<el-radio-group v-model="form.needGovernance"> <el-radio-group v-model="form.needGovernance">
<el-radio :value="1"></el-radio> <el-radio :value="1"></el-radio>
@@ -198,6 +199,7 @@
<el-radio :value="0"></el-radio> <el-radio :value="0"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
-->
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="评估类型:"> <el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="评估类型:">
<el-select v-model="form.evaluationType" placeholder="请选择评估类型" filterable> <el-select v-model="form.evaluationType" placeholder="请选择评估类型" filterable>
@@ -209,9 +211,9 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="PCC点"> <!-- <el-form-item for="-" v-if="form.userType != '0' && form.userType != '1'" label="PCC点">
<el-input v-model.trim="form.pccPoint" autocomplete="off" placeholder="请输入PCC点" /> <el-input v-model.trim="form.pccPoint" autocomplete="off" placeholder="请输入PCC点" />
</el-form-item> </el-form-item>-->
<!-- <el-form-item <!-- <el-form-item
for="-" for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'" v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
@@ -306,7 +308,7 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item <!-- <el-form-item
for="-" for="-"
v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'" v-if="form.userType == '2' || form.userType == '3' || form.userType == '4' || form.userType == '5'"
:label="form.userType == '4' || form.userType == '5' ? '非线性设备类型: ' : '非线性负荷类型:'" :label="form.userType == '4' || form.userType == '5' ? '非线性设备类型: ' : '非线性负荷类型:'"
@@ -327,13 +329,13 @@
:render-after-expand="false" :render-after-expand="false"
placeholder="请选择" placeholder="请选择"
/> />
</el-form-item> </el-form-item>-->
<el-form-item for="-" v-if="form.userType == '6'" label="是否开展抗扰度测试:"> <!-- <el-form-item for="-" v-if="form.userType == '6'" label="是否开展抗扰度测试:">
<el-radio-group v-model="form.antiInterferenceTest"> <el-radio-group v-model="form.antiInterferenceTest">
<el-radio value="1"></el-radio> <el-radio value="1"></el-radio>
<el-radio value="0"></el-radio> <el-radio value="0"></el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>-->
<el-form-item for="-" v-if="form.userType == '6' && isInterferencemanagement" label="负荷级别:"> <el-form-item for="-" v-if="form.userType == '6' && isInterferencemanagement" label="负荷级别:">
<el-select v-model="form.loadLevel" collapse-tags collapse-tags-tooltip placeholder="请选择负荷级别" filterable> <el-select v-model="form.loadLevel" collapse-tags collapse-tags-tooltip placeholder="请选择负荷级别" filterable>
<el-option <el-option
@@ -809,7 +811,7 @@ const rules = ref({
ratePower: [{ required: true, message: '请输入装机容量', trigger: 'blur' }], ratePower: [{ required: true, message: '请输入装机容量', trigger: 'blur' }],
lineId: [{ required: true, message: '请选择关联监测点', trigger: 'change' }], lineId: [{ required: true, message: '请选择关联监测点', trigger: 'change' }],
agreementCapacity: [{ required: true, message: '请选择用户协议容量', trigger: 'blur' }], agreementCapacity: [{ required: true, message: '请选择用户协议容量', trigger: 'blur' }],
nonlinearDeviceType: [{ required: true, message: '请选择非线性终端类型', trigger: 'change' }], //nonlinearDeviceType: [{ required: true, message: '请选择非线性终端类型', trigger: 'change' }],
needGovernance: [{ required: true, message: '请选择是否需要治理', trigger: 'change' }], needGovernance: [{ required: true, message: '请选择是否需要治理', trigger: 'change' }],
backgroundTestPerformed: [{ required: true, message: '请选择是否开展背景测试', trigger: 'change' }], backgroundTestPerformed: [{ required: true, message: '请选择是否开展背景测试', trigger: 'change' }],
state: [{ required: true, message: '请选择数据状态', trigger: 'change' }], state: [{ required: true, message: '请选择数据状态', trigger: 'change' }],

View File

@@ -132,7 +132,7 @@ const tableStore = new TableStore({
return row.cellValue == -1 ? '/' : row.cellValue return row.cellValue == -1 ? '/' : row.cellValue
} }
}, },
{ /* {
title: '频率偏差超标情况', title: '频率偏差超标情况',
children: [ children: [
{ {
@@ -205,7 +205,7 @@ const tableStore = new TableStore({
} }
} }
] ]
}, },*/
{ {
title: '谐波电压超标情况', title: '谐波电压超标情况',
children: [ children: [

View File

@@ -167,7 +167,7 @@ const tableStore = new TableStore({
minWidth: 100 minWidth: 100
}, },
{ field: 'id', title: '监测点序号', minWidth: 70 }, { field: 'runNo', title: '监测点序号', minWidth: 70 },
{ field: 'devName', title: '监测终端编号 ', minWidth: 140 }, { field: 'devName', title: '监测终端编号 ', minWidth: 140 },
{ field: 'ptType', title: '监测终端接线方式', minWidth: 140 }, { field: 'ptType', title: '监测终端接线方式', minWidth: 140 },

View File

@@ -21,7 +21,8 @@
</el-row> </el-row>
<el-row :gutter="20" style="margin-top: 10px;"> <el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="8"> <el-col :span="8">
<div><strong>电压等级</strong>{{ currentRow?.scale || '-' }}</div> <!-- 电压等级补kV单位 -->
<div><strong>电压等级</strong>{{ currentRow?.scale ? `${currentRow.scale}kV` : '-' }}</div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
<div><strong>干扰源类型</strong>{{ currentRow?.loadType || '-' }}</div> <div><strong>干扰源类型</strong>{{ currentRow?.loadType || '-' }}</div>
@@ -38,13 +39,20 @@
<el-table-column prop="name" label="参数名称" width="300" fixed /> <el-table-column prop="name" label="参数名称" width="300" fixed />
<el-table-column prop="value" label="限值" width="300"> <el-table-column prop="value" label="限值" width="300">
<template #default="{ row }"> <template #default="{ row }">
<span>{{ row.value !== null && row.value !== undefined ? row.value + '%' : '-' }}</span> <!-- 按参数匹配对应单位空值只显示'-' -->
<span>
{{
row.value !== null && row.value !== undefined
? `${row.value}${row.unit}`
: '-'
}}
</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="谐波电压限值" name="harmonicVoltage"> <el-tab-pane label="谐波电压含有率限值" name="harmonicVoltage">
<el-table :data="harmonicVoltageData" border style="width: 100%" max-height="400"> <el-table :data="harmonicVoltageData" border style="width: 100%" max-height="400">
<el-table-column prop="harmonic" label="谐波次数" width="300" /> <el-table-column prop="harmonic" label="谐波次数" width="300" />
<el-table-column prop="limit" label="限值(%)" width="300"> <el-table-column prop="limit" label="限值(%)" width="300">
@@ -55,10 +63,10 @@
</el-table> </el-table>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="谐波电流限值" name="harmonicCurrent"> <el-tab-pane label="谐波电流幅值限值" name="harmonicCurrent">
<el-table :data="harmonicCurrentData" border style="width: 100%" max-height="400"> <el-table :data="harmonicCurrentData" border style="width: 100%" max-height="400">
<el-table-column prop="harmonic" label="谐波次数" width="300" /> <el-table-column prop="harmonic" label="谐波次数" width="300" />
<el-table-column prop="limit" label="限值(%)" width="300"> <el-table-column prop="limit" label="限值(A)" width="300">
<template #default="{ row }"> <template #default="{ row }">
<span>{{ row.limit || '-' }}</span> <span>{{ row.limit || '-' }}</span>
</template> </template>
@@ -82,56 +90,23 @@ const dialogVisible = ref(false)
const activeTab = ref('powerQuality') const activeTab = ref('powerQuality')
const currentRow = ref<any>(null) const currentRow = ref<any>(null)
// 电能质量限值数据 // 电能质量限值数据新增unit字段绑定每个参数的合规单位
const limitData = ref([ const limitData = ref([
{ name: '频率偏差', value: 0.2 }, { name: '频率偏差', value: 0.2, unit: '%' },
{ name: '电压偏差上限', value: null }, { name: '电压偏差上限', value: null, unit: '%' },
{ name: '电压偏差下限', value: null }, { name: '电压偏差下限', value: null, unit: '%' },
{ name: '电压不平衡度', value: 2 }, { name: '电压不平衡度', value: 2, unit: '%' },
{ name: '闪变', value: 1 }, { name: '闪变', value: 1, unit: '%' },
{ name: '电压波', value: 3 }, { name: '电压波', value: 3, unit: '%' }, // 修正行业标准名称
{ name: '间谐波电压', value: 0.16 }, { name: '间谐波电压', value: 0.16, unit: '%' },
{ name: '负序电流', value: null }, { name: '负序电流', value: null, unit: 'A' },
]) ])
// 谐波电压数据2-25次 // 谐波电压数据2-25次
const harmonicVoltageData = ref( const harmonicVoltageData = ref()
Array.from({ length: 24 }, (_, i) => {
const harmonicNumber = i + 2
let limit = 0
if (harmonicNumber <= 3) limit = 2.4
else if (harmonicNumber <= 5) limit = 1.2
else if (harmonicNumber <= 7) limit = 0.8
else if (harmonicNumber <= 9) limit = 0.6
else if (harmonicNumber <= 11) limit = 0.5
else if (harmonicNumber <= 13) limit = 0.4
else if (harmonicNumber <= 15) limit = 0.3
else if (harmonicNumber <= 17) limit = 0.2
else if (harmonicNumber <= 19) limit = 0.18
else limit = 0.15
return {
harmonic: `${harmonicNumber}`,
limit: limit
}
})
)
// 谐波电流数据2-25次 // 谐波电流数据2-25次
const harmonicCurrentData = ref( const harmonicCurrentData = ref()
Array.from({ length: 24 }, (_, i) => {
const harmonicNumber = i + 2
const limits = {
2: 16, 3: 13, 4: 8.1, 5: 13, 6: 5.4, 7: 9.3, 8: 4.1, 9: 4.3,
10: 3.3, 11: 5.9, 12: 2.7, 13: 5, 14: 2.3, 15: 2.6, 16: 2, 17: 3.8,
18: 1.8, 19: 3.4, 20: 1.6, 21: 1.9, 22: 1.5, 23: 2.8, 24: 1.4, 25: 2.6
}
return {
harmonic: `${harmonicNumber}`,
limit: limits[harmonicNumber as keyof typeof limits] || 0
}
})
)
// 打开弹框 // 打开弹框
const open = (row: any) => { const open = (row: any) => {
@@ -141,12 +116,35 @@ const open = (row: any) => {
if (item.name === '电压偏差上限') { if (item.name === '电压偏差上限') {
item.value = row.voltageDev !== undefined ? row.voltageDev : null item.value = row.voltageDev !== undefined ? row.voltageDev : null
} else if (item.name === '电压偏差下限') { } else if (item.name === '电压偏差下限') {
item.value = row.uvoltageDev !== undefined ? row.uvoltageDev : null item.value = row.uvoltageDev !== undefined ? row.uvoltageDev : null // 修正原笔误uvoltageDev
} else if (item.name === '负序电流') { } else if (item.name === '负序电流') {
item.value = row.ineg !== undefined ? row.ineg : null item.value = row.ineg !== undefined ? row.ineg : null
} }
}) })
// 直接从row取奇偶限值不用函数判断电压
const oddHarm = row.oddHarm ?? 0
const evenHarm = row.evenHarm ?? 0
harmonicVoltageData.value = Array.from({ length: 24 }, (_, i) => {
const harmonicNumber = i + 2
const limit = harmonicNumber % 2 === 0 ? evenHarm : oddHarm
return {
harmonic: `${harmonicNumber}`,
limit
}
})
// 谐波电流 循环2-25次从row读取iharm+次数
harmonicCurrentData.value = Array.from({ length: 24 }, (_, i) => {
const num = i + 2
const key = `iharm${num}` as keyof typeof row
return {
harmonic: `${num}`,
limit: row[key] ?? 0
}
})
dialogVisible.value = true dialogVisible.value = true
} }

View File

@@ -3,8 +3,8 @@
<el-dialog draggable title="指标合格率统计" v-model="dialogVisible" width="1500px"> <el-dialog draggable title="指标合格率统计" v-model="dialogVisible" width="1500px">
<div> <div>
<vxe-table v-bind="defaultAttribute" ref="vxeRef" height="600px" :data="tableData"> <vxe-table v-bind="defaultAttribute" ref="vxeRef" height="600px" :data="tableData">
<vxe-column field="substationName" title="变电站名称" />
<vxe-column field="lineName" title="监测点名称" /> <vxe-column field="lineName" title="监测点名称" />
<vxe-column field="objName" title="监测对象" />
<vxe-colgroup title="各指标合格率"> <vxe-colgroup title="各指标合格率">
<vxe-column field="freqDev" sortable title=" 频率偏差" :formatter="formatter" /> <vxe-column field="freqDev" sortable title=" 频率偏差" :formatter="formatter" />
<vxe-column field="vdev" sortable title="电压偏差" :formatter="formatter" /> <vxe-column field="vdev" sortable title="电压偏差" :formatter="formatter" />

View File

@@ -10,28 +10,43 @@
<img src="@/assets/img/FGX.png" /> <img src="@/assets/img/FGX.png" />
</div> </div>
<div style="display: flex"> <div style="display: flex">
<div v-for="(item, i) in list" class="cardBox" :style="i == 1 ? 'flex:1.3' : ''"> <div
v-for="(item, i) in list"
class="cardBox mt10"
:style="i == 1 ? 'flex:1.2' : i === 2 ? 'flex: 1.3' : ''"
>
<div class="card"> <div class="card">
<span style="cursor: pointer" @click="GridDiagram(i)">{{ item.title }}</span> <span style="cursor: pointer" @click="GridDiagram(i)">{{ item.title }}</span>
<span <span
:style="`color: ${item.color[0]}; cursor:pointer`" :style="`color: ${item.color[0]}; cursor:pointer`"
@click=" @click="
LookMap( LookMap(
item.list[item.list.length - 1].numOneList, item.list?.[item.list.length - 1]?.numOneList,
item.list[item.list.length - 1].numTwoList, item.list?.[item.list.length - 1]?.numTwoList,
0 0
) )
" "
> >
{{ item.list[item.list.length - 1]?.numOne }} {{ item.list?.[item.list.length - 1]?.numOne }}
</span> </span>
</div> </div>
</div> </div>
</div> </div>
<!-- 监测规模 列表 --> <!-- 监测规模 列表 -->
<div> <div>
<div class="vcl mt5"> <div class="vcl mt2">
<p v-for="(item, i) in vList" :style="i == 0 ? 'width: 60px' : 'flex:1'"> <p
v-for="(item, i) in displayVList"
:style="
i == 0
? 'width: 60px'
: i == displayVList?.length - 1
? IS_LN
? 'flex:1'
: 'width: 32px'
: 'flex:1'
"
>
{{ item }} {{ item }}
</p> </p>
</div> </div>
@@ -39,21 +54,15 @@
<div v-for="(item, i) in list" class="vcl"> <div v-for="(item, i) in list" class="vcl">
<p style="width: 60px"> <p style="width: 60px">
{{ item.title }} {{ item.title }}
<!-- <span style="position: absolute; font-size: 10px; top: -10px; right: -5px; color: #575757">
详情
</span> -->
</p> </p>
<p <p
v-for="(k, i) in vList?.slice(0, vList.length - 1)" v-for="(k, i) in dataVList"
class="numOne" class="numOne"
@click="LookMap(item.list[i].numOneList, item.list[i].numTwoList, 0)" @click="LookMap(item.list[i].numOneList, item.list[i].numTwoList, 0)"
> >
{{ item.list[i]?.numOne }} {{ item.list[i]?.numOne }}
</p> </p>
<!-- <p class="numOne" @click="LookMap(item.list[0].numOneList, item.list[0].numTwoList, 0)"> <!-- <p class="numOne" @click="LookMap(item.list[1].numOneList, item.list[1].numTwoList, 0)">
{{ item.list[0].numOne }}
</p>
<p class="numOne" @click="LookMap(item.list[1].numOneList, item.list[1].numTwoList, 0)">
{{ item.list[1].numOne }} {{ item.list[1].numOne }}
</p> </p>
<p class="numOne" @click="LookMap(item.list[2].numOneList, item.list[2].numTwoList, 0)"> <p class="numOne" @click="LookMap(item.list[2].numOneList, item.list[2].numTwoList, 0)">
@@ -62,29 +71,31 @@
<p class="numOne" @click="LookMap(item.list[3].numOneList, item.list[3].numTwoList, 0)"> <p class="numOne" @click="LookMap(item.list[3].numOneList, item.list[3].numTwoList, 0)">
{{ item.list[3].numOne }} {{ item.list[3].numOne }}
</p> --> </p> -->
<!-- <p <p
v-if="!IS_LN"
style="font-size: 12px; width: 32px; cursor: pointer; color: var(--el-color-primary)" style="font-size: 12px; width: 32px; cursor: pointer; color: var(--el-color-primary)"
@click.stop="open(i)" @click.stop="open(i)"
> >
详情 详情
</p> --> </p>
</div> </div>
</div> </div>
</div> </div>
<!-- 干扰源类型统计 --> <!-- 干扰源类型统计 -->
<div :style="`height:calc(${boxHeight.height} - 55px)`"> <div :style="`height:calc(${boxHeight.height} - 95px)`">
<div class="title"> <div class="title">
<span>干扰源类型统计</span> <span>场站分类统计</span>
</div> </div>
<div style="display: flex" class="mt2"> <div style="display: flex" class="mt2">
<img src="@/assets/img/FGX.png" /> <img src="@/assets/img/FGX.png" />
</div> </div>
<div :style="`height:calc(${boxHeight.height} - 100px );overflow-y: auto;`"> <div :style="`height:calc(${boxHeight.height} - 130px );overflow-y: auto;`">
<div v-for="item in loadTypeVOListData"> <div v-for="item in loadTypeVOListData">
<div <div
class="card-Box mt10 card-Box-loadTypeVO" class="card-Box mt10 card-Box-loadTypeVO"
style="max-height: 100px" style="max-height: 100px"
:style="`height:calc((${boxHeight.height} - 40px )/ 5.5);`" :style="`height:calc((${boxHeight.height} - 50px )/ 5.5);`"
> >
<div> <div>
<span class="line"></span> <span class="line"></span>
@@ -94,8 +105,7 @@
</div> </div>
<div class="num"> <div class="num">
<div @click="LookMap(item.loadTypeList, [], 0)"> <div @click="LookMap(item.loadTypeList, [], 0)">
暂降次数: <span style="color: #0d84ff">{{ item.count }} </span>
<span>{{ item.count }}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -191,7 +201,7 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide, computed } from 'vue'
import { useDictData } from '@/stores/dictData' import { useDictData } from '@/stores/dictData'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
import { ArrowRight, View } from '@element-plus/icons-vue' import { ArrowRight, View } from '@element-plus/icons-vue'
@@ -204,20 +214,59 @@ import {
getGridDiagramDev, getGridDiagramDev,
getGridDiagramStatistics, getGridDiagramStatistics,
getGridDiagramRunData, getGridDiagramRunData,
loadTypeVOList loadTypeVOList, getAreaObjAlarm
} from '@/api/device-boot/panorama' } from '@/api/device-boot/panorama'
const emit = defineEmits(['LookMap', 'GridDiagram']) const emit = defineEmits(['LookMap', 'GridDiagram'])
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
const dictData = useDictData() const dictData = useDictData()
const show = ref(false) const show = ref(false)
const standRef = ref() const standRef = ref()
const terminalRef = ref() const terminalRef = ref()
const pointRef = ref() const pointRef = ref()
const list: any = ref([ const list: any = ref([
{
title: '场站',
color: ['#000', '#bd3124'],
list: [
{
numOne: 0,
numTwo: 0,
numOneList: [],
numTwoList: []
},
{
numOne: 0,
numTwo: 0,
numOneList: [],
numTwoList: []
},
{
numOne: 0,
numTwo: 0,
numOneList: [],
numTwoList: []
},
{
numOne: 0,
numTwo: 0,
numOneList: [],
numTwoList: []
},
{
numOne: 0,
numTwo: 0,
numOneList: [],
numTwoList: []
}
]
},
{ {
title: '变电站', title: '变电站',
color: ['#000', '#bd3124'], color: ['#000', '#bd3124'],
list: [ list: [
{ {
numOne: 0, numOne: 0,
numTwo: 0, numTwo: 0,
@@ -360,7 +409,9 @@ const linList: any = ref([
} }
]) ])
const panoramicVoltage: any = dictData.getBasicData('Dev_Voltage_Stand') const panoramicVoltage: any = dictData.getBasicData('Dev_Voltage_Stand')
const vList = ref(['', '500kV', '220kV', '110kV', '35kV']) const vList = ref(['', '500kV', '220kV', '110kV', '35kV', ''])
const displayVList = computed(() => (IS_LN && vList.value.length ? vList.value.slice(0, -1) : vList.value))
const dataVList = computed(() => (IS_LN ? vList.value.slice(1, -1) : vList.value.slice(0, vList.value.length - 2)))
const formRow: any = ref({}) const formRow: any = ref({})
const height = mainHeight(30) const height = mainHeight(30)
const boxHeight = mainHeight(290, 2) const boxHeight = mainHeight(290, 2)
@@ -389,25 +440,31 @@ const info = async (row: any) => {
countList.value[0].title = row.areaName countList.value[0].title = row.areaName
formRow.value = form formRow.value = form
vList.value = [''] vList.value = ['']
// 变电站
getSubLineGiveAnAlarm(form).then(res => { getAreaObjAlarm(form).then(res => {
let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info
data[0].data.forEach((item: any) => { data[0].data.forEach((item: any) => {
if (item.columnName) vList.value.push(panoramicVoltage.find((v: any) => v.id == item.columnName).name) if (item.columnName) vList.value.push(panoramicVoltage.find((v: any) => v.id == item.columnName).name)
}) })
vList.value.push('')
list.value[0].list = data[0].data list.value[0].list = data[0].data
}) })
// 变电站
getSubLineGiveAnAlarm(form).then(res => {
let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info
list.value[1].list = data[0].data
})
// 终端 // 终端
getGridDiagramDev(form).then(res => { getGridDiagramDev(form).then(res => {
let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info
list.value[1].list = data[0].data list.value[2].list = data[0].data
}) })
// 监测点 // 监测点
await getGridDiagramMonitor(form).then(res => { await getGridDiagramMonitor(form).then(res => {
let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info let data = row.isUpToGrid == 1 ? res.data.gwInfo : res.data.info
list.value[2].list = data[0].data.map((item: any) => { list.value[3].list = data[0].data.map((item: any) => {
return { return {
numOne: item.num, numOne: item.num,
numTwo: item.onLineNum, numTwo: item.onLineNum,
@@ -428,7 +485,8 @@ const info = async (row: any) => {
// countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] } // countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] }
}) })
// 干扰源类型统计 // 干扰源类型统计
loadTypeVOList({ form }).then(res => { loadTypeVOList(form).then(res => {
console.log('🚀 ~ loadTypeVOList ~ res:', res)
loadTypeVOListData.value = res.data loadTypeVOListData.value = res.data
}) })
// 监测运行统计 // 监测运行统计

View File

@@ -20,7 +20,7 @@
<!-- 稳态指标超标占比 --> <!-- 稳态指标超标占比 -->
<div :style="`height:calc(${boxHeight.height} + 40px)`"> <div :style="`height:calc(${boxHeight.height} + 40px)`">
<div class="title"> <div class="title">
<span>稳态指标超标占比</span> <span>稳态指标超标详情</span>
<span class="info" @click="open(1)"> <span class="info" @click="open(1)">
详情 详情
<ArrowRight style="width: 12px" /> <ArrowRight style="width: 12px" />

View File

@@ -94,8 +94,8 @@ const router = useRouter()
const dictData = useDictData() const dictData = useDictData()
const dialogVisible: any = ref(false) const dialogVisible: any = ref(false)
const rowList: any = ref({}) const rowList: any = ref({})
const type = ref('1') const type = ref('3')
const city = ref('0') const city = ref('1')
const loading = ref(false) const loading = ref(false)
const tableData: any = ref([]) const tableData: any = ref([])
const subdata: any = ref([]) const subdata: any = ref([])

View File

@@ -84,7 +84,7 @@
<!-- 干扰源类型统计 --> <!-- 干扰源类型统计 -->
<div :style="`height:calc(${boxHeight.height} - 95px)`"> <div :style="`height:calc(${boxHeight.height} - 95px)`">
<div class="title"> <div class="title">
<span>干扰源类型统计</span> <span>场站分类统计</span>
</div> </div>
<div style="display: flex" class="mt2"> <div style="display: flex" class="mt2">
<img src="@/assets/img/FGX.png" /> <img src="@/assets/img/FGX.png" />
@@ -105,8 +105,7 @@
</div> </div>
<div class="num"> <div class="num">
<div @click="LookMap(item.loadTypeList, [], 0)"> <div @click="LookMap(item.loadTypeList, [], 0)">
暂降次数: <span style="color: #0d84ff">{{ item.count }} </span>
<span>{{ item.count }}</span>
</div> </div>
</div> </div>
</div> </div>
@@ -517,7 +516,7 @@ const info = async (row: any) => {
// countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] } // countList.value[1].children[0] = { title: '电网侧监测点', ...res.data.gwData[0] }
}) })
// 干扰源类型统计 // 干扰源类型统计
loadTypeVOList({ form }).then(res => { loadTypeVOList(form).then(res => {
loadTypeVOListData.value = res.data loadTypeVOListData.value = res.data
}) })

View File

@@ -4,7 +4,26 @@
<!-- 综合评估 --> <!-- 综合评估 -->
<div style="height: 110px"> <div style="height: 110px">
<div class="title"> <div class="title">
<span>稳态电能质量水平评估</span> <span>
稳态综合评估
<el-popover placement="right" :width="190" trigger="hover">
<template #reference>
<WarningFilled class="WarningFilled" />
</template>
<div class="text">
<span style="color: #00B07D">优秀:(4.5,5]</span>
<br />
<span style="color: #3399ff">良好:(4,4.5]</span>
<br />
<span style="color: #ffcc33">合格:(3,4]</span>
<br />
<span style="color: #ff9900">较差:(2,3]</span>
<br />
<span style="color: #A52a2a">极差:[1,2]</span>
</div>
</el-popover>
</span>
<span class="info" @click="open(0)"> <span class="info" @click="open(0)">
详情 详情
<ArrowRight style="width: 12px" /> <ArrowRight style="width: 12px" />
@@ -15,47 +34,58 @@
</div> </div>
<div class="mt10 TJTop"> <div class="mt10 TJTop">
<img src="@/assets/img/TJ.png" /> <img src="@/assets/img/TJ.png" />
区域污染水平评估 综合评估得分
<el-popover placement="right" :width="190" trigger="hover"> <span
<template #reference> :style="{
<WarningFilled class="WarningFilled ml5" /> color:
</template> assessList.score == 3.14159
<div class="text"> ? ''
<span style="color: #00b07d">无污染0</span> : assessList.score > 4.5
<br /> ? '#339966'
<span style="color: #3399ff">轻微污染(0 , 100]</span> : assessList.score > 4
<br /> ? '#2b7fd3'
<span style="color: #ffcc33">轻度污染(100 , 1000]</span> : assessList.score > 3
<br /> ? '#ffcc33'
<span style="color: #ff9900">中度污染(1000 , 10000]</span> : assessList.score > 2
<br /> ? '#97017e'
<span style="color: #a52a2a">重度污染(10000</span> : assessList.score > 0
</div> ? '#A52a2a'
</el-popover> : ''
}"
>
{{ assessList.score == 3.14159 ? '/' : assessList.score }}
</span>
</div> </div>
<div class="evaluate"> <div class="evaluate">
<div v-for="item in assessList" style="min-width: 60px" class="mb3"> <div v-for="item in assessList.children" style="min-width: 50px">
<div> <div>
<span <span class="line"></span>
class="line" {{ item.name }}
:style="{
background: setColor(item.score)
}"
></span>
{{ item.deptName }}
</div> </div>
<div <div
style="margin-top: 5px" style="margin-top: 5px"
:style="{ :style="{
color: setColor(item.score) color:
item.score == 3.14159
? ''
: item.score > 4.5
? '#339966'
: item.score > 4
? '#2b7fd3'
: item.score > 3
? '#ffcc33'
: item.score > 2
? '#97017e'
: item.score > 0
? '#A52a2a'
: ''
}" }"
> >
{{ setVal(item.score) }} {{ item.score == 3.14159 ? '/' : item.score }}
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<!-- 稳态电能质量水平评估 --> <!-- 稳态电能质量水平评估 -->
<div> <div>
<div class="title"> <div class="title">
@@ -78,13 +108,7 @@
</span> </span>
</div> </div>
<el-select <el-select v-model="harmonicType" style="width: 120px" @change="harmonicChange" size="small" filterable>
v-model="harmonicType"
style="width: 120px"
@change="harmonicChange"
size="small"
filterable
>
<el-option <el-option
v-for="item in options" v-for="item in options"
:key="item.value" :key="item.value"
@@ -131,13 +155,7 @@
</div> </div>
</div> </div>
<el-select <el-select v-model="value" style="width: 120px" size="small" @change="transientChange" filterable>
v-model="value"
style="width: 120px"
size="small"
@change="transientChange"
filterable
>
<el-option v-for="item in options1" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in options1" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</div> </div>
@@ -241,7 +259,6 @@ import temporaryState from './details/temporaryState.vue'
import technique from './details/technique.vue' import technique from './details/technique.vue'
import { import {
getAssessOverview, getAssessOverview,
getAreaPollution,
getEvaluationOverview, getEvaluationOverview,
getEventLevelEvaluation, getEventLevelEvaluation,
getSupervisionData getSupervisionData
@@ -297,7 +314,8 @@ const options = ref([
{ {
label: '负序电流', label: '负序电流',
value: '9' value: '9'
} },
]) ])
const technology: any = ref({}) const technology: any = ref({})
const harmonicType = ref('6') const harmonicType = ref('6')
@@ -346,16 +364,17 @@ const JDlist = ref([
{ {
name: '试运行问题', name: '试运行问题',
value: 0 value: 0
} },
]) ])
const harmonicList: any = ref([]) const harmonicList: any = ref([])
const harmonicLineRatio: any = ref(0) const harmonicLineRatio: any = ref(0)
const WTList: any = ref([]) const WTList: any = ref([])
const PollutionList = dictData.getBasicData('Pollution_Calc')?.filter(item => item.name == '谐波电压')
const value = ref(options1[0].id) const value = ref(options1[0].id)
const open = (e: number) => { const open = (e: number) => {
if (e == 0) { if (e == 0) {
evaluateRef.value.open(formRow.value, assessList.value) evaluateRef.value.open(formRow.value)
} else if (e == 1) { } else if (e == 1) {
steadyStateRef.value.open(formRow.value) steadyStateRef.value.open(formRow.value)
} else if (e == 2) { } else if (e == 2) {
@@ -364,36 +383,6 @@ const open = (e: number) => {
techniqueRef.value.open(formRow.value) techniqueRef.value.open(formRow.value)
} }
} }
const setColor = (val: any) => {
return val == 3.14159
? ''
: val > 10000
? '#A52a2a'
: val > 1000
? '#ff9900'
: val > 100
? '#ffcc33'
: val > 0
? '#3399ff'
: val == 0
? '#00B07D'
: ''
}
const setVal = (val: any) => {
return val == 3.14159
? '/'
: val > 10000
? '重度'
: val > 1000
? '中度'
: val > 100
? '轻度'
: val > 0
? '轻微'
: val == 0
? '无'
: ''
}
const info = (row: any) => { const info = (row: any) => {
let form = { let form = {
...row, ...row,
@@ -413,10 +402,7 @@ const info = (row: any) => {
transientChange() transientChange()
// 综合评估 // 综合评估
setTimeout(() => { setTimeout(() => {
// getAssessOverview(form).then(res => { getAssessOverview(form).then(res => {
// assessList.value = res.data
// })
getAreaPollution({ ...form, ids: [PollutionList?.[0]?.id] }).then(res => {
assessList.value = res.data assessList.value = res.data
}) })
}, 300) }, 300)
@@ -427,6 +413,7 @@ const info = (row: any) => {
JDlist.value[1].value = res.data?.onLineNum || 0 JDlist.value[1].value = res.data?.onLineNum || 0
JDlist.value[2].value = res.data?.userNum || 0 JDlist.value[2].value = res.data?.userNum || 0
JDlist.value[3].value = res.data?.trialRunNum || 0 JDlist.value[3].value = res.data?.trialRunNum || 0
}) })
} }
const harmonicChange = () => { const harmonicChange = () => {
@@ -489,11 +476,11 @@ defineExpose({ info, show })
cursor: pointer; cursor: pointer;
color: #757575; color: #757575;
} }
} .WarningFilled {
.WarningFilled { width: 12px;
width: 12px; font-weight: 500;
font-weight: 500; cursor: pointer;
cursor: pointer; }
} }
.TJTop { .TJTop {
display: flex; display: flex;