添加周期

This commit is contained in:
2026-07-07 10:18:22 +08:00
parent 5044c88946
commit 1a44a2f9e0
19 changed files with 556 additions and 87 deletions

View File

@@ -779,6 +779,7 @@ const analyseList = (e: string) => {
provide('tableStore', tableStore)
onMounted(() => {
TableHeaderRef.value.setTheDate(4)
const dom = document.getElementById('navigation-splitpanes')
if (dom) {
size.value = Math.round((180 / dom.offsetHeight) * 120)

View File

@@ -0,0 +1,252 @@
<template>
<div class="default-main">
<TableHeader ref="TableHeaderRef">
<template #select>
<el-form-item label="地市">
<el-select v-model="tableStore.table.params.city" clearable placeholder="请选择地市">
<el-option
v-for="item in areaOptionList"
:key="item.id"
:label="item.name"
:value="item.name"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="变电站">
<el-input
style="width: 200px"
placeholder="请输入变电站"
v-model="tableStore.table.params.substation"
clearable
maxlength="32"
show-word-limit
></el-input>
</el-form-item>
<el-form-item label="终端名称">
<el-input
style="width: 200px"
placeholder="请输入终端名称"
v-model="tableStore.table.params.terminalName"
clearable
maxlength="32"
show-word-limit
></el-input>
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增定检记录</el-button>
<el-button icon="el-icon-Delete" type="primary" @click="deleteEven">批量删除</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 详情弹窗 -->
<el-dialog title="定检详情" width="1000px" v-model="dialogShow" v-if="dialogShow">
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, reactive, watch } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import { useDictData } from '@/stores/dictData'
import { useAdminInfo } from '@/stores/adminInfo'
import { terminalCheckPage } from '@/api/device-boot/device'
defineOptions({
name: 'BusinessAdministrator/PowerQualityCheck'
})
// 公共依赖
const TableHeaderRef = ref()
const dictData = useDictData()
const adminInfo = useAdminInfo()
// 地区字典(和你原有地市下拉同源)
const areaOptionList = dictData.getBasicData('jibei_area')
// 详情弹窗
const detailId = ref('')
const dialogShow = ref(false)
// TableStore 表格配置(仅修改字段映射,其余不动)
const tableStore = new TableStore({
url: '/device-boot/alarm/terminalCheckPage',
method: 'POST',
column: [
// 多选框
{
width: '60',
type: 'checkbox'
},
// 序号(分页自增,和你现有逻辑一致)
{
title: '序号',
width: 70,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'areaName', title: '地市', minWidth: 80 },
{ field: 'bdName', title: '变电站', minWidth: 110 },
{ field: 'objName', title: '监测对象', minWidth: 140 },
{ field: 'devName', title: '终端名称', minWidth: 150 },
{ field: 'loginDate', title: '投运时间', minWidth: 120 },
{ field: 'thisCheckTime', title: '本次定检时间', minWidth: 120 },
{ field: 'nextCheckTime', title: '下次定检时间', minWidth: 120 },
{
title: '是否逾期',
field: 'checkStatus',
align: 'center',
width: 80,
render: 'customRender',
customRender: props => {
console.log(props.renderValue)
const val = props.renderValue
console.log(val)
let text = ''
let color = ''
if (val === 1) {
text = '是'
color = '#f53f3f'
} else if (val === 0) {
text = '否'
color = '#00b42a'
}
return h('span', { style: { color, fontWeight: 'bold' } }, text)
}
},
{
field: 'overdueDay',
title: '逾期天数',
minWidth: 70,
render: 'customRender',
customRender: props => {
const val = props.renderValue
let text = ''
let color = ''
if (val > 0) {
text = val
color = '#f53f3f'
} else if (val > -30) {
text = Math.abs(val).toString()+'天后将逾期'
color = 'rgba(236,143,21,0.92)'
} else {
text = '/'
}
return h('span', { style: { color, fontWeight: 'bold' } }, text)
}
},
{ field: 'nextCheckTime', title: '周期检测报告', minWidth: 120 },
// 操作列固定右侧
{
title: '操作',
fixed: 'right',
minWidth: 160,
render: 'buttons',
buttons: [
{
name: 'detail',
title: '详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
openDetail(row.devId)
}
},
{
name: 'edit',
title: '上传周期检测报告',
type: 'primary',
icon: 'el-icon-Open',
render: 'basicButton',
click: row => {
}
}
]
}
],
beforeSearchFun: () => {
// 携带当前登录人部门ID
tableStore.table.params.orgId = adminInfo.$state.deptId
}
})
// 初始化查询参数
tableStore.table.params.areaName = ''
tableStore.table.params.bdName = ''
tableStore.table.params.devName = ''
tableStore.table.params.orgId = adminInfo.$state.deptId
// 打开详情弹窗
const openDetail = (id: string) => {
detailId.value = id
dialogShow.value = true
}
// 新增按钮
const addFormModel = () => {
}
// 批量删除
const deleteEven = () => {
if (tableStore.table.selection.length == 0) {
ElMessage({
type: 'warning',
message: '请选择要删除的定检数据'
})
return
}
ElMessageBox.confirm('此操作将永久删除选中记录, 是否继续?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
// 批量传devId数组
deletePqCheck(tableStore.table.selection.map(item => item.devId)).then(() => {
ElMessage.success('删除成功')
tableStore.index()
})
})
}
// 路由跳转带ID回显编辑复用你原有路由传参逻辑
const props = defineProps({
id: { type: String, default: 'null' }
})
watch(
() => props.id,
async (newVal) => {
if (newVal === 'null') return
const fullId = newVal.split('@')[0]
const routeTime = Number(newVal.split('@')[1])
if (isNaN(routeTime) || Date.now() - routeTime > import.meta.env.VITE_ROUTE_TIME_OUT) return
const res = await getPqCheckById(fullId)
if (res.code === 'A0000') {
}
},
{ immediate: true }
)
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
</script>
<style scoped>
.default-main {
width: 100%;
height: 100%;
}
</style>

View File

@@ -435,6 +435,7 @@ const props = defineProps({
}
})
const emits = defineEmits(['onSubmit'])
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
const dictData = useDictData()
const dialogFormVisible = ref(false)
// .doc,.docx,.xlsx,.xls,.pdf

View File

@@ -104,14 +104,16 @@ const tableStore = new TableStore({
// { field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{ field: 'ratePower', title: '装机容量(MW)', minWidth: 130 },
{ field: 'stationId', title: '所属电站', minWidth: 130 },
{
{ field: 'stationId', title: '电能质量检测报告', minWidth: 130 },
{ field: 'stationId', title: '电能质量评估报告', minWidth: 130 },
/* {
field: 'createBy',
title: '创建人',
minWidth: 80,
formatter: (row: any) => {
return dictData.state.userList.filter(item => item.id == row.cellValue)[0]?.name
}
},
},*/
{
title: '操作',fixed: 'right',
minWidth: 150,

View File

@@ -67,13 +67,13 @@ const tableStore = new TableStore({
column: [
{ field: 'index', title: '序号', width: '80', formatter: (row: any) => { return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1 } },
{ field: 'provinceCompany', title: '地级', minWidth: "150px", },
{ field: 'cityCompany', title: '供电公司', minWidth: "150px", },
{ field: 'provinceCompany', title: '地级', minWidth: "150px", },
/* { field: 'cityCompany', title: '供电公司', minWidth: "150px", },*/
{ field: 'subName', title: '变电站', minWidth: "150px", },
{ field: 'lineScale', title: '电压等级', minWidth: "120px", },
{ field: 'lineName', title: '监测点名称', minWidth: "150px", },
{ field: 'loadType', title: '干扰源类型', minWidth: "150px", },
{ field: 'lineObjectName', title: '监测点对象名称', minWidth: "180px", formatter: (row: any) => { return row.cellValue == null ? '/' : row.cellValue } },
{ field: 'lineName', title: '监测点名称', minWidth: "150px", },
{ field: 'lineScale', title: '电压等级', minWidth: "120px", },
{ field: 'loadType', title: '干扰源类型', minWidth: "150px", },
{ field: 'overDay', title: '超标天数', minWidth: "80px", },
{ field: 'freqOverDay', title: '频率偏差', minWidth: "100px", },
{ field: 'volDevOverDay', title: '电压偏差', minWidth: "100px", },

View File

@@ -159,18 +159,19 @@
</template>
</vxe-column>
<vxe-column field="cit" title="所在地市" minWidth="110px"></vxe-column>
<vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
<vxe-column v-if="!IS_LN" field="company" title="供电公司" minWidth="110px"></vxe-column>
<vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
<vxe-column field="deviceName" title="终端名称" minWidth="130px"></vxe-column>
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
<vxe-column v-if="VITE_FLAG" field="objName" title="监测对象" minWidth="130px"></vxe-column>
<vxe-column
field="lineName"
title="监测点名称"
:formatter="formatter"
minWidth="130px"
></vxe-column>
<vxe-column v-if="VITE_FLAG" field="objName" title="监测对象" minWidth="130px"></vxe-column>
<vxe-column field="runFlag" title="运行状态" width="90px">
<template #default="{ row }">
<el-tag
@@ -211,14 +212,14 @@
<script setup lang="ts">
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { onMounted, provide, ref, watch } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { useDictData } from '@/stores/dictData'
import { mainHeight } from '@/utils/layout'
import MyEchart from '@/components/echarts/MyEchart.vue'
import { getMonitorVerifyDay } from '@/api/device-boot/dataVerify'
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
defineOptions({
name: 'harmonic-boot/harmonic/getIntegrityData'
})

View File

@@ -157,12 +157,12 @@
</template>
</vxe-column>
<vxe-column field="cit" title="所在地市" width="110px"></vxe-column>
<vxe-column field="company" title="供电公司" minWidth="110px"></vxe-column>
<vxe-column field="subStation" title="变电站" minWidth="110px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家" minWidth="110px"></vxe-column>
<vxe-column field="deviceName" title="终端名称" minWidth="130px"></vxe-column>
<vxe-column v-if="!IS_LN" field="company" title="供电公司" minWidth="100px"></vxe-column>
<vxe-column field="subStation" title="变电站" minWidth="100px"></vxe-column>
<vxe-column field="manufacturer" title="终端厂家" minWidth="90px"></vxe-column>
<vxe-column field="deviceName" title="终端名称" minWidth="100px"></vxe-column>
<vxe-column field="ip" title="终端IP" :formatter="formatter" width="120px"></vxe-column>
<vxe-column field="timeID" title="最新数据时间" :formatter="formatter" width="160px"></vxe-column>
<vxe-column field="runFlag" title="运行状态" width="90px">
<template #default="{ row }">
<el-tag
@@ -182,6 +182,19 @@
</el-tag>
</template>
</vxe-column>
<vxe-column field="comFlag" title="通讯状态" width="90px">
<template #default="{ row }">
<el-tag
:type="
row.comFlag == '正常'
? 'success'
: 'danger'
"
>
{{ row.comFlag }}
</el-tag>
</template>
</vxe-column>
<vxe-column field="onlineRate" title="在线率(%)" width="90px"></vxe-column>
</vxe-table>
</div>
@@ -201,16 +214,14 @@
</template>
<script setup lang="ts">
// import '@/assets/font/iconfont.css'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { onMounted, provide, ref } from 'vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import { useDictData } from '@/stores/dictData'
import { mainHeight } from '@/utils/layout'
import MyEchart from '@/components/echarts/MyEchart.vue'
import { getMonitorVerifyDay } from '@/api/device-boot/dataVerify'
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
defineOptions({
name: 'harmonic-boot/harmonic/getIntegrityData'
})

View File

@@ -38,7 +38,7 @@
<el-tab-pane label="告警数据统计" name="5" lazy v-if="!isReload && VITE_FLAG">
<Gaojingshujutongji v-if="activeName == '5'" />
</el-tab-pane>
<el-tab-pane label="监测点运行状态" name="6" lazy v-if="!isReload">
<el-tab-pane label="监测点运行状态" name="6" lazy v-if="!isReload && !VITE_FLAG1 && !IS_LNQR">
<Yunxingzhuangtai v-if="activeName == '6'" />
</el-tab-pane>
<el-tab-pane label="实时数据" name="7" lazy v-if="!isReload && !VITE_FLAG1 && !IS_LNQR">

View File

@@ -14,8 +14,8 @@
<template v-slot:select>
<el-form-item >
<el-radio-group v-model="isStatisticData" @change="onStatisticDataChange">
<el-radio-button value="1">统计数据</el-radio-button>
<el-radio-button value="0">分钟数据</el-radio-button>
<el-radio-button value="0">统计数据</el-radio-button>
<el-radio-button value="1">分钟数据</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item label="模板策略">
@@ -79,7 +79,7 @@ const dotList: any = ref({})
const Template: any = ref({})
const reportForm: any = ref('')
const name = ref('')
const isStatisticData = ref('1')
const isStatisticData = ref('0')
const templatePolicy: any = ref([])
const reportFormList: any = ref([
{
@@ -103,8 +103,8 @@ const tableStore = new TableStore({
tableStore.table.params.tempId = Template.value.id
tableStore.table.params.lineId = dotList.value.id
name.value = dotList.value.name
if (Number(isStatisticData.value) === 0) {
tableStore.table.params.isStatisticData = 0
if (Number(isStatisticData.value) === 1) {
tableStore.table.params.isStatisticData = 1
} else {
delete tableStore.table.params.isStatisticData
}
@@ -163,7 +163,7 @@ const changetype = (val: any) => {
const onStatisticDataChange = () => {
TableHeaderRef.value?.setTheDate(3)
if (dotList.value?.id) {
// tableStore.index()
}
}
const selectChange = () => {

View File

@@ -4,45 +4,46 @@
<template #select>
<el-form-item label="运行状态">
<el-select filterable multiple collapse-tags v-model="tableStore.table.params.runFlag" clearable
placeholder="请选择运行状态">
placeholder="请选择运行状态">
<el-option v-for="item in runFlagList" :key="item.id" :label="item.name"
:value="item.id"></el-option>
:value="item.id"></el-option>
</el-select>
</el-form-item>
<el-form-item label="通讯状态">
<el-select v-model="tableStore.table.params.comFlag" filterable multiple collapse-tags clearable
placeholder="请选择通讯状态">
placeholder="请选择通讯状态">
<el-option v-for="item in communicationstatus" :key="item.value" :label="item.label"
:value="item.value"></el-option>
:value="item.value"></el-option>
</el-select>
</el-form-item>
<el-form-item label="电压等级">
<el-select v-model="tableStore.table.params.scale" filterable multiple collapse-tags clearable
placeholder="请选择电压等级" value-key="id">
placeholder="请选择电压等级" value-key="id">
<el-option v-for="item in voltageleveloption" :key="item.id" :label="item.name"
:value="item"></el-option>
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="终端厂家">
<el-select v-model="tableStore.table.params.manufacturer" filterable multiple collapse-tags
clearable placeholder="请选择终端厂家" value-key="id">
clearable placeholder="请选择终端厂家" value-key="id">
<el-option v-for="item in terminaloption" :key="item.id" :label="item.name"
:value="item"></el-option>
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="干扰源类型">
<el-select v-model="tableStore.table.params.loadType" filterable multiple collapse-tags clearable
placeholder="请选择干扰源类型" value-key="id">
placeholder="请选择干扰源类型" value-key="id">
<el-option v-for="item in interfereoption" :key="item.id" :label="item.name"
:value="item"></el-option>
:value="item"></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据筛选">
<el-input style="width: 240px" placeholder="电站名称,终端编号,监测点名称、电压等级、终端厂家、干扰源类型"
v-model="tableStore.table.params.searchValue" clearable maxlength="32"
show-word-limit></el-input>
<el-input style="width: 240px"
placeholder="电站名称,终端编号,监测点名称、电压等级、终端厂家、干扰源类型"
v-model="tableStore.table.params.searchValue" clearable maxlength="32"
show-word-limit></el-input>
</el-form-item>
</template>
@@ -51,6 +52,9 @@
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 限值查看弹框 -->
<LimitDialog ref="limitDialogRef" />
</div>
</template>
<script setup lang="ts">
@@ -58,14 +62,16 @@ import { ref, onMounted, provide, nextTick, watch } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import LimitDialog from './monitorLimit.vue'
import { useDictData } from '@/stores/dictData'
const dictData = useDictData()
const TableHeaderRef = ref()
const areaOptionList = dictData.getBasicData('jibei_area')
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
const interfereoption = dictData.getBasicData('Interference_Source')
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
const limitDialogRef = ref()
const tableStore = new TableStore({
url: '/device-boot/runManage/getLineLedgerComm',
method: 'POST',
@@ -79,13 +85,22 @@ const tableStore = new TableStore({
}
},
{
field: 'areaName',
title: '省公司',
minWidth: 100
},
{
visible: !IS_LN,
field: 'areaName',
title: '省公司',
minWidth: 100
},
{ field: 'gdName', title: '市公司', minWidth: 150 },
{ visible: IS_LN,
field: 'gdName', title: '市公司', minWidth: 150, formatter: (row: any) => {
if (IS_LN) {
return row.cellValue.replace('国网', '').replace('供电公司', '')
} else {
return row.cellValue
}
}
},
{
field: 'bdName',
title: '所属变电站',
@@ -100,7 +115,7 @@ const tableStore = new TableStore({
}
},
{ field: 'lineName', title: '监测点名称', minWidth: 130 },
{ field: 'scale', title: '监测点电压等级', minWidth: 120 },
{ field: 'scale', title: '监测点电压等级', minWidth: 80 },
{ field: 'loadType', title: '干扰源类型', minWidth: 120 },
@@ -139,52 +154,53 @@ const tableStore = new TableStore({
{
field: 'shortCapacity',
title: '最小短路容量(MVA)',
minWidth: 150
minWidth: 100
},
{
field: 'devCapacity',
title: '供电设备容量(MVA )',
minWidth: 160
minWidth: 100
},
{
field: 'dealCapacity',
title: '用户协议容量(MVA)',
minWidth: 150
minWidth: 100
},
{ field: 'id', title: '监测点序号', minWidth: 90 },
{ field: 'id', title: '监测点序号', minWidth: 70 },
{ field: 'devName', title: '监测终端编号 ', minWidth: 140 },
{ field: 'ptType', title: '监测终端接线方式', minWidth: 140 },
{
field: 'voltageDev',
title: '电压偏差上限(%)',
minWidth: 140
minWidth: 80
},
{
field: 'uvoltageDev',
title: '电压偏差下限(%)',
minWidth: 140
}
minWidth: 80
},
/* {
title: '操作',fixed: 'right',
minWidth: 150,
{
title: '操作',
minWidth: 80,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '流程详情',
title: '查看限值',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
// 打开限值查看弹框
limitDialogRef.value?.open(row)
}
}
]
}*/
}
],
beforeSearchFun: () => {
@@ -209,7 +225,7 @@ tableStore.table.params.loadType = []
const runFlagList = [
{ id: 0, name: '投运' },
{ id: 1, name: '检修' },
{ id: 2, name: '停运' },
{ id: 2, name: '停运' }
]
@@ -224,5 +240,4 @@ onMounted(() => {
})
</script>

View File

@@ -0,0 +1,163 @@
<template>
<el-dialog
v-model="dialogVisible"
title="限值查看"
width="800px"
:close-on-click-modal="false"
destroy-on-close
>
<!-- 基本信息 -->
<div class="basic-info" style="margin-bottom: 20px; padding: 16px; background: #f5f7fa; border-radius: 4px;">
<el-row :gutter="20">
<el-col :span="8">
<div><strong>监测点名称</strong>{{ currentRow?.lineName || '-' }}</div>
</el-col>
<el-col :span="8">
<div><strong>监测对象名称</strong>{{ currentRow?.objName || '-' }}</div>
</el-col>
<el-col :span="8">
<div><strong>所属变电站</strong>{{ currentRow?.bdName || '-' }}</div>
</el-col>
</el-row>
<el-row :gutter="20" style="margin-top: 10px;">
<el-col :span="8">
<div><strong>电压等级</strong>{{ currentRow?.scale || '-' }}</div>
</el-col>
<el-col :span="8">
<div><strong>干扰源类型</strong>{{ currentRow?.loadType || '-' }}</div>
</el-col>
<el-col :span="8">
<div><strong>终端厂家</strong>{{ currentRow?.manufacturer || '-' }}</div>
</el-col>
</el-row>
</div>
<el-tabs v-model="activeTab">
<el-tab-pane label="电能质量限值" name="powerQuality">
<el-table :data="limitData" border style="width: 100%" max-height="400">
<el-table-column prop="name" label="参数名称" width="300" fixed />
<el-table-column prop="value" label="限值" width="300">
<template #default="{ row }">
<span>{{ row.value !== null && row.value !== undefined ? row.value + '%' : '-' }}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="谐波电压限值" name="harmonicVoltage">
<el-table :data="harmonicVoltageData" border style="width: 100%" max-height="400">
<el-table-column prop="harmonic" label="谐波次数" width="300" />
<el-table-column prop="limit" label="限值(%)" width="300">
<template #default="{ row }">
<span>{{ row.limit || '-' }}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="谐波电流限值" name="harmonicCurrent">
<el-table :data="harmonicCurrentData" border style="width: 100%" max-height="400">
<el-table-column prop="harmonic" label="谐波次数" width="300" />
<el-table-column prop="limit" label="限值(%)" width="300">
<template #default="{ row }">
<span>{{ row.limit || '-' }}</span>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
</el-tabs>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false">关闭</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
const dialogVisible = ref(false)
const activeTab = ref('powerQuality')
const currentRow = ref<any>(null)
// 电能质量限值数据
const limitData = ref([
{ name: '频率偏差', value: 0.2 },
{ name: '电压偏差上限', value: null },
{ name: '电压偏差下限', value: null },
{ name: '电压不平衡度', value: 2 },
{ name: '闪变', value: 1 },
{ name: '电压波变', value: 3 },
{ name: '间谐波电压', value: 0.16 },
{ name: '负序电流', value: null },
])
// 谐波电压数据2-25次
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次
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) => {
currentRow.value = row
// 更新电能质量限值数据
limitData.value.forEach(item => {
if (item.name === '电压偏差上限') {
item.value = row.voltageDev !== undefined ? row.voltageDev : null
} else if (item.name === '电压偏差下限') {
item.value = row.uvoltageDev !== undefined ? row.uvoltageDev : null
} else if (item.name === '负序电流') {
item.value = row.ineg !== undefined ? row.ineg : null
}
})
dialogVisible.value = true
}
defineExpose({
open
})
</script>
<style scoped lang="scss">
.dialog-footer {
display: flex;
justify-content: flex-end;
}
</style>

View File

@@ -128,6 +128,7 @@ const classificationData = dictData.getBasicData('Statistical_Type', ['Report_Ty
const voltageleveloption = dictData.getBasicData('Dev_Voltage_Stand')
const terminaloption = dictData.getBasicData('Dev_Manufacturers')
const interfereoption = dictData.getBasicData('Interference_Source')
const IS_LN = import.meta.env.VITE_NAME == 'LN' || import.meta.env.VITE_NAME == 'LNqr'
const communicationstatus = [
{ value: 0, label: '中断' },
@@ -150,8 +151,21 @@ const tableStore = new TableStore({
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'areaName', title: '区域', minWidth: 90 },
{ field: 'gdName', title: '市公司', minWidth: 110 },
{
visible: !IS_LN,
field: 'areaName',
title: '省公司',
minWidth: 100
},
{ visible: IS_LN,
field: 'gdName', title: '市公司', minWidth: 120, formatter: (row: any) => {
if (IS_LN) {
return row.cellValue.replace('国网', '').replace('供电公司', '')
} else {
return row.cellValue
}
}
},
{
field: 'bdName',
title: '变电站',

View File

@@ -85,11 +85,7 @@ const active: any = ref(1)
const evaluationData: any = ref([])
const dictData = useDictData()
const Voltage: any = dictData.getBasicData('Dev_Voltage_Stand').filter(item => {
if (item.code == '35kV' || item.code == '500kV' || item.code == '220kV' || item.code == '110kV') {
return item
}
})
const Voltage: any = dictData.getBasicData('Panoramic_voltage')
const chartRef = ref<HTMLDivElement>()
const url: any = [

View File

@@ -12,15 +12,15 @@
</template>
<div class="text">
<span style="color: #00B07D">无污染0</span>
<span style="color: #00B07D">优秀:(4.5,5]</span>
<br />
<span style="color: #3399ff">轻微污染(0 , 100]</span>
<span style="color: #3399ff">良好:(4,4.5]</span>
<br />
<span style="color: #ffcc33">轻度污染(100 , 1000]</span>
<span style="color: #ffcc33">合格:(3,4]</span>
<br />
<span style="color: #ff9900">中度污染(1000 , 10000]</span>
<span style="color: #ff9900">较差:(2,3]</span>
<br />
<span style="color: #A52a2a">重度污染(10000</span>
<span style="color: #A52a2a">极差:[1,2]</span>
</div>
</el-popover>
</span>