Merge remote-tracking branch 'origin/master'

This commit is contained in:
2024-05-20 09:28:15 +08:00
48 changed files with 8941 additions and 597 deletions

View File

@@ -0,0 +1,43 @@
import createAxios from '@/utils/request'
import { SUPERVISION_BOOT } from '@/utils/constantRequest'
const MAPPING_PATH = SUPERVISION_BOOT + '/tempLine'
/**
* 提交监测点信息表单数据
*/
export const addMointorPointFormData = (data: any) => {
return createAxios({
url: '/supervision-boot/tempLine/add',
method: 'POST',
data: data
})
}
/**
* 查询干扰源列表数据
*/
export const getList = (data: any) => {
return createAxios({
url: '/supervision-boot/userReport/getUserReportList',
method: 'POST',
data: data
})
}
/**
* 根据id获取终端录入的详细数据
*/
export const getTempLineDetailsById = (obj: any) => {
let form = new FormData()
form.append('id', obj.id)
return createAxios({
url:MAPPING_PATH + '/getDetail',
method: 'POST',
data:form
})
}

View File

@@ -0,0 +1,54 @@
import createAxios from '@/utils/request'
import { SUPERVISION_BOOT } from '@/utils/constantRequest'
const MAPPING_PATH = SUPERVISION_BOOT + '/deVReport'
/**
* 提交终端信息表单数据
*/
export const addTerminalFormData = (data: any) => {
return createAxios({
url: '/supervision-boot/deVReport/add',
method: 'POST',
data: data
})
}
/**
* 获取关联设备列表
*/
export const getDeviceList = () => {
return createAxios({
url: '/supervision-boot/deVReport/getDeviceList',
method: 'POST',
})
}
/**
* 获取电站和电压等级
*/
export const getSubstationVoltageLevel = (obj:any) => {
return createAxios({
url: '/device-boot/commTerminal/tagOrIdGetSub',
method: 'POST',
data:obj
})
}
/**
* 根据id获取终端录入的详细数据
*/
export const getTerminalDetailsById = (obj: any) => {
let form = new FormData()
form.append('id', obj.id)
return createAxios({
url:MAPPING_PATH + '/queryDeviceDetail',
method: 'POST',
data:form
})
}

View File

@@ -119,6 +119,21 @@ export const adminBaseRoute = {
title: pageTitle('router.instanceDetail') title: pageTitle('router.instanceDetail')
} }
}, },
{
path: 'ProgramReviewInter',
component: () => import('@/views/pqs/supervise/interfere/components/normalizationManager/programReview.vue'),
name: 'ProgramReview',
meta: {
title: pageTitle('router.programReview')
}
},{
path: 'projectTreatInter',
component: () => import('@/views/pqs/supervise/interfere/components/normalizationManager/projectTreat.vue'),
name: 'projectTreat',
meta: {
title: pageTitle('router.projectTreat')
}
},
// { // {
// path: 'manager/model/edit', // path: 'manager/model/edit',
// component: () => import('@/views/bpm/model/editor/index.vue'), // component: () => import('@/views/bpm/model/editor/index.vue'),
@@ -145,7 +160,32 @@ export const adminBaseRoute = {
// }, // },
] ]
}, /*{
path: '/bpm',
name: 'bpm',
meta: {
hidden: true
}, },
children: [
{
path: 'programReview',
component: () => import('@/views/pqs/supervise/interfere/components/normalizationManager/programReview.vue'),
name: 'programReview',
meta: {
title: pageTitle('router.programReview')
}
},{
path: 'projectTreat',
component: () => import('@/views/pqs/supervise/interfere/components/normalizationManager/projectTreat.vue'),
name: 'projectTreat',
meta: {
title: pageTitle('router.projectTreat')
}
},
]
},*/
] ]
} }

View File

@@ -31,6 +31,10 @@
} }
.el-dialog { .el-dialog {
padding: 0px !important; padding: 0px !important;
// .el-dialog__body{
// max-height: 60vh;
// overflow-y: auto;
// }
} }
.el-dialog__header { .el-dialog__header {
background: var(--el-color-primary); background: var(--el-color-primary);

View File

@@ -22,15 +22,16 @@ const num = ref(0)
const loading = ref(true) const loading = ref(true)
// console.log("🚀 ~ num:", window.location.origin) // console.log("🚀 ~ num:", window.location.origin)
const iframeRef: any = ref(null) const iframeRef: any = ref(null)
const iframeSrc = 'http://www.jibei1.com:8088/#/harmonic-boot/detailedAnalysis/responsibilityqr' // const iframeSrc = 'http://www.jibei1.com:8088/#/harmonic-boot/detailedAnalysis/responsibilityqr'
const iframeSrc = window.location.origin + '/jbv2/#/harmonic-boot/detailedAnalysis/responsibilityqr'
onMounted(() => { onMounted(() => {
iframeRef.value.onload = () => { iframeRef.value.onload = () => {
iframeRef.value.contentWindow.postMessage({ info: window.localStorage.getItem('adminInfo') }, '*') iframeRef.value.contentWindow.postMessage({ info: window.localStorage.getItem('adminInfo') }, '*')
setTimeout(() => { // setTimeout(() => {
num.value++ // num.value++
loading.value = false loading.value = false
}, 0) // }, 0)
} }
}) })
</script> </script>

View File

@@ -0,0 +1,39 @@
<template>
<!-- 完整性 -->
<div class="default-main" :style="height" v-loading="loading">
<iframe
:key="num"
:src="iframeSrc"
id="frame1"
ref="iframeRef"
frameborder="0"
style="width: 100%; height: 100%; border: 0px solid"
/>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref, nextTick } from 'vue'
import { mainHeight } from '@/utils/layout'
defineOptions({
name: 'harmonic-boot/harmonic/getIntegrityData'
})
const height = mainHeight(20)
const num = ref(0)
const loading = ref(true)
// console.log("🚀 ~ num:", window.location.origin)
const iframeRef: any = ref(null)
// const iframeSrc = 'http://www.jibei1.com:8088/#/harmonic-boot/detailedAnalysis/responsibilityqr'
const iframeSrc = window.location.origin + '/jbv2/#/harmonic-boot/harmonic/getIntegrityDataqr'
onMounted(() => {
iframeRef.value.onload = () => {
iframeRef.value.contentWindow.postMessage({ info: window.localStorage.getItem('adminInfo') }, '*')
// setTimeout(() => {
// num.value++
loading.value = false
// }, 0)
}
})
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,39 @@
<template>
<!-- 在线率 -->
<div class="default-main" :style="height" v-loading="loading">
<iframe
:key="num"
:src="iframeSrc"
id="frame1"
ref="iframeRef"
frameborder="0"
style="width: 100%; height: 100%; border: 0px solid"
/>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref, nextTick } from 'vue'
import { mainHeight } from '@/utils/layout'
defineOptions({
name: 'harmonic-boot/area/OnlineRate'
})
const height = mainHeight(20)
const num = ref(0)
const loading = ref(true)
// console.log("🚀 ~ num:", window.location.origin)
const iframeRef: any = ref(null)
// const iframeSrc = 'http://www.jibei1.com:8088/#/harmonic-boot/detailedAnalysis/responsibilityqr'
const iframeSrc = window.location.origin + '/jbv2/#/harmonic-boot/area/OnlineRateqr'
onMounted(() => {
iframeRef.value.onload = () => {
iframeRef.value.contentWindow.postMessage({ info: window.localStorage.getItem('adminInfo') }, '*')
// setTimeout(() => {
// num.value++
loading.value = false
// }, 0)
}
})
</script>
<style lang="scss" scoped></style>

View File

@@ -1,9 +1,9 @@
<!-- 稳态 --> <!-- 稳态 -->
<template> <template>
<!-- 终端 --> <!-- 终端 -->
<el-dialog draggable title="稳态指标超标占比统计" v-model="dialogVisible" width="1400px"> <el-dialog draggable title="稳态指标超标占比统计" v-model="dialogVisible" width="800">
<el-row style="height: 330px" :gutter="20"> <el-row style="height: 330px" :gutter="20">
<el-col :span="12"> <el-col :span="23">
<div class="title"> <div class="title">
<span>稳态指标超标占比</span> <span>稳态指标超标占比</span>
</div> </div>
@@ -37,14 +37,14 @@
</el-row> </el-row>
</div> </div>
</el-col> </el-col>
<el-col :span="12"> <!-- <el-col :span="12">
<!-- <div class="title"> <div class="title">
<span>稳态电能质量水平评估环比变化</span> <span>稳态电能质量水平评估环比变化</span>
</div> </div>
<div class="pie"> <div class="pie">
<div style="height: 260px; width: 100%" ref="chartRef"></div> <div style="height: 260px; width: 100%" ref="chartRef"></div>
</div> --> </div>
</el-col> </el-col> -->
</el-row> </el-row>
</el-dialog> </el-dialog>
</template> </template>

View File

@@ -1,6 +1,6 @@
<template> <template>
<!-- 综合评估详情 --> <!-- 综合评估详情 -->
<el-dialog draggable title="指标合格率统计统计" v-model="dialogVisible" width="1400px"> <el-dialog draggable title="指标合格率统计" v-model="dialogVisible" width="1400px">
<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="substationName" title="变电站名称" />

View File

@@ -74,29 +74,29 @@
<el-col :span="11" class="col pt10"> <el-col :span="11" class="col pt10">
<div> <div>
<span>异常问题总数</span> <span>异常问题总数</span>
<span style="color: #2dcd28">60</span> <span style="color: #2dcd28">0</span>
</div> </div>
<div> <div>
<span style="width: 120px">已关联工单数</span> <span style="width: 120px">已关联工单数</span>
<span style="color: #81b337">60</span> <span style="color: #81b337">0</span>
</div> </div>
<div> <div>
<span style="width: 120px"> 工单转换率</span> <span style="width: 120px"> 工单转换率</span>
<span style="color: #338dff">60%</span> <span style="color: #338dff">0%</span>
</div> </div>
</el-col> </el-col>
<el-col :span="11" class="col pt10" :offset="0.5"> <el-col :span="11" class="col pt10" :offset="0.5">
<div> <div>
<span>异常问题总数</span> <span>异常问题总数</span>
<span style="color: #2dcd28">60</span> <span style="color: #2dcd28">0</span>
</div> </div>
<div> <div>
<span style="width: 120px">已关联工单数</span> <span style="width: 120px">已关联工单数</span>
<span style="color: #81b337">60</span> <span style="color: #81b337">0</span>
</div> </div>
<div> <div>
<span style="width: 120px"> 工单转换率</span> <span style="width: 120px"> 工单转换率</span>
<span style="color: #338dff">60%</span> <span style="color: #338dff">0%</span>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@@ -518,6 +518,7 @@ defineExpose({ info, show })
grid-template-columns: 1fr; grid-template-columns: 1fr;
border-radius: 10px; border-radius: 10px;
text-align: center; text-align: center;
align-items: center;
background-color: #edededc0; background-color: #edededc0;
} }
.imgR { .imgR {

View File

@@ -132,7 +132,7 @@ const contaminateC = () => {
a5++ a5++
} }
} }
console.log('🚀 ~ getPollutionAlarmData ~ a1 / data.length:', a1 / data.length) // console.log('🚀 ~ getPollutionAlarmData ~ a1 / data.length:', a1 / data.length)
let list = [ let list = [
{ {

View File

@@ -33,8 +33,12 @@
数据质量 数据质量
</h3> </h3>
<div style="display: flex"> <div style="display: flex">
<MyEChart :style="`height: calc(${rowHeight} - 31px)`" :options="ComCharts" /> <MyEChart :style="`height: calc(${rowHeight} - 31px)`" :options="ComCharts" @click="Integrity" />
<MyEChart :style="`height: calc(${rowHeight} - 31px)`" :options="onLineCharts" /> <MyEChart
:style="`height: calc(${rowHeight} - 31px)`"
:options="onLineCharts"
@click="OnlineRate"
/>
</div> </div>
</el-col> </el-col>
<el-col :span="8"> <el-col :span="8">
@@ -109,7 +113,8 @@ import { color } from '@/components/echarts/color'
import DatePicker from '@/components/form/datePicker/index.vue' import DatePicker from '@/components/form/datePicker/index.vue'
import MyEChart from '@/components/echarts/MyEchart.vue' import MyEChart from '@/components/echarts/MyEchart.vue'
import echarts from '@/components/echarts/echarts' import echarts from '@/components/echarts/echarts'
import { useRouter } from 'vue-router'
const router = useRouter()
import { getLineDetailData } from '@/api/advance-boot/bearingCapacity' import { getLineDetailData } from '@/api/advance-boot/bearingCapacity'
import { import {
getTotalIntegrityByLineIds, getTotalIntegrityByLineIds,
@@ -565,6 +570,16 @@ const echart = (row: any) => {
chart.setOption(option) chart.setOption(option)
} }
// 跳转
const Integrity = () => {
router.push({
name:'harmonic-boot/harmonic/getIntegrityData'
})
}
const OnlineRate = () => {
router.push({
name:'harmonic-boot/area/OnlineRate'})
}
onMounted(() => { onMounted(() => {
// open('4c87b7dff2281254fc55c25a4da31506') // open('4c87b7dff2281254fc55c25a4da31506')

View File

@@ -63,9 +63,10 @@ function initMap(styleurl: any) {
localIdeographFontFamily: 'Microsoft YoHei' localIdeographFontFamily: 'Microsoft YoHei'
}) })
map.value.on('load', () => { map.value.on('load', () => {
addLayer()
nextTick(() => { nextTick(() => {
// 添加图层 // 添加图层
addLayer()
Query() Query()
}) })
@@ -223,7 +224,7 @@ const addLayer = () => {
} }
}) })
map.value.addLayer({ map.value.addLayer({
id: 'spotName-ZY', id: 'spotName',
type: 'symbol', type: 'symbol',
minzoom: 10, minzoom: 10,
source: { source: {
@@ -238,7 +239,7 @@ const addLayer = () => {
'text-field': '{name}', 'text-field': '{name}',
'icon-ignore-placement': true, 'icon-ignore-placement': true,
'text-ignore-placement': false, 'text-ignore-placement': true,
'text-size': 12, 'text-size': 12,
'text-max-width': 8, 'text-max-width': 8,
'text-offset': [0, 2], 'text-offset': [0, 2],
@@ -252,6 +253,7 @@ const addLayer = () => {
}) })
} }
) )
map.value.loadImage( map.value.loadImage(
new URL('@/assets/txzdwzj.png', import.meta.url).href, // 图片地址 new URL('@/assets/txzdwzj.png', import.meta.url).href, // 图片地址
(error: any, image: any) => { (error: any, image: any) => {
@@ -290,13 +292,21 @@ const addLayer = () => {
// 'text-halo-width': 1.33333 // 'text-halo-width': 1.33333
// } // }
}) })
}
)
map.value.loadImage(
new URL('@/assets/point.png', import.meta.url).href, // 图片地址
(error: any, image: any) => {
if (error) throw error
//添加图片到map第一个参数为图片设置id
map.value.addImage('poi3', image)
map.value.addLayer({ map.value.addLayer({
id: 'spotName-TY', id: 'spotImg-GJ',
type: 'symbol', type: 'symbol',
minzoom: 8, minzoom: 8,
source: { source: {
type: 'geojson', type: 'geojson',
data: { data: {
type: 'FeatureCollection', type: 'FeatureCollection',
features: [] features: []
@@ -304,20 +314,13 @@ const addLayer = () => {
}, },
layout: { layout: {
// 为图层设置引用的图片ID // 为图层设置引用的图片ID
// 'icon-image': 'poi2', 'icon-image': 'poi3',
// 'icon-size': 0.7, 'icon-size': 0.6,
'text-field': '{name}',
'icon-ignore-placement': true, 'icon-ignore-placement': true,
'text-ignore-placement': false, 'icon-allow-overlap': true
'text-size': 12,
'text-max-width': 8,
'text-offset': [0, 2],
'text-font': ['Microsoft YaHei Regular']
}, },
paint: { Paint: {
'text-color': '#ccc', 'icon-opacity': 10
// 'text-halo-color': '#FFFFFF',
'text-halo-width': 1.33333
} }
}) })
} }
@@ -325,7 +328,7 @@ const addLayer = () => {
// 添加地图弹框 // 添加地图弹框
map.value.on('click', (e: any) => { map.value.on('click', (e: any) => {
const features = map.value.queryRenderedFeatures(e.point, { const features = map.value.queryRenderedFeatures(e.point, {
layers: ['spotImg-ZY', 'spotImg-TY'] layers: ['spotImg-ZY', 'spotImg-TY', 'spotImg-GJ']
}) })
if (features.length > 0) { if (features.length > 0) {
@@ -383,7 +386,9 @@ const addLayer = () => {
}) })
} }
//添加多个监测点 //添加多个监测点
const addMarkers = async (row?: any) => { const addMarkers = async (row?: any, key?: any) => {
console.log('🚀 ~ addMarkers ~ key:', key)
if (map.value == null) return
let params = { let params = {
deptIndex: deptIndex.value, deptIndex: deptIndex.value,
monitorFlag: 2, monitorFlag: 2,
@@ -426,7 +431,17 @@ const addMarkers = async (row?: any) => {
list: val list: val
} }
} }
if (key == 0) {
switch (val.type) {
case 0:
tempFeatureZ.push(tempFeature)
break
case 1:
tempFeatureT.push(tempFeature)
break
}
} else {
switch (val.comFlag) { switch (val.comFlag) {
case 0: case 0:
tempFeatureT.push(tempFeature) tempFeatureT.push(tempFeature)
@@ -435,6 +450,7 @@ const addMarkers = async (row?: any) => {
tempFeatureZ.push(tempFeature) tempFeatureZ.push(tempFeature)
break break
} }
}
}) })
}) })
@@ -442,17 +458,33 @@ const addMarkers = async (row?: any) => {
type: 'FeatureCollection', type: 'FeatureCollection',
features: tempFeatureZ features: tempFeatureZ
}) })
map.value.getSource('spotName-ZY').setData({
map.value.setLayerZoomRange('spotImg-GJ', key != undefined ? 0 : 8)
map.value.setLayerZoomRange('spotImg-TY', key != undefined ? 0 : 8)
map.value.setLayerZoomRange('spotImg-ZY', key != undefined ? 0 : 8)
if (key == 0) {
map.value.getSource('spotImg-GJ').setData({
type: 'FeatureCollection', type: 'FeatureCollection',
features: tempFeatureZ features: tempFeatureT
})
map.value.getSource('spotImg-TY').setData({
type: 'FeatureCollection',
features: []
})
} else {
map.value.getSource('spotImg-GJ').setData({
type: 'FeatureCollection',
features: []
}) })
map.value.getSource('spotImg-TY').setData({ map.value.getSource('spotImg-TY').setData({
type: 'FeatureCollection', type: 'FeatureCollection',
features: tempFeatureT features: tempFeatureT
}) })
map.value.getSource('spotName-TY').setData({ }
map.value.getSource('spotName').setData({
type: 'FeatureCollection', type: 'FeatureCollection',
features: tempFeatureT features: [...tempFeatureT, ...tempFeatureZ]
}) })
} }
@@ -521,7 +553,7 @@ const height = mainHeight(20)
:deep(.query-box-wrap) { :deep(.query-box-wrap) {
position: absolute; position: absolute;
top: 10px; top: 10px;
left: calc(50% - 295px); left: calc(50% - 345px);
.query-box { .query-box {
border-radius: 8px 0 0 8px; border-radius: 8px 0 0 8px;
} }
@@ -530,7 +562,7 @@ const height = mainHeight(20)
position: absolute; position: absolute;
top: 10px; top: 10px;
border-radius: 0 8px 8px 0; border-radius: 0 8px 8px 0;
left: calc(50% + 35px); left: calc(50% - 15px);
z-index: 0 !important; z-index: 0 !important;
} }

View File

@@ -22,7 +22,7 @@
{{ item.titleT[0] }} {{ item.titleT[0] }}
<span <span
:style="`color: ${item.color[0]}; cursor: pointer;`" :style="`color: ${item.color[0]}; cursor: pointer;`"
@click="LookMap(item.list[4].numOneList, 0)" @click="LookMap(item.list[4].numOneList, item.list[4].numTwoList, i)"
> >
{{ item.list[4].numOne }} {{ item.list[4].numOne }}
</span> </span>
@@ -32,7 +32,7 @@
{{ item.titleT[1] }} {{ item.titleT[1] }}
<span <span
:style="`color: ${item.color[1]}; cursor: pointer;`" :style="`color: ${item.color[1]}; cursor: pointer;`"
@click="LookMap(item.list[4].numTwoList, 1)" @click="LookMap([], item.list[4].numTwoList, i)"
> >
{{ item.list[4].numTwo }} {{ item.list[4].numTwo }}
</span> </span>
@@ -46,11 +46,11 @@
<span class="vol">500kV</span> <span class="vol">500kV</span>
</div> </div>
<div class="num"> <div class="num">
<div @click="LookMap(item.list[0].numOneList, 0)"> <div @click="LookMap(item.list[0].numOneList, item.list[0].numTwoList, i)">
{{ item.titleT[0] }}: {{ item.titleT[0] }}:
<span :style="`color: ${item.color[0]}`">{{ item.list[0].numOne }}</span> <span :style="`color: ${item.color[0]}`">{{ item.list[0].numOne }}</span>
</div> </div>
<div @click="LookMap(item.list[0].numTwoList, 1)"> <div @click="LookMap([], item.list[0].numTwoList, i)">
{{ item.titleT[1] }}: {{ item.titleT[1] }}:
<span :style="`color: ${item.color[1]}`">{{ item.list[0].numTwo }}</span> <span :style="`color: ${item.color[1]}`">{{ item.list[0].numTwo }}</span>
</div> </div>
@@ -62,11 +62,11 @@
<span class="vol">220kV</span> <span class="vol">220kV</span>
</div> </div>
<div class="num"> <div class="num">
<div @click="LookMap(item.list[1].numOneList, 0)"> <div @click="LookMap(item.list[1].numOneList, item.list[1].numTwoList, i)">
{{ item.titleT[0] }}: {{ item.titleT[0] }}:
<span :style="`color: ${item.color[0]}`">{{ item.list[1].numOne }}</span> <span :style="`color: ${item.color[0]}`">{{ item.list[1].numOne }}</span>
</div> </div>
<div @click="LookMap(item.list[1].numTwoList, 1)"> <div @click="LookMap([], item.list[1].numTwoList, i)">
{{ item.titleT[1] }}: {{ item.titleT[1] }}:
<span :style="`color: ${item.color[1]}`">{{ item.list[1].numTwo }}</span> <span :style="`color: ${item.color[1]}`">{{ item.list[1].numTwo }}</span>
</div> </div>
@@ -78,11 +78,11 @@
<span class="vol">110kV</span> <span class="vol">110kV</span>
</div> </div>
<div class="num"> <div class="num">
<div @click="LookMap(item.list[2].numOneList, 0)"> <div @click="LookMap(item.list[2].numOneList, item.list[2].numTwoList, i)">
{{ item.titleT[0] }}: {{ item.titleT[0] }}:
<span :style="`color: ${item.color[0]}`">{{ item.list[2].numOne }}</span> <span :style="`color: ${item.color[0]}`">{{ item.list[2].numOne }}</span>
</div> </div>
<div @click="LookMap(item.list[2].numTwoList, 1)"> <div @click="LookMap([], item.list[2].numTwoList, i)">
{{ item.titleT[1] }}: {{ item.titleT[1] }}:
<span :style="`color: ${item.color[1]}`">{{ item.list[2].numTwo }}</span> <span :style="`color: ${item.color[1]}`">{{ item.list[2].numTwo }}</span>
</div> </div>
@@ -91,14 +91,14 @@
<div class="card-Box"> <div class="card-Box">
<div> <div>
<span class="line"></span> <span class="line"></span>
<span class="vol">350kV</span> <span class="vol">35kV</span>
</div> </div>
<div class="num"> <div class="num">
<div @click="LookMap(item.list[3].numOneList, 0)"> <div @click="LookMap(item.list[3].numOneList, item.list[3].numTwoList, i)">
{{ item.titleT[0] }}: {{ item.titleT[0] }}:
<span :style="`color: ${item.color[0]}`">{{ item.list[3].numOne }}</span> <span :style="`color: ${item.color[0]}`">{{ item.list[3].numOne }}</span>
</div> </div>
<div @click="LookMap(item.list[3].numTwoList, 1)"> <div @click="LookMap([], item.list[3].numTwoList, i)">
{{ item.titleT[1] }}: {{ item.titleT[1] }}:
<span :style="`color: ${item.color[1]}`">{{ item.list[3].numTwo }}</span> <span :style="`color: ${item.color[1]}`">{{ item.list[3].numTwo }}</span>
</div> </div>
@@ -298,19 +298,21 @@ const info = (row: any) => {
list.value[2].list = data[0].data.map((item: any) => { list.value[2].list = data[0].data.map((item: any) => {
return { return {
numOne: item.num, numOne: item.num,
numTwo: item.onLineNum numTwo: item.onLineNum,
numOneList: item.numList,
numTwoList: item.onLineNumList
} }
}) })
}) })
} }
// 点击 // 点击
const LookMap = (row: object, num: number) => { const LookMap = (coutList: object, alarmList: object, key?: any) => {
console.log('🚀 ~ LookMap ~ row:', row) // console.log('🚀 ~ LookMap ~ row:', row)
let form = { let form = {
coutList: num == 0 ? row : [], coutList: coutList,
alarmList: num == 1 ? row : [] alarmList: alarmList
} }
emit('LookMap', form) emit('LookMap', form, key)
} }
onMounted(() => {}) onMounted(() => {})
defineExpose({ info, show }) defineExpose({ info, show })

View File

@@ -163,29 +163,29 @@
<el-col :span="11" class="col pt10"> <el-col :span="11" class="col pt10">
<div> <div>
<span>异常问题总数</span> <span>异常问题总数</span>
<span style="color: #2dcd28">60</span> <span style="color: #2dcd28">0</span>
</div> </div>
<div> <div>
<span style="width: 120px">已关联工单数</span> <span style="width: 120px">已关联工单数</span>
<span style="color: #81b337">60</span> <span style="color: #81b337">0</span>
</div> </div>
<div> <div>
<span style="width: 120px"> 工单转换率</span> <span style="width: 120px"> 工单转换率</span>
<span style="color: #338dff">60%</span> <span style="color: #338dff">0%</span>
</div> </div>
</el-col> </el-col>
<el-col :span="11" class="col pt10" :offset="0.5"> <el-col :span="11" class="col pt10" :offset="0.5">
<div> <div>
<span>异常问题总数</span> <span>异常问题总数</span>
<span style="color: #2dcd28">60</span> <span style="color: #2dcd28">0</span>
</div> </div>
<div> <div>
<span style="width: 120px">已关联工单数</span> <span style="width: 120px">已关联工单数</span>
<span style="color: #81b337">60</span> <span style="color: #81b337">0</span>
</div> </div>
<div> <div>
<span style="width: 120px"> 工单转换率</span> <span style="width: 120px"> 工单转换率</span>
<span style="color: #338dff">60%</span> <span style="color: #338dff">0%</span>
</div> </div>
</el-col> </el-col>
</el-row> </el-row>
@@ -267,19 +267,19 @@ const assessList: any = ref([])
const JDlist = ref([ const JDlist = ref([
{ {
name: '技术监督计划', name: '技术监督计划',
value: 5 value: 0
}, },
{ {
name: '在线监测', name: '在线监测',
value: 5 value: 0
}, },
{ {
name: '用户投诉', name: '用户投诉',
value: 5 value: 0
}, },
{ {
name: '谐波普测', name: '谐波普测',
value: 5 value: 0
} }
]) ])
const harmonicList: any = ref([]) const harmonicList: any = ref([])
@@ -525,6 +525,7 @@ defineExpose({ info, show })
grid-template-columns: 1fr; grid-template-columns: 1fr;
border-radius: 10px; border-radius: 10px;
text-align: center; text-align: center;
align-items: center;
background-color: #edededc0; background-color: #edededc0;
} }
.imgR { .imgR {

View File

@@ -17,9 +17,11 @@
<el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" /> <el-option v-for="item in options" :key="item.id" :label="item.name" :value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<!-- <el-form-item> <el-form-item>
<el-button icon="el-icon-Refresh" @click="reset"></el-button> <div class="Icon" @click="reset">
</el-form-item> --> <Icon name="fa fa-refresh" />
</div>
</el-form-item>
</el-form> </el-form>
</div> </div>
@@ -115,8 +117,8 @@ const infoShow = (e: boolean) => {
cityMapRRef.value.show = e cityMapRRef.value.show = e
} }
// 地图控制图层 // 地图控制图层
const LookMap = (row: any) => { const LookMap = (row: any, key?: any) => {
// mapRef.value.addMarkers({ ...row, type: 1 }) // mapRef.value.addMarkers({ ...row, type: 1 }, key)
} }
const info = () => { const info = () => {
form.value.startTime = datePickerRef.value.timeValue[0] form.value.startTime = datePickerRef.value.timeValue[0]
@@ -137,6 +139,15 @@ const info = () => {
cityMapLRef.value.info(form.value) cityMapLRef.value.info(form.value)
} }
} }
// 重置
const reset = () => {
form.value = {
name: '',
orgNo: dictData.state.area[0].id,
isUpToGrid: 0
}
changeValue({ data: dictData.state.area[0] })
}
onMounted(() => { onMounted(() => {
// info() // info()
changeValue({ data: dictData.state.area[0] }) changeValue({ data: dictData.state.area[0] })
@@ -148,7 +159,7 @@ onMounted(() => {
:deep(.mapBox) { :deep(.mapBox) {
position: absolute; position: absolute;
top: 10px; top: 10px;
left: calc(50% + 95px); left: calc(50% + 45px);
z-index: 1; z-index: 1;
.el-select { .el-select {
@@ -159,6 +170,18 @@ onMounted(() => {
border-radius: 8px; border-radius: 8px;
} }
} }
.Icon {
height: 46px;
width: 46px;
background-color: #fff;
border-radius: 8px;
text-align: center;
line-height: 50px;
cursor: pointer;
.fa-refresh {
color: var(--el-color-primary) !important;
}
}
.el-input__wrapper { .el-input__wrapper {
height: 46px; height: 46px;
border-radius: 8px; border-radius: 8px;

View File

@@ -0,0 +1,99 @@
<template>
<!-- 2 有新增 发起 预警单 -->
<TableHeader area datePicker ref="TableHeaderRef">
<template v-slot:operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 新增 -->
<complaintsForm ref="formRef" />
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } 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 complaintsForm from './form/complaintsForm.vue'
// Steady_Statis
const dictData = useDictData()
const exceeded = dictData.getBasicData('Steady_Statis')
const tableRef = ref()
const planAddRef = ref()
const formRef = ref()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/generalSurvey/getSurvey',
publicHeight: 65,
method: 'POST',
column: [
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'userName', title: '用户名称' },
{ field: 'userId', title: '用户编号' },
{ field: 'complaintContent', title: '投诉内容' },
{ field: 'complaintTime', title: '投诉时间' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
buttons: [
{
name: 'edit',
title: '发起预警单',
type: 'primary',
icon: 'el-icon-Open',
render: 'confirmButton',
popconfirm: {
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonType: 'primary',
title: '请确认发起发起预警单!'
},
click: row => {}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [
{
userName: '东润开阳堡光伏电站用户',
userId: '8115771123274',
complaintContent: '装置频繁重启',
complaintTime: '2024-05-16'
}
]
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
// 新增
const add = () => {
formRef.value.open({ text: '新增投诉' })
}
</script>
<style scoped lang="scss"></style>

View File

@@ -0,0 +1,104 @@
<template>
<el-dialog draggable v-model="dialogVisible" :title="title" style="width: 1100px" :before-close="handleClose">
<el-form :model="userAdddata" :inline="true" ref="userAddRef" :rules="rules">
<el-form-item label="用户名称:" prop="userName">
<el-input v-model="userAdddata.userName" clearable placeholder="请输入用户名称"></el-input>
</el-form-item>
<el-form-item label="用户编号:" prop="userNo">
<el-input v-model="userAdddata.userNo" clearable placeholder="请输入用户编号"></el-input>
</el-form-item>
<el-form-item label="投诉内容:" style="margin-top: 10px" prop="complaintContent">
<el-input
type="textarea"
style="width: 400px"
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请输入内容"
v-model="userAdddata.complaintContent"
></el-input>
</el-form-item>
<br />
<el-form-item label="投诉时间:" style="margin-top: 10px" prop="complaintTime">
<el-date-picker
v-model="userAdddata.complaintTime"
type="date"
placeholder="选择日期"
value-format="YYYY-MM-DD"
></el-date-picker>
</el-form-item>
<el-form-item label="稳态指标:" prop="steadyState">
<el-checkbox-group v-model="userAdddata.steadyState">
<el-checkbox v-for="(item, ind) in steadyStateList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="暂态指标:" prop="transientIndicators">
<el-checkbox-group v-model="userAdddata.transientIndicators">
<el-checkbox v-for="(item, ind) in transientIndicatorsList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useDictData } from '@/stores/dictData'
const emit = defineEmits(['onsubmit'])
const dictData = useDictData()
const dialogVisible = ref(false)
const title: any = ref('')
const steadyStateList = dictData.getBasicData('Steady_Indicator')
const transientIndicatorsList = dictData.getBasicData('Transient_Indicators')
const userAdddata = ref({
complaintContent: '',
complaintTime: '',
steadyState: [],
userName: '',
userNo: '',
transientIndicators: []
})
const rules = {
problemName: [{ required: true, message: '请输入问题名称', trigger: 'blur' }],
userName: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
userNo: [{ required: true, message: '请输入用户编号', trigger: 'blur' }],
complaintContent: [{ required: true, message: '请输入投诉内容', trigger: 'blur' }],
complaintTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
problemSources: [{ required: true, message: '情选择问题来源', trigger: 'change' }],
abnormalDevTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
transientIndicators: [{ required: true, message: '请选择暂态指标', trigger: 'change' }],
steadyState: [{ required: true, message: '请选择稳态指标', trigger: 'change' }],
eventDescription: [{ required: true, message: '请输入设备异常描述', trigger: 'blur' }],
abnormalDevName: [{ required: true, message: '请输入问题名称', trigger: 'blur' }]
}
const submit = () => {
handleClose()
}
const open = (row: any) => {
dialogVisible.value = true
title.value = row.text
}
const handleClose = () => {
dialogVisible.value = false
}
defineExpose({ open })
</script>
<style lang="scss" scoped>
:deep(.el-upload-list__item) {
width: 400px;
}
</style>

View File

@@ -0,0 +1,131 @@
<template>
<el-dialog draggable v-model="dialogVisible" :title="title" style="width: 1100px" :before-close="handleClose">
<el-form :model="ordinaryA" :inline="true" class="form">
<el-form-item>
<Area v-model="ordinaryA.orgNo"></Area>
</el-form-item>
<el-form-item label="普测结果上传时间">
<el-date-picker
v-model="ordinaryA.planStartTime"
type="month"
format="YYYY-MM"
value-format="YYYY-MM-DD"
placeholder="选择月"
@change="queryPlanName"
></el-date-picker>
</el-form-item>
<el-form-item label="普测计划名称">
<el-select v-model="ordinaryA.planName" clearable placeholder="请选择">
<el-option
v-for="item in planNameList"
:key="item.planName"
:label="item.planName"
:value="item.planName"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-Search" @click="searchFnExcessive">查询</el-button>
</el-form-item>
</el-form>
<vxe-table v-bind="defaultAttribute" height="350" ref="xTable2Ref" :data="ordinaryAddData">
<vxe-column type="radio" width="60"></vxe-column>
<vxe-column field="subName" title="变电站名称"></vxe-column>
<vxe-column field="voltageLevelName" title="变电站电压等级"></vxe-column>
</vxe-table>
<el-form :model="ordinaryA" :rules="rules" ref="ordinaryARef" label-width="auto" :inline="true" class="form">
<el-form-item label="稳态指标" prop="steadyState">
<el-checkbox-group v-model="ordinaryA.steadyState">
<el-checkbox v-for="(item, ind) in steadyStateList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="暂态指标" prop="transientIndicators">
<el-checkbox-group v-model="ordinaryA.transientIndicators">
<el-checkbox v-for="(item, ind) in transientIndicatorsList" :key="ind" :label="item.code">
{{ item.name }}
</el-checkbox>
</el-checkbox-group>
</el-form-item>
<br />
<el-form-item label="上传附件">
<el-upload
ref="upload"
action=""
:auto-upload="false"
:show-file-list="false"
:limit="1"
:on-change="beforeUpload"
>
<el-button icon="el-icon-Upload" type="primary" class="mr10">上传</el-button>
</el-upload>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="handleClose">取消</el-button>
<el-button type="primary" @click="submit">确认</el-button>
</span>
</template>
</el-dialog>
</template>
<script setup lang="ts">
import { ref } from 'vue'
import { useDictData } from '@/stores/dictData'
const emit = defineEmits(['onsubmit'])
const dictData = useDictData()
const dialogVisible = ref(false)
const title: any = ref('')
const steadyStateList = dictData.getBasicData('Steady_Indicator')
const transientIndicatorsList = dictData.getBasicData('Transient_Indicators')
const ordinaryA = ref({
orgNo: '',
orgName: '',
planName: '',
planStartTime: '',
uploadTime: '',
name: '',
steadyState: [],
transientIndicators: []
})
const defaultAttribute = ref([])
const rules = {
problemName: [{ required: true, message: '请输入问题名称', trigger: 'blur' }],
userName: [{ required: true, message: '请输入用户名称', trigger: 'blur' }],
userNo: [{ required: true, message: '请输入用户编号', trigger: 'blur' }],
complaintContent: [{ required: true, message: '请输入投诉内容', trigger: 'blur' }],
complaintTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
problemSources: [{ required: true, message: '情选择问题来源', trigger: 'change' }],
abnormalDevTime: [{ required: true, message: '请选择时间', trigger: 'change' }],
transientIndicators: [{ required: true, message: '请选择暂态指标', trigger: 'change' }],
steadyState: [{ required: true, message: '请选择稳态指标', trigger: 'change' }],
eventDescription: [{ required: true, message: '请输入设备异常描述', trigger: 'blur' }],
abnormalDevName: [{ required: true, message: '请输入问题名称', trigger: 'blur' }]
}
const submit = () => {
handleClose()
}
const open = (row: any) => {
dialogVisible.value = true
title.value = row.text
}
const handleClose = () => {
dialogVisible.value = false
}
const beforeUpload = () => {}
defineExpose({ open })
</script>
<style lang="scss" scoped>
:deep(.el-upload-list__item) {
width: 400px;
}
</style>

View File

@@ -0,0 +1,135 @@
<template>
<!-- <div>1 监测点信息 发起预告警单 </div> -->
<TableHeader area datePicker ref="TableHeaderRef">
<template v-slot:select>
<el-form-item label="超标指标">
<el-select
v-model="tableStore.table.params.evaluateType"
multiple
collapse-tags
clearable
placeholder="请选择评估类型"
>
<el-option v-for="item in exceeded" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</template>
</TableHeader>
<Table ref="tableRef" />
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } 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'
// Steady_Statis
const dictData = useDictData()
const exceeded = dictData.getBasicData('Steady_Statis')
const tableRef = ref()
const planAddRef = ref()
const listFormRef = ref()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/generalSurvey/getSurvey',
publicHeight: 65,
method: 'POST',
column: [
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'orgName', title: '区域' },
{ field: 'subName', title: '变电站' },
{ field: 'lineName', title: '监测点名称' },
{ field: 'voltageScale', title: '电压等级' },
{ field: 'overDay', title: '总超标天数' },
{ field: 'overDays', title: '连续超标天数' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
fixed: 'right',
buttons: [
{
name: 'productSetting',
title: '发起告警单',
type: 'warning',
disabled: row => {
return row.overDays <= 15
},
icon: 'el-icon-EditPen',
render: 'confirmButton',
popconfirm: {
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonType: 'primary',
title: '请确认发起告警单!'
},
click: row => {}
},
{
name: 'edit',
title: '发起预警单',
type: 'primary',
icon: 'el-icon-Open',
disabled: row => {
return row.overDays > 15
},
render: 'confirmButton',
popconfirm: {
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonType: 'primary',
title: '请确认发起发起预警单!'
},
click: row => {}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [
{
orgName: '张家口',
subName: '110kV马头山风电场',
lineName: '111口头线',
voltageScale: '110kV',
overDay: '20',
overDays: '10'
},
{
orgName: '张家口',
subName: '110kV韩家庄风电场',
lineName: '111缘韩一线',
voltageScale: '110kV',
overDay: '20',
overDays: '16'
}
]
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
</script>
<style scoped lang="scss"></style>

View File

@@ -0,0 +1,125 @@
<template>
<!-- <div> 普测结果 发起预告警单</div> -->
<TableHeader area datePicker ref="TableHeaderRef">
<!-- <template v-slot:select>
<el-form-item label="超标指标">
<el-select
v-model="tableStore.table.params.evaluateType"
multiple
collapse-tags
clearable
placeholder="请选择评估类型"
>
<el-option v-for="item in exceeded" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
</el-form-item>
</template> -->
<template v-slot:operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<testQuestionsForm ref="testQuestionsFormRef" />
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } 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 testQuestionsForm from './form/testQuestionsForm.vue'
// Steady_Statis
const dictData = useDictData()
const exceeded = dictData.getBasicData('Steady_Statis')
const tableRef = ref()
const planAddRef = ref()
const listFormRef = ref()
const TableHeaderRef = ref()
const testQuestionsFormRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/generalSurvey/getSurvey',
publicHeight: 65,
method: 'POST',
column: [
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'orgName', title: '区域' },
{ field: 'subName', title: '变电站' },
{ field: 'name', title: '普测计划名称' },
{ field: 'time', title: '普测结果上传时间' },
{ field: 'text', title: '问题描述' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
fixed: 'right',
buttons: [
{
name: 'edit',
title: '附件预览',
type: 'primary',
icon: 'el-icon-Open',
render: 'confirmButton',
click: row => {}
},
{
name: 'edit',
title: '发起预警单',
type: 'primary',
icon: 'el-icon-Open',
render: 'confirmButton',
popconfirm: {
confirmButtonText: '确认',
cancelButtonText: '取消',
confirmButtonType: 'primary',
title: '请确认发起发起预警单!'
},
click: row => {}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [
{
orgName: '张家口',
subName: '张家口变电站',
name: '张家口变电站1期普测计划',
time: '2024-05-16',
text: '/'
}
]
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
const add = () => {
testQuestionsFormRef.value.open({
text: '新增测试问题'
})
}
</script>
<style scoped lang="scss"></style>

View File

@@ -1,27 +1,39 @@
<template> <template>
<div class="default-main"> <div class="default-main">
<el-tabs v-model="activeName" type="border-card"> <el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="在线监测" name="1">
<online />
</el-tab-pane>
<el-tab-pane label="用户投诉" name="2">
<complaints />
</el-tab-pane>
<el-tab-pane label="现场测试问题" name="3">
<testQuestions/>
</el-tab-pane>
<!-- <el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="电能质量问题查询维护" name="1"> <el-tab-pane label="电能质量问题查询维护" name="1">
<maintenance /> <maintenance />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="电能质量问题审核" name="2"> <el-tab-pane label="电能质量问题审核" name="2">
<audit /> <audit />
</el-tab-pane> </el-tab-pane> -->
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide } from 'vue'
import maintenance from './components/maintenance.vue' import online from './components1/online.vue'
import audit from './components/audit.vue' import complaints from './components1/complaints.vue'
import testQuestions from './components1/testQuestions.vue'
// import maintenance from './components/maintenance.vue'
// import audit from './components/audit.vue'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
defineOptions({ defineOptions({
name: 'Processsupervision/electricitymanagement' name: 'Processsupervision/electricitymanagement'
}) })
const activeName = ref('1') const activeName = ref('1')
const layout = mainHeight(63) as any const layout = mainHeight(63) as any
</script> </script>

View File

@@ -0,0 +1,567 @@
<template>
<div class='default-main'>
<el-descriptions :column='2' border>
<el-descriptions-item label='填报人'>
{{ detailData.reporter }}
</el-descriptions-item>
<el-descriptions-item label='填报日期'>
{{ formatDate(detailData.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label='填报部门'>
{{ detailData.orgName }}
</el-descriptions-item>
<el-descriptions-item label='工程预期投产日期'>
{{ formatDate(detailData.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label='用户性质'>
{{
userTypeList.find(item => {
return item.value == detailData.userType
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label='所属地市'>
{{ detailData.city }}
</el-descriptions-item>
<el-descriptions-item label='归口管理部门'>
{{ detailData.responsibleDepartment }}
</el-descriptions-item>
<el-descriptions-item label='用户状态'>
{{
userStateList.find(item => {
return item.value == detailData.userStatus
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label='变电站'>
{{ detailData.substation }}
</el-descriptions-item>
<el-descriptions-item label='工程名'>
{{ detailData.projectName }}
</el-descriptions-item>
<el-descriptions-item label='用户协议容量' v-if='detailData.userType == 0 || detailData.userType == 1'>
{{ proviteData.agreementCapacity }}
</el-descriptions-item>
<el-descriptions-item label='电压等级'>
{{
voltageLevelList.find(item => {
return item.id == detailData.voltageLevel
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label='非线性设备类型' v-if='detailData.userType == 0 || detailData.userType == 1'>
{{ proviteData.nonlinearDeviceType ? proviteData.nonlinearDeviceType : '-' }}
</el-descriptions-item>
<el-descriptions-item label='预测评估单位'>
{{ detailData.evaluationDept }}
</el-descriptions-item>
<el-descriptions-item label='预测评估结论'>
{{ detailData.evaluationConclusion }}
</el-descriptions-item>
<el-descriptions-item
label='非线性负荷类型'
v-if="
detailData.userType == '2' ||
detailData.userType == '3' ||
detailData.userType == '4' ||
detailData.userType == '5'
"
>
{{ proviteData.nonlinearLoadType }}
</el-descriptions-item>
<el-descriptions-item label='是否需要治理'>
<span v-if='detailData.userType == 0 || detailData.userType == 1'>
{{ proviteData.needGovernance == 0 ? '否' : '是' }}
</span>
<span
v-if='
detailData.userType == 2 ||
detailData.userType == 3 ||
detailData.userType == 4 ||
detailData.userType == 5
'
>
{{ proviteData.needGovernance == 0 ? '否' : '是' }}
</span>
<span v-if='detailData.userType == 6'>{{ proviteData.needGovernance == 0 ? '否' : '是' }}</span>
</el-descriptions-item>
<el-descriptions-item label='是否开展背景测试'>
<span v-if='detailData.userType == 0 || detailData.userType == 1'>
{{ proviteData.backgroundTestPerformed == 0 ? '否' : '是' }}
</span>
<span
v-if='
detailData.userType == 2 ||
detailData.userType == 3 ||
detailData.userType == 4 ||
detailData.userType == 5
'
>
{{ proviteData.backgroundTestPerformed == 0 ? '否' : '是' }}
</span>
<span v-if='detailData.userType == 6'>
{{ proviteData.backgroundTestPerformed == 0 ? '否' : '是' }}
</span>
</el-descriptions-item>
<el-descriptions-item label='是否开展抗扰度测试' v-if='detailData.userType == 6'>
<span>
{{ proviteData.antiInterferenceTest == 0 ? '否' : '是' }}
</span>
</el-descriptions-item>
<el-descriptions-item label='PCC点' v-if='detailData.userType != 0 && detailData.userType != 1'>
{{ proviteData?.pccPoint }}
</el-descriptions-item>
<el-descriptions-item
label='PCC供电设备容量'
v-if="
detailData.userType == '2' ||
detailData.userType == '3' ||
detailData.userType == '4' ||
detailData.userType == '5'
"
>
{{ proviteData.pccEquipmentCapacity }}
</el-descriptions-item>
<el-descriptions-item
label='基准短路容量'
v-if="
detailData.userType == '2' ||
detailData.userType == '3' ||
detailData.userType == '4' ||
detailData.userType == '5'
"
>
{{ proviteData.baseShortCircuitCapacity }}
</el-descriptions-item>
{{ proviteData }}
<el-descriptions-item label='评估类型' v-if='detailData.userType != 0 && detailData.userType != 1'>
{{
evaluationTypeList.find(item => {
return item.id == proviteData?.evaluationType
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label='预测评估评审单位' v-if='detailData.userType != 0 && detailData.userType != 1'>
{{ proviteData?.evaluationChekDept }}
</el-descriptions-item>
<el-descriptions-item
label='系统最小短路容量'
v-if="
detailData.userType == '2' ||
detailData.userType == '3' ||
detailData.userType == '4' ||
detailData.userType == '5'
"
>
{{ proviteData?.minShortCircuitCapacity }}
</el-descriptions-item>
<el-descriptions-item
label='用户用电协议容量'
v-if="
detailData.userType == '2' ||
detailData.userType == '3' ||
detailData.userType == '4' ||
detailData.userType == '5'
"
>
{{ proviteData?.userAgreementCapacity }}
</el-descriptions-item>
<el-descriptions-item label='行业' v-if='detailData.userType == 6'>
{{
industryList.find(item => {
return item.id == proviteData.industry
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label='敏感装置名称' v-if='detailData.userType == 6'>
{{ proviteData.deviceName }}
</el-descriptions-item>
<el-descriptions-item label='供电电源数量' v-if='detailData.userType == 6'>
{{ proviteData.powerSupplyCount }}
</el-descriptions-item>
<el-descriptions-item label='敏感电能质量指标' v-if='detailData.userType == 6'>
{{
energyQualityIndexList.find(item => {
return item.id == proviteData.energyQualityIndex
})?.name
}}
</el-descriptions-item>
<!-- <el-descriptions-item label='可研报告'>
<span v-if='detailData.userType == 0 || detailData.userType == 1'>
<el-icon><Link /></el-icon>
<a :href='proviteData.feasibilityReport.url'>{{ proviteData.feasibilityReport.name }}</a>
</span>
<span
v-if='
detailData.userType == 2 ||
detailData.userType == 3 ||
detailData.userType == 4 ||
detailData.userType == 5
'
>
<el-icon><Link /></el-icon>
<a :href='proviteData.feasibilityReport.url'>{{ proviteData.feasibilityReport.name }}</a>
</span>
<span v-if='detailData.userType == 6'>
<el-icon><Link /></el-icon>
<a :href='proviteData.feasibilityReport.url'>{{ proviteData.feasibilityReport.name }}</a>
</span>
</el-descriptions-item>
<el-descriptions-item label='项目初步设计说明书'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.preliminaryDesignDescription.url'>
{{ proviteData?.preliminaryDesignDescription.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label='预测评估报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.predictionEvaluationReport.url'>
{{ proviteData?.predictionEvaluationReport.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label='预测评估评审意见报告'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.predictionEvaluationReviewOpinions.url'>
{{ proviteData?.predictionEvaluationReviewOpinions.name }}
</a>
</el-descriptions-item>
<el-descriptions-item
label='用户接入变电站主接线示意图'
v-if='detailData.userType != 0 && detailData.userType != 1'
>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.substationMainWiringDiagram.url'>
{{ proviteData?.substationMainWiringDiagram.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label='主要敏感设备清单' v-if='detailData.userType == 6'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.sensitiveDevices.url'>{{ proviteData?.sensitiveDevices.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='抗扰度测试报告' v-if='detailData.userType == 6'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.antiInterferenceReport.url'>{{ proviteData?.antiInterferenceReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='背景电能质量测试报告' v-if='detailData.userType == 6'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.powerQualityReport.url'>{{ proviteData?.powerQualityReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label='其他附件'>
<el-icon>
<Link />
</el-icon>
<a :href='proviteData?.additionalAttachments.url'>{{ proviteData?.additionalAttachments.name }}</a>
</el-descriptions-item>-->
</el-descriptions>
<el-descriptions :column='2' border>
<el-descriptions-item label='入网预测评估报告'>
<el-upload
ref="uploadRef"
class="upload-demo"
:auto-upload="false">
<template #trigger>
<el-button type="primary">选择附件</el-button>
</template>
<!-- <template #tip>-->
<!-- <div class="el-upload__tip">-->
<!-- jpg/png files with a size less than 500kb-->
<!-- </div>-->
<!-- </template>-->
</el-upload>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script lang='ts' setup>
import { onMounted, ref, reactive } from 'vue'
import { useRoute } from 'vue-router'
import { formatDate } from '@/utils/formatTime'
import { propTypes } from '@/utils/propTypes'
import { getUserReportById } from '@/api/supervision-boot/userReport/form'
import { getDictTreeById } from '@/api/system-boot/dictTree'
import { useDictData } from '@/stores/dictData'
import { getFileNameAndFilePath } from '@/api/system-boot/file'
import type { UploadInstance } from 'element-plus'
import { Link } from '@element-plus/icons-vue'
defineOptions({ name: 'BpmUserReportDetail' })
const { query } = useRoute() // 查询参数
const props = defineProps({
id: propTypes.string.def(undefined)
})
const detailLoading = ref(false) // 表单的加载中
const detailData = ref<any>({}) // 详情数据
const queryId = query.id as unknown as string // 从 URL 传递过来的 id 编号
//用户性质数组
const userTypeList = reactive([
{
label: '新建电网工程',
value: '0'
},
{
label: '扩建电网工程',
value: '1'
},
{
label: '新建非线性负荷用户',
value: '2'
},
{
label: '扩建非线性负荷用户',
value: '3'
},
{
label: '新建新能源发电站',
value: '4'
},
{
label: '扩建新能源发电站',
value: '5'
},
{
label: '敏感及重要用户',
value: '6'
}
])
//用户状态数组
const userStateList = reactive([
{
label: '可研',
value: '0'
},
{
label: '建设',
value: '1'
},
{
label: '运行',
value: '2'
},
{
label: '退运',
value: '3'
}
])
const dictData = useDictData()
//字典获取所属地市
const areaOptionList = dictData.getBasicData('jibei_area')
//字典获取敏感电能质量指标
const energyQualityIndexList = dictData.getBasicData('Indicator_Type')
//字典获取行业类型
const industryList = dictData.getBasicData('industry_type_jb')
//字典电压等级
const voltageLevelList = dictData.getBasicData('Dev_Voltage_Stand')
//字典评估类型
const evaluationTypeList = dictData.getBasicData('Evaluation_Type')
//字典预测评估单位
const evaluationDeptList = dictData.getBasicData('evaluation_dept')
/** 获得数据 */
const getInfo = async () => {
detailLoading.value = true
try {
await getUserReportById(props.id || queryId).then(res => {
detailData.value = res.data
getProviteData()
})
} finally {
detailLoading.value = false
}
}
const proviteData = ref()
//判断userType选择取用的对象
const getProviteData = async () => {
if (detailData.value.userType == '0' || detailData.value.userType == '1') {
proviteData.value = detailData.value.userReportProjectPO
//查询非线性设备类型
await getDictTreeById(proviteData.value.nonlinearDeviceType).then(res => {
console.log(res, '==========')
proviteData.value.nonlinearDeviceType = res.data?.name
})
} else if (
detailData.value.userType == '2' ||
detailData.value.userType == '3' ||
detailData.value.userType == '4' ||
detailData.value.userType == '5'
) {
proviteData.value = detailData.value.userReportSubstationPO
//查询非线性负荷类型
await getDictTreeById(proviteData.value.nonlinearLoadType).then(res => {
console.log(res, '==========')
proviteData.value.nonlinearLoadType = res.data?.name
})
} else {
proviteData.value = detailData.value.userReportSensitivePO
}
console.log(proviteData.value, '++++++++++++proviteData.evaluationType')
//可研报告
if (proviteData.value.feasibilityReport) {
await getFileNamePath(proviteData.value.feasibilityReport, 'feasibilityReport')
}
//项目初步设计说明书
if (proviteData.value.preliminaryDesignDescription) {
await getFileNamePath(proviteData.value.preliminaryDesignDescription, 'preliminaryDesignDescription')
}
//预测评估报告
if (proviteData.value.predictionEvaluationReport) {
await getFileNamePath(proviteData.value.predictionEvaluationReport, 'predictionEvaluationReport')
}
//预测评估评审意见报告
if (proviteData.value.predictionEvaluationReviewOpinions) {
await getFileNamePath(
proviteData.value.predictionEvaluationReviewOpinions,
'predictionEvaluationReviewOpinions'
)
}
//用户接入变电站主接线示意图
if (proviteData.value.substationMainWiringDiagram) {
await getFileNamePath(proviteData.value.substationMainWiringDiagram, 'substationMainWiringDiagram')
}
//主要敏感设备清单
if (proviteData.value.sensitiveDevices) {
await getFileNamePath(proviteData.value.sensitiveDevices, 'sensitiveDevices')
}
//抗扰度测试报告
if (proviteData.value.antiInterferenceReport) {
await getFileNamePath(proviteData.value.antiInterferenceReport, 'antiInterferenceReport')
}
//背景电能质量测试报告
if (proviteData.value.powerQualityReport) {
await getFileNamePath(proviteData.value.powerQualityReport, 'powerQualityReport')
}
//其他附件
if (proviteData.value.additionalAttachments) {
getFileNamePath(proviteData.value.additionalAttachments, 'additionalAttachments')
}
}
//根据文件名请求
const getFileNamePath = async (val: any, pathName: any) => {
await getFileNameAndFilePath({ filePath: val }).then(res => {
console.log(111111111)
if (res.data && res.data.name && res.data.url) {
//可研报告
if (pathName == 'feasibilityReport' && proviteData.value.feasibilityReport) {
proviteData.value.feasibilityReport = {
name: res.data.fileName,
url: res.data.url
}
}
//项目初步设计说明书
else if (pathName == 'preliminaryDesignDescription' && proviteData.value.preliminaryDesignDescription) {
proviteData.value.preliminaryDesignDescription = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估报告
else if (pathName == 'predictionEvaluationReport' && proviteData.value.predictionEvaluationReport) {
proviteData.value.predictionEvaluationReport = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估评审意见报告
else if (
pathName == 'predictionEvaluationReviewOpinions' &&
proviteData.value.predictionEvaluationReviewOpinions
) {
proviteData.value.predictionEvaluationReviewOpinions = {
name: res.data.fileName,
url: res.data.url
}
}
//用户接入变电站主接线示意图
else if (pathName == 'substationMainWiringDiagram' && proviteData.value.substationMainWiringDiagram) {
proviteData.value.substationMainWiringDiagram = {
name: res.data.fileName,
url: res.data.url
}
}
//主要敏感设备清单
else if (pathName == 'sensitiveDevices' && proviteData.value.sensitiveDevices) {
proviteData.value.sensitiveDevices = {
name: res.data.fileName,
url: res.data.url
}
}
//抗扰度测试报告
else if (pathName == 'antiInterferenceReport' && proviteData.value.antiInterferenceReport) {
proviteData.value.antiInterferenceReport = {
name: res.data.fileName,
url: res.data.url
}
}
//背景电能质量测试报告
else if (pathName == 'powerQualityReport' && proviteData.value.powerQualityReport) {
proviteData.value.powerQualityReport = {
name: res.data.fileName,
url: res.data.url
}
}
//其他附件
else if (pathName == 'additionalAttachments' && proviteData.value.additionalAttachments) {
proviteData.value.additionalAttachments = {
name: res.data.fileName,
url: res.data.url
}
}
}
})
}
defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗
const uploadRef = ref<UploadInstance>()
const submitUpload = () => {
uploadRef.value!.submit()
}
/** 初始化 **/
onMounted(() => {
getInfo()
})
</script>
<style lang='scss'>
.default-main {
height: calc(100vh - 100px);
overflow: auto;
}
::v-deep.el-icon svg {
margin: 5px !important;
position: absolute !important;
top: 20px !important;
}
</style>

View File

@@ -0,0 +1,207 @@
<template>
<div>
<TableHeader ref='TableHeaderRef'>
<template #select>
<el-form-item label='工程名称'>
<el-input v-model='tableStore.table.params.searchValue' clearable></el-input>
</el-form-item>
<el-form-item label='所属地市'>
<el-select v-model='tableStore.table.params.loadType' clearable placeholder='请选择所属地市'>
<el-option
v-for='item in areaOptionList'
:key='item.id'
:label='item.name'
:value='item.id'
></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon='el-icon-Download' type='primary'>导出</el-button>
</template>
</TableHeader>
<Table ref='tableRef' />
</div>
<Dialog title='干扰源用户详细信息' v-model='dialogVisible' width='85%'>
<BpmUserReportDetail :id='interId' style='max-height: 600px'></BpmUserReportDetail>
</Dialog>
</template>
<script setup lang='ts'>
defineOptions({
name: 'supervision/interferenceUserTable'
})
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import Dialog from '@/components/Dialog/src/Dialog.vue'
import BpmUserReportDetail from '../../components/undocumented/detail.vue'
const dictData = useDictData()
const areaOptionList = dictData.getBasicData('jibei_area')
const { push } = useRouter()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/userReport/getInterferenceUserPage',
publicHeight: 65,
method: 'POST',
column: [
{ title: '序号', type: 'seq', width: 80 },
{ field: 'projectName', title: '工程名称', minWidth: 170 },
{
field: 'userType',
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'city', title: '所属地市', minWidth: 80 },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{ field: 'substation', title: '变电站', minWidth: 100 },
{ title: '详细信息',
minWidth: 100,
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
open(row.id)
}
},
]
},
{
title: '操作',
minWidth: 180,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '入网方案审查',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
toFangAn(row.id,1)
}
},
{
name: 'productSetting',
title: '治理工程审查',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
toFangAn(row.id,2)
}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.city = tableStore.table.params.deptIndex
}
})
tableStore.table.params.loadType = ''
tableStore.table.params.userName = ''
tableStore.table.params.relationUserName = ''
tableStore.table.params.aisFileUpload = ''
const dialogVisible = ref(false)
const interId = ref()
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
/** 打开弹窗 */
const open = async (id: string) => {
dialogVisible.value = true
interId.value = id
}
/** 方案审查 */
const toFangAn = (id: any,type:Number) => {
if(type == 1){
push({
name: 'ProgramReview',
query: {
id: id
}
})
}else{
push({
name: 'projectTreat',
query: {
id: id
}
})
}
}
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
</script>

View File

@@ -0,0 +1,154 @@
<template>
<div>
<TableHeader ref='TableHeaderRef'>
<template #select>
<el-form-item label='工程名称'>
<el-input v-model='tableStore.table.params.searchValue' clearable></el-input>
</el-form-item>
<el-form-item label='所属地市'>
<el-select v-model='tableStore.table.params.loadType' clearable placeholder='请选择所属地市'>
<el-option
v-for='item in areaOptionList'
:key='item.id'
:label='item.name'
:value='item.id'
></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon='' type='primary' @click='goNet()'>新增入网设计方案审查</el-button>
<el-button style='margin-left: 50px' :icon='Back' @click='go(-1)'>返回</el-button>
</template>
</TableHeader>
<Table ref='tableRef' />
</div>
<!-- <el-dialog title='干扰源用户入网方案审查' v-model='dialogVisible' width='70%'>
<BpmUserReportDetail :id='interId' style='max-height: 600px'></BpmUserReportDetail>
</el-dialog>-->
</template>
<script setup lang='ts'>
defineOptions({
name: 'ProgramReview'
})
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import { useRouter } from 'vue-router'
import { Back } from '@element-plus/icons-vue'
import BpmUserReportDetail from '@/views/pqs/supervise/interfere/components/normalizationManager/detail.vue'
const {go} = useRouter()
const dictData = useDictData()
const areaOptionList = dictData.getBasicData('jibei_area')
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/userReport/getInterferenceUserPage',
method: 'POST',
column: [
{ title: '序号', type: 'seq', width: 80 },
{ field: 'projectName', title: '工程名称', minWidth: 170 },
{
field: 'userType',
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'city', title: '所属地市', minWidth: 80 },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{ field: 'substation', title: '变电站', minWidth: 100 },
{
title: '操作',
minWidth: 180,
fixed: 'right',
render: 'buttons',
buttons: [
]
}
],
beforeSearchFun: () => {
tableStore.table.params.city = tableStore.table.params.deptIndex
}
})
const dialogVisible = ref(false)
provide('tableStore', tableStore)
onMounted(() => {
//interId.value = currentRoute.value.query.id
tableStore.index()
})
/** 方案审查 */
const goNet = () => {
dialogVisible.value = true
}
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
</script>

View File

@@ -0,0 +1,143 @@
<template>
<div>
<TableHeader ref='TableHeaderRef'>
<template #select>
<el-form-item label='工程名称'>
<el-input v-model='tableStore.table.params.searchValue' clearable></el-input>
</el-form-item>
<el-form-item label='所属地市'>
<el-select v-model='tableStore.table.params.loadType' clearable placeholder='请选择所属地市'>
<el-option
v-for='item in areaOptionList'
:key='item.id'
:label='item.name'
:value='item.id'
></el-option>
</el-select>
</el-form-item>
</template>
<template #operation>
<el-button icon='' type='primary'>新增治理方案</el-button>
<el-button style='margin-left: 50px' :icon='Back' @click='go(-1)'>返回</el-button>
</template>
</TableHeader>
<Table ref='tableRef' />
</div>
</template>
<script setup lang='ts'>
defineOptions({
name: 'projectTreat'
})
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useDictData } from '@/stores/dictData'
import { useRouter } from 'vue-router'
import { Back } from '@element-plus/icons-vue'
const { go } = useRouter()
const dictData = useDictData()
const areaOptionList = dictData.getBasicData('jibei_area')
const { push } = useRouter()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/userReport/getInterferenceUserPage',
method: 'POST',
column: [
{ title: '序号', type: 'seq', width: 80 },
{ field: 'projectName', title: '工程名称', minWidth: 170 },
{
field: 'userType',
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'city', title: '所属地市', minWidth: 80 },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{ field: 'substation', title: '变电站', minWidth: 100 },
{
title: '操作',
minWidth: 180,
fixed: 'right',
render: 'buttons',
buttons: [
]
}
],
beforeSearchFun: () => {
tableStore.table.params.city = tableStore.table.params.deptIndex
}
})
tableStore.table.params.loadType = ''
tableStore.table.params.userName = ''
tableStore.table.params.relationUserName = ''
tableStore.table.params.aisFileUpload = ''
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
</script>

View File

@@ -24,7 +24,7 @@
label-width="140px" label-width="140px"
label-position="right" label-position="right"
> >
<el-tabs tab-position="left" class="demo-tabs" v-model="activeName"> <el-tabs tab-position="left" class="tabs_form" v-model="activeName">
<el-tab-pane name="0" label="基础信息" v-if="selectFormType == '0'"> <el-tab-pane name="0" label="基础信息" v-if="selectFormType == '0'">
<div class="form_tab_item"> <div class="form_tab_item">
<el-row> <el-row>
@@ -134,8 +134,9 @@
<div class="form_tab_item"> <div class="form_tab_item">
<el-row> <el-row>
<el-col :span="12"></el-col> <el-col :span="12"></el-col>
<el-col :span="12"> <el-col :span="12" class="required_position">
<el-form-item label="终端台账信息:" :show-message="false"> <span class="required_icon" style="color:#fff">*</span>
<el-form-item label="终端台账信息:">
<el-upload <el-upload
v-model:file-list="form.deviceFilePath" v-model:file-list="form.deviceFilePath"
ref="uploadRef" ref="uploadRef"
@@ -387,7 +388,9 @@
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
v-model="form.currentTerminalDetectionTime" v-model="form.currentTerminalDetectionTime"
type="date" type="datetime"
format="YYYY/MM/DD hh:mm:ss"
value-format="YYYY-MM-DD hh:mm:ss"
placeholder="请选择本次终端检测时间" placeholder="请选择本次终端检测时间"
/> />
</el-form-item> </el-form-item>
@@ -402,7 +405,9 @@
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
v-model="form.nextTerminalInspectionTime" v-model="form.nextTerminalInspectionTime"
type="date" type="datetime"
format="YYYY/MM/DD hh:mm:ss"
value-format="YYYY-MM-DD hh:mm:ss"
placeholder="请选择下次终端定检时间" placeholder="请选择下次终端定检时间"
/> />
</el-form-item> </el-form-item>
@@ -514,7 +519,9 @@
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
v-model="form.commissioningTime" v-model="form.commissioningTime"
type="date" type="datetime"
format="YYYY/MM/DD hh:mm:ss"
value-format="YYYY-MM-DD hh:mm:ss"
placeholder="请选择投运时间" placeholder="请选择投运时间"
/> />
</el-form-item> </el-form-item>
@@ -525,7 +532,9 @@
<el-date-picker <el-date-picker
style="width: 100%" style="width: 100%"
v-model="form.dataUpdateTime" v-model="form.dataUpdateTime"
type="date" type="datetime"
format="YYYY/MM/DD hh:mm:ss"
value-format="YYYY-MM-DD hh:mm:ss"
placeholder="请选择数据更新时间" placeholder="请选择数据更新时间"
/> />
</el-form-item> </el-form-item>
@@ -647,6 +656,8 @@
style="width: 100%" style="width: 100%"
v-model="form.reportDate" v-model="form.reportDate"
type="date" type="date"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
placeholder="请选择填报日期" placeholder="请选择填报日期"
/> />
</el-form-item> </el-form-item>
@@ -733,7 +744,8 @@
<el-row> <el-row>
<el-col :span="12"></el-col> <el-col :span="12"></el-col>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon" style="color:#fff">*</span>
<el-form-item label="监测点台账信息:" prop="lineFilePath"> <el-form-item label="监测点台账信息:" prop="lineFilePath">
<el-upload <el-upload
v-model:file-list="form.lineFilePath" v-model:file-list="form.lineFilePath"
@@ -744,7 +756,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('lineFilePath')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1011,7 +1023,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('feasibilityReport')" :on-progress="uploadFileName('mainWiringDiagram')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1025,7 +1037,8 @@
<el-tab-pane name="3" label="附件材料" v-if="selectFormType == '0'"> <el-tab-pane name="3" label="附件材料" v-if="selectFormType == '0'">
<div class="form_tab_item"> <div class="form_tab_item">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon">*</span>
<el-form-item label="信息安全检测报告:" prop="informationSecurityTestReport"> <el-form-item label="信息安全检测报告:" prop="informationSecurityTestReport">
<el-upload <el-upload
v-model:file-list="form.informationSecurityTestReport" v-model:file-list="form.informationSecurityTestReport"
@@ -1036,7 +1049,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('informationSecurityTestReport')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1045,7 +1058,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon">*</span>
<el-form-item label="验收检验报告单:" prop="acceptanceInspectionReportSingle"> <el-form-item label="验收检验报告单:" prop="acceptanceInspectionReportSingle">
<el-upload <el-upload
v-model:file-list="form.acceptanceInspectionReportSingle" v-model:file-list="form.acceptanceInspectionReportSingle"
@@ -1056,7 +1070,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('acceptanceInspectionReportSingle')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1067,7 +1081,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon" style="color:#fff">*</span>
<el-form-item label="验收检验报告:" prop="acceptanceInspectionReport"> <el-form-item label="验收检验报告:" prop="acceptanceInspectionReport">
<el-upload <el-upload
v-model:file-list="form.acceptanceInspectionReport" v-model:file-list="form.acceptanceInspectionReport"
@@ -1078,7 +1093,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('acceptanceInspectionReport')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1087,7 +1102,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon">*</span>
<el-form-item label="型式实验报告:" prop="typeExperimentReport" :show-message="false"> <el-form-item label="型式实验报告:" prop="typeExperimentReport" :show-message="false">
<el-upload <el-upload
v-model:file-list="form.typeExperimentReport" v-model:file-list="form.typeExperimentReport"
@@ -1098,7 +1114,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('typeExperimentReport')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1109,7 +1125,8 @@
</el-row> </el-row>
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon">*</span>
<el-form-item label="出厂检验报告:" prop="factoryInspectionReport"> <el-form-item label="出厂检验报告:" prop="factoryInspectionReport">
<el-upload <el-upload
v-model:file-list="form.factoryInspectionReport" v-model:file-list="form.factoryInspectionReport"
@@ -1120,7 +1137,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('factoryInspectionReport')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1129,7 +1146,8 @@
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12" class="required_position">
<span class="required_icon">*</span>
<el-form-item label="性能检测报告:" prop="performanceTestReport" :show-message="false"> <el-form-item label="性能检测报告:" prop="performanceTestReport" :show-message="false">
<el-upload <el-upload
v-model:file-list="form.performanceTestReport" v-model:file-list="form.performanceTestReport"
@@ -1140,7 +1158,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('performanceTestReport')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1162,7 +1180,7 @@
:on-exceed="handleExceed" :on-exceed="handleExceed"
:on-change="choose" :on-change="choose"
:auto-upload="false" :auto-upload="false"
:on-progress="uploadFileName('deviceFilePath')" :on-progress="uploadFileName('otherAttachments')"
> >
<template #trigger> <template #trigger>
<el-button type="primary">上传文件</el-button> <el-button type="primary">上传文件</el-button>
@@ -1193,13 +1211,8 @@ import type { ComponentSize, FormInstance, FormRules } from 'element-plus'
import { queryByAllCode } from '@/api/system-boot/dictTree' import { queryByAllCode } from '@/api/system-boot/dictTree'
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
import { uploadFile } from '@/api/system-boot/file' import { uploadFile } from '@/api/system-boot/file'
import { submitFormData } from '@/api/supervise/interfere/index' import { submitFormData } from '@/api/supervision-boot/interfere/index'
defineProps({ import { addTerminalFormData } from '@/api/supervision-boot/terminal/index.ts'
openType: {
type: String,
default: 'create'
}
})
const emits = defineEmits(['onSubmit']) const emits = defineEmits(['onSubmit'])
const dictData = useDictData() const dictData = useDictData()
const dialogFormVisible = ref(false) const dialogFormVisible = ref(false)
@@ -1430,7 +1443,66 @@ const resetForm = () => {
} }
//初始化数据 //初始化数据
resetForm() resetForm()
const subForm = ref({ //终端信息表单格式
const devReportForm = ref({
reporter: '', //填报人
reportDate: new Date(), //填报日期
orgId: '', //填报部门
expectedProductionDate: '', //工程投产日期
city: areaOptionList[0].name, //所属地市
userStatus: userStateList[1].id, //用户状态
userName: '', //工程名称
userId: '',
acceptanceInspectionReport: [], //验收检验报告
acceptanceInspectionReportSingle: [], //验收检验报告单
deviceFilePath: [], //终端台账信息
factoryInspectionReport: [], //出厂检验报告
informationSecurityTestReport: [], //信息安全检测报告
lineFilePath: [], //监测点台账信息
otherAttachments: [], //其他附件
performanceTestReport: [], //性能检测报告
typeExperimentReport: [], //型式实验报告
// processInstanceId: '', //流程实例的编号
// startUserSelectAssignees: {}, //发起人自选审批人 Map
//终端信息实体
supervisionTempDeviceReportParam: {
alarmFunction: '0', //告警功能
commissioningTime: '', //投运时间
communicationStatus: '', // 通讯状态
contractNumber: '', //合同号
currentTerminalDetectionTime: '', //本次终端检测时间
dataType: '', //数据类型
dataUpdateTime: '', // 数据更新时间
electroplatingFunction: '', //电镀功能
frontEndMachine: '', //所属前置机
identificationCode: '', // 识别码
latitude: '0', //纬度
longitude: '0', //经度
manufacturer: '', //厂家
manufacturerDeviceNumber: '', // 厂家设备编号
monitoringDeviceInstallationPosition: monitoringDeviceInstallationPositionList[0].id, //监测装置安装位置
monitoringTerminalCode: '', //监测终端编码
monitoringTerminalName: '', //监测终端名称
neutralPointWiringMethod: '', // 中性点接线方式
nextTerminalInspectionTime: '', // 下次终端定检时间
powerCompany: '', //所属供电公司
simCardNumber: '', //SIM卡号
substation: '', // 所属变电站
substationVoltageLevel: '', // 变电站电压等级
// summonFlag: '', // 召唤标志
terminalIp: '', //终端IP
terminalModel: terminalModelList[0].id, //终端模型
terminalPort: '', //端口
terminalSecretKey: '', //终端秘钥
terminalType: '', // 终端型号
terminalWiringMethodType: '', // 终端接线方式类型
timeSyncFunction: '0', // 对时功能
voltageTransformerType: '' // 电压互感器类型
}
})
//监测点信息表单格式
const monitorPointForm = ref({
reporter: '', //填报人 reporter: '', //填报人
reportDate: new Date(), //填报日期 reportDate: new Date(), //填报日期
orgId: '', //填报部门 orgId: '', //填报部门
@@ -1940,118 +2012,33 @@ const rules = ref({
} }
] ]
}) })
// watch( watch(
// () => form.value, () => form.value,
// (val, oldVal) => { (val, oldVal) => {
// //form数据变化时处理格式 //form数据变化时处理格式根据tab切换判断处理的对象实体
// for (let key in val) { //终端信息
// if (subForm.value.hasOwnProperty(key)) { if (selectFormType.value == '0' && val) {
// subForm.value[key] = val[key] // 对相同的key进行赋值 for (let key in val) {
// } if (devReportForm.value.hasOwnProperty(key)) {
// } devReportForm.value[key] = val[key] // 对相同的key进行赋值
}else if(devReportForm.value.supervisionTempDeviceReportParam.hasOwnProperty(key)){
devReportForm.value.supervisionTempDeviceReportParam[key] = val[key]
}
}
//处理填报日期时间格式
devReportForm.value.reportDate = window.XEUtils.toDateString(form.value.reportDate, 'yyyy-MM-dd');
// console.log('处理好的表单++++++++++>',devReportForm.value)
}
//监测点信息
else {
// //处理填报日期时间格式 }
// subForm.value.reportDate = window.XEUtils.toDateString(form.value.reportDate, 'yyyy-MM-dd') },
// //userType==0,1 {
// if (val.userType == '0' || val.userType == '1') { deep: true,
// subForm.value.userReportProjectPO = { immediate: true
// additionalAttachments: [], //其他附件告地址 }
// agreementCapacity: 0, )
// backgroundTestPerformed: 0,
// feasibilityReport: [], //可研报告
// id: '',
// needGovernance: 0,
// nonlinearDeviceType: '',
// predictionEvaluationReport: [], //预测评估报告告地址
// predictionEvaluationReviewOpinions: [], //预测评估评审意见报告地址
// preliminaryDesignDescription: [], //项目初步设计说明书告地址
// state: 0
// }
// for (let key in val) {
// if (subForm.value.userReportProjectPO && subForm.value.userReportProjectPO.hasOwnProperty(key)) {
// // 对相同的key进行赋值
// subForm.value.userReportProjectPO[key] = val[key]
// }
// }
// delete subForm.value.userReportSubstationPO
// delete subForm.value.userReportSensitivePO
// return
// }
// //userType==2,3,4,5
// if (val.userType == '2' || val.userType == '3' || val.userType == '4' || val.userType == '5') {
// subForm.value.userReportSubstationPO = {
// additionalAttachments: [], //其他附件告地址
// backgroundTestPerformed: 0,
// baseShortCircuitCapacity: 0,
// evaluationChekDept: '',
// evaluationType: '',
// feasibilityReport: [], //可研报告
// id: '',
// minShortCircuitCapacity: 0,
// needGovernance: 0,
// nonlinearLoadType: '',
// pccEquipmentCapacity: 0,
// pccPoint: '',
// predictionEvaluationReport: [], //预测评估报告告地址
// predictionEvaluationReviewOpinions: [], //预测评估评审意见报告地址
// preliminaryDesignDescription: [], //项目初步设计说明书告地址
// state: 0,
// substationMainWiringDiagram: [], //用户接入变电站主接线示意图地址
// userAgreementCapacity: 0
// }
// for (let key in val) {
// if (subForm.value.userReportSubstationPO && subForm.value.userReportSubstationPO.hasOwnProperty(key)) {
// // 对相同的key进行赋值
// subForm.value.userReportSubstationPO[key] = val[key]
// }
// }
// delete subForm.value.userReportProjectPO
// delete subForm.value.userReportSensitivePO
// return
// }
// //userType==6
// if (val.userType == '6') {
// subForm.value.userReportSensitivePO = {
// additionalAttachments: [], //其他附件告地址
// antiInterferenceReport: [], //抗扰度测试报告
// antiInterferenceTest: '',
// backgroundTestPerformed: 0,
// deviceName: '',
// energyQualityIndex: '',
// evaluationChekDept: '',
// evaluationType: '',
// feasibilityReport: [], //可研报告告地址
// id: '',
// industry: '',
// needGovernance: 0,
// pccPoint: '',
// powerQualityReport: [], //背景电能质量测试报告
// powerSupplyCount: 0,
// predictionEvaluationReport: [], //预测评估报告告地址
// predictionEvaluationReviewOpinions: [], //预测评估评审意见报告地址
// preliminaryDesignDescription: [], //项目初步设计说明书告地址
// sensitiveDevices: [], //主要敏感设备清单
// state: 0,
// substationMainWiringDiagram: [] //用户接入变电站主接线示意图地址
// }
// for (let key in val) {
// if (subForm.value.userReportSensitivePO && subForm.value.userReportSensitivePO.hasOwnProperty(key)) {
// // 对相同的key进行赋值
// subForm.value.userReportSensitivePO[key] = val[key]
// }
// }
// delete subForm.value.userReportProjectPO
// delete subForm.value.userReportSubstationPO
// return
// }
// },
// {
// deep: true,
// immediate:true,
// }
// )
const open = () => { const open = () => {
dialogFormVisible.value = true dialogFormVisible.value = true
} }
@@ -2063,11 +2050,15 @@ const close = () => {
emits('onSubmit') emits('onSubmit')
resetForm() resetForm()
} }
// 切换终端信息/监测点信息
const handleClick = (tab: any, event: any) => { const handleClick = (tab: any, event: any) => {
//终端信息
if (tab.index == '0') { if (tab.index == '0') {
activeName.value = '0'; activeName.value = '0'
} else { }
activeName.value = '2'; //监测点信息
else {
activeName.value = '2'
} }
} }
onMounted(() => { onMounted(() => {
@@ -2154,29 +2145,33 @@ const activeName = ref('0')
//提交 //提交
const confirmForm = () => { const confirmForm = () => {
console.log(form.value, '打印form对象') console.log(form.value, '打印form对象')
// 先判断提交终端信息与监测点信息
// 提交终端信息
if (selectFormType.value == '0') {
ruleFormRef.value.validate(valid => { ruleFormRef.value.validate(valid => {
if (valid) { if (valid) {
//整理上传文件的数据 //整理上传文件的数据
// userType==0,1 // userType==0,1
subForm.value.reporter = adminInfo.$state.id devReportForm.value.reporter = adminInfo.$state.id
subForm.value.orgId = adminInfo.$state.deptId devReportForm.value.orgId = adminInfo.$state.deptId
let confirmFormData = JSON.parse(JSON.stringify(subForm.value)) let confirmFormData = JSON.parse(JSON.stringify(devReportForm.value))
//1.判断是否上传 //1.判断是否上传
if (!deviceFilePath.value) { // if (!deviceFilePath.value) {
activeName.value = '1' // activeName.value = '1'
return ElMessage({ // return ElMessage({
message: '请上传终端台账信息', // message: '请上传终端台账信息',
type: 'warning' // type: 'warning'
}) // })
} // }
if (!lineFilePath.value) { // if (!lineFilePath.value) {
activeName.value = '2' // activeName.value = '2'
return ElMessage({ // return ElMessage({
message: '请上传监测点台账信息', // message: '请上传监测点台账信息',
type: 'warning' // type: 'warning'
}) // })
} // }
if (!acceptanceInspectionReportSingle.value) { if (!acceptanceInspectionReportSingle.value) {
return ElMessage({ return ElMessage({
message: '请上传验收检验报告单', message: '请上传验收检验报告单',
@@ -2213,7 +2208,22 @@ const confirmForm = () => {
type: 'warning' type: 'warning'
}) })
} }
submitFormData(confirmFormData).then(res => { //提交终端信息
confirmFormData={
...confirmFormData,
acceptanceInspectionReport: acceptanceInspectionReport.value, //验收检验报告
acceptanceInspectionReportSingle: acceptanceInspectionReportSingle.value, //验收检验报告单
deviceFilePath: deviceFilePath?.value, //终端台账信息
factoryInspectionReport: factoryInspectionReport.value, //出厂检验报告
informationSecurityTestReport:informationSecurityTestReport.value , //信息安全检测报告
lineFilePath: lineFilePath?.value, //监测点台账信息
performanceTestReport:performanceTestReport.value , //性能检测报告
typeExperimentReport: typeExperimentReport.value, //型式实验报告
otherAttachments: otherAttachments?.value, //其他附件
}
console.log(confirmFormData,"打印提交表单111111111111")
addTerminalFormData(confirmFormData).then(res => {
console.log(res,"打印提交结果222222222222+++++++++")
ruleFormRef.value.resetFields() ruleFormRef.value.resetFields()
resetForm() resetForm()
close() close()
@@ -2224,6 +2234,10 @@ const confirmForm = () => {
} }
}) })
} }
//提交监测点信息
else {
}
}
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@@ -2284,4 +2298,7 @@ defineExpose({ open })
margin-left: 10px; margin-left: 10px;
} }
} }
// ::v-deep .tabs_form{
// height:300px !important;
// }
</style> </style>

View File

@@ -1,7 +1,7 @@
<!---终端入网检测--> <!---终端入网检测-->
<template> <template>
<TableHeader ref="TableHeaderRef"> <TableHeader area datePicker ref="TableHeaderRef">
<template #select> <!-- <template #select>
<el-form-item label="工程名称"> <el-form-item label="工程名称">
<el-input v-model="tableStore.table.params.searchValue" clearable></el-input> <el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
</el-form-item> </el-form-item>
@@ -15,7 +15,7 @@
></el-option> ></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</template> </template> -->
<template #operation> <template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</el-button> <el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</el-button>
<!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> --> <!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> -->
@@ -45,42 +45,14 @@ const ruleFormRef = ref()
const show: any = ref(false) const show: any = ref(false)
const fileList = ref([]) const fileList = ref([])
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/supervision-boot/userReport/getUserReport', url: '/supervision-boot/deVReport/list',
publicHeight: 65, publicHeight: 65,
method: 'POST', method: 'POST',
column: [ column: [
{ title: '序号', type: 'seq', width: 80 }, { title: '序号', type: 'seq', width: 80 },
{ field: 'projectName', title: '工程名称', minWidth: 170 }, { field: 'orgName', title: '填报部门名称' },
{ { field: 'reportDate', title: '填报日期'},
field: 'userType', { field: 'reporter', title: '填报人', minWidth: 80 },
title: '用户性质',
minWidth: 150,
formatter: (obj: any) => {
const userType = obj.row.userType
return getUserTypeName(userType)
}
},
{ field: 'city', title: '所属地市', minWidth: 80 },
{ field: 'responsibleDepartment', title: '归口管理部门', minWidth: 130 },
{
field: 'userStatus',
title: '用户状态',
minWidth: 100,
render: 'tag',
custom: {
0: 'primary',
1: 'primary',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '可研',
1: '建设',
2: '运行',
3: '退运'
}
},
{ field: 'substation', title: '变电站', minWidth: 100 },
{ {
field: 'status', field: 'status',
title: '审核状态', title: '审核状态',
@@ -99,7 +71,43 @@ const tableStore = new TableStore({
4: '已取消' 4: '已取消'
} }
}, },
{ field: 'createTime', title: '开始时间', minWidth: 170 }, { field: 'monitoringTerminalName', title: '设备名称', minWidth: 170 },
{ field: 'substation', title: '所属变电站', minWidth: 170 },
// {
// field: 'userType',
// title: '用户性质',
// minWidth: 150,
// formatter: (obj: any) => {
// const userType = obj.row.userType
// return getUserTypeName(userType)
// }
// },
// { field: 'informationSecurityTestReport', title: '信息安全检测报告', minWidth: 170 },
// { field: 'otherAttachments', title: '其他附件', minWidth: 170 },
// { field: 'orgName', title: '填报部门名称'},
// { field: 'performanceTestReport', title: '性能检测报告', minWidth: 170 },
// {
// field: 'userStatus',
// title: '用户状态',
// minWidth: 100,
// render: 'tag',
// custom: {
// 0: 'primary',
// 1: 'primary',
// 2: 'success',
// 3: 'warning'
// },
// replaceValue: {
// 0: '可研',
// 1: '建设',
// 2: '运行',
// 3: '退运'
// }
// },
// { field: 'substation', title: '变电站', minWidth: 100 },
// { field: 'createTime', title: '开始时间', minWidth: 170 },
{ {
title: '操作', title: '操作',
minWidth: 150, minWidth: 150,
@@ -122,13 +130,14 @@ const tableStore = new TableStore({
beforeSearchFun: () => { beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.relationUserName = tableStore.table.params.userName // tableStore.table.params.relationUserName = tableStore.table.params.userName
} }
}) })
tableStore.table.params.loadType = '' // tableStore.table.params.loadType = ''
tableStore.table.params.userName = '' // tableStore.table.params.userName = ''
tableStore.table.params.fileUploadflag = '' // tableStore.table.params.fileUploadflag = ''
console.log(tableStore.table.params,"=========查询列表");
provide('tableStore', tableStore) provide('tableStore', tableStore)

View File

@@ -707,7 +707,7 @@ import type { ComponentSize, FormInstance, FormRules } from 'element-plus'
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
import { queryByAllCode } from '@/api/system-boot/dictTree' import { queryByAllCode } from '@/api/system-boot/dictTree'
import { uploadFile } from '@/api/system-boot/file' import { uploadFile } from '@/api/system-boot/file'
import { submitFormData } from '@/api/supervise/interfere/index' import { submitFormData } from '@/api/supervision-boot/interfere/index'
defineProps({ defineProps({
openType: { openType: {
type: String, type: String,

View File

@@ -9,27 +9,24 @@
<interferenceUserTable v-if="activeName == '3'" /> <interferenceUserTable v-if="activeName == '3'" />
</el-tab-pane> </el-tab-pane>
<!-- <el-tab-pane label="实测报告审核" name="4"><report v-if="activeName == '4'" /></el-tab-pane>--> <!-- <el-tab-pane label="实测报告审核" name="4"><report v-if="activeName == '4'" /></el-tab-pane>-->
<el-tab-pane label="终端入网检测" name="5"> <!-- <el-tab-pane label="终端入网检测" name="5">
<terminalNetworkDetection v-if="activeName == '5'"></terminalNetworkDetection> <terminalNetworkDetection v-if="activeName == '5'"></terminalNetworkDetection>
</el-tab-pane> </el-tab-pane> -->
</el-tabs> </el-tabs>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide } from 'vue'
import undocumented from './components/undocumented/index.vue'
import network from './components/network/index.vue'
import interferenceUserTable from '../terminal/components/interferenceUserTable.vue'
import report from './components/report.vue'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
import terminalNetworkDetection from './components/terminalNetworkDetection/index.vue' import undocumented from './components/undocumented/index.vue'
import interferenceUserTable from './components/normalizationManager/interferenceUserTable.vue'
defineOptions({ defineOptions({
name: 'Processsupervision/interferencemanagement' name: 'supervision/interferencemanagement'
}) })
const activeName = ref('1') const activeName = ref('1')
const Statistics = ref()
const compatibility = ref()
const layout = mainHeight(63) as any const layout = mainHeight(63) as any
</script> </script>

View File

@@ -27,7 +27,7 @@
{{ getDeviceStatus(detailData.deviceStatus) }} {{ getDeviceStatus(detailData.deviceStatus) }}
</el-tag> </el-tag>
</el-descriptions-item> </el-descriptions-item>
<el-descriptions-item label='资产编号'> <el-descriptions-item label='退役原因'>
{{ detailData.propertyNo }} {{ detailData.propertyNo }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>

View File

@@ -1,54 +1,63 @@
<template> <template>
<el-dialog draggable class='cn-operate-dialog' v-model='dialogVisible' :title='title' <el-dialog
style='max-width: 450px;height: 320px' top='30vh'> draggable
class="cn-operate-dialog"
v-model="dialogVisible"
:title="title"
style="max-width: 450px; height: 320px"
top="30vh"
>
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='formData' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline="false" :model="formData" label-width="120px" :rules="rules" ref="formRef">
<el-form-item label="设备类型" prop="deviceType">
<el-form-item label='设备类型' prop='deviceType'> <el-radio-group v-model="formData.deviceType" @change="changeType">
<el-radio-group v-model='formData.deviceType' @change='changeType'> <el-radio border label="1">监测装置</el-radio>
<el-radio border label='1'>装置设备</el-radio> <el-radio border label="2">监测点</el-radio>
<el-radio border label='2'>监测设备</el-radio>
</el-radio-group> </el-radio-group>
</el-form-item> </el-form-item>
<el-form-item label='设备' prop='deviceId'> <el-form-item label="设备" prop="deviceId">
<el-tree-select <el-tree-select
v-model='formData.deviceId' v-model="formData.deviceId"
:data='data' :data="data"
filterable filterable
:default-expand-all='true' :default-expand-all="true"
style='width: 260px' style="width: 260px"
/> />
</el-form-item> </el-form-item>
<el-form-item label='资产编号'> <el-form-item label="退役原因" prop="propertyNo">
<el-input <!-- <el-input
v-model='formData.propertyNo' v-model='formData.propertyNo'
clearable clearable
placeholder='请输入资产编号' placeholder='请输入退役原因'
/> /> -->
<el-input
type="textarea"
clearable
:autosize="{ minRows: 2, maxRows: 4 }"
placeholder="请输入退役原因"
v-model="formData.propertyNo"
></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>
<template #footer> <template #footer>
<span class='dialog-footer'> <span class="dialog-footer">
<el-button @click='dialogVisible = false'>取消</el-button> <el-button @click="dialogVisible = false">取消</el-button>
<el-button type='primary' @click='submit'>确认</el-button> <el-button type="primary" @click="submit">确认</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
</template> </template>
<script lang='ts' setup> <script lang="ts" setup>
import { ref, inject, reactive, nextTick } from 'vue' import { ref, inject, reactive, nextTick } from 'vue'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除 import TableStore from '@/utils/tableStore' // 若不是列表页面弹框可删除
import { getTerminalSelectTree } from '@/api/device-boot/Business' import { getTerminalSelectTree } from '@/api/device-boot/Business'
import { addRunningDevice, quitRunningDeviceUpdate } from '@/api/supervision-boot/device/quitRunningDev' import { addRunningDevice, quitRunningDeviceUpdate } from '@/api/supervision-boot/device/quitRunningDev'
//下拉数据源 //下拉数据源
const sourceData = ref() const sourceData = ref()
const deviceList = ref() const deviceList = ref()
@@ -70,7 +79,8 @@ const formData = reactive({
//form表单校验规则 //form表单校验规则
const rules = { const rules = {
deviceId: [{ required: true, message: '设备不能为空', trigger: 'change' }], deviceId: [{ required: true, message: '设备不能为空', trigger: 'change' }],
deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }] deviceType: [{ required: true, message: '设备类型不能为空', trigger: 'change' }],
propertyNo: [{ required: true, message: '请输入退役原因', trigger: 'blur' }]
} }
const resetForm = () => { const resetForm = () => {
if (formRef.value) { if (formRef.value) {
@@ -133,7 +143,6 @@ const open = async (text: string, tempData?: any) => {
dialogVisible.value = true dialogVisible.value = true
} }
/** /**
* 提交用户表单数据 * 提交用户表单数据
*/ */
@@ -152,7 +161,6 @@ const submit = () => {
tableStore.index() tableStore.index()
dialogVisible.value = false dialogVisible.value = false
} }
} }
}) })
} }

View File

@@ -37,7 +37,7 @@ import { ElMessageBox } from 'element-plus/es'
import { cancelQuitRunningDevice } from '@/api/supervision-boot/device/quitRunningDev' import { cancelQuitRunningDevice } from '@/api/supervision-boot/device/quitRunningDev'
defineOptions({ defineOptions({
name: 'businessUser' name: 'supervision/retire'
}) })
const { push } = useRouter() const { push } = useRouter()
const deviceQuitPopup = ref() const deviceQuitPopup = ref()
@@ -62,7 +62,7 @@ const tableStore = new TableStore({
{ title: '供电公司', field: 'gdName', minWidth: 130 }, { title: '供电公司', field: 'gdName', minWidth: 130 },
{ title: '变电站', field: 'subName', minWidth: 130 }, { title: '变电站', field: 'subName', minWidth: 130 },
{ title: '设备名称', field: 'deviceName', minWidth: 130 }, { title: '设备名称', field: 'deviceName', minWidth: 130 },
{ title: '资产编号', field: 'propertyNo', minWidth: 130 }, { title: '退役原因', field: 'propertyNo', minWidth: 130 },
{ {
title: '设备状态', field: 'deviceStatus', minWidth: 130, title: '设备状态', field: 'deviceStatus', minWidth: 130,
render: 'tag', render: 'tag',

View File

@@ -148,7 +148,7 @@ const tableStore = new TableStore({
copySenderId: "", copySenderId: "",
copySenderName: "", copySenderName: "",
techSupvBasis: "GB/T 12325-2008《电能质量 供电电压偏差》 GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量 公用电网谐波》 GB/T15543-2008《电能质量三相电压不平衡》GB/T15945-2008《电能质量 电力系统频率偏差》GB/T 18481-2001《电能质量暂时过电压和瞬态过电压》GB/T30137-2013 《电能质量 电压暂降与短时中断》", techSupvBasis: "GB/T 12325-2008《电能质量 供电电压偏差》 GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量 公用电网谐波》 GB/T15543-2008《电能质量三相电压不平衡》GB/T15945-2008《电能质量 电力系统频率偏差》GB/T 18481-2001《电能质量暂时过电压和瞬态过电压》GB/T30137-2013 《电能质量 电压暂降与短时中断》",
problemDesc: "国网北电科院、国网沧州供电公司组织对220千伏边务站开展电能质量专项监督时发现235庄边线电压总谐波畸变率最大值5.22%95%概率值4.85%3、5、7次谐波电压含有率最大值分别为2.71%、3.52%、2.35%95%概率值分别为2.53%、3.31%、2.22%不满足国标限制要求怀疑光伏电场内SVG存在缺陷。", problemDesc: "国网北电科院、国网沧州供电公司组织对220千伏边务站开展电能质量专项监督时发现235庄边线电压总谐波畸变率最大值5.22%95%概率值4.85%3、5、7次谐波电压含有率最大值分别为2.71%、3.52%、2.35%95%概率值分别为2.53%、3.31%、2.22%不满足国标限制要求怀疑光伏电场内SVG存在缺陷。",
dealAdvise: "220kV大张庄光伏电场相关管理单位组织排查光伏电场站内设备设备是否存在缺陷开展电能质量检测并向国网沧州供电公司技术监督办公室(设备部)反馈排查治理情况。", dealAdvise: "220kV大张庄光伏电场相关管理单位组织排查光伏电场站内设备设备是否存在缺陷开展电能质量检测并向国网沧州供电公司技术监督办公室(设备部)反馈排查治理情况。",
isUploadHead: 0 isUploadHead: 0
}, },

View File

@@ -0,0 +1,168 @@
<template>
<TableHeader area datePicker ref="TableHeaderRef">
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
<el-button icon="el-icon-Delete" type="primary">删除</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 新增 -->
<listForm ref="listFormRef" />
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } 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 listForm from './listForm.vue'
const dictData = useDictData()
const tableRef = ref()
const planAddRef = ref()
const listFormRef = ref()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/generalSurvey/getSurvey',
publicHeight: 65,
method: 'POST',
column: [
{ width: '60', type: 'checkbox' },
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'billNo', title: '单据编号', minWidth: '150' },
{ field: 'billName', title: '单据名称', minWidth: '150' },
{ field: 'createrOrgName', title: '编制单位名称', minWidth: '150' },
{ field: 'specialityType', title: '所属专业', minWidth: '150' },
{ field: 'orgName', title: '责任单位名称', minWidth: '150' },
{ field: 'receiveUserName', title: '接收人名称', minWidth: '150' },
{ field: 'createrTime', title: '编制时间', minWidth: '150' },
{ field: 'managerDeptName', title: '主管部门名称', minWidth: '150' },
{ field: 'mainSenderName', title: '主送单位名称', minWidth: '150' },
{ field: 'copySenderName', title: '抄送单位名称', minWidth: '150' },
{ field: 'techSupvBasis', title: '依据标准', minWidth: '150' },
{ field: 'problemDesc', title: '问题描述', minWidth: '150' },
{ field: 'dealAdvise', title: '处理建议', minWidth: '150' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
fixed: 'right',
buttons: [
{
name: 'productSetting',
title: '反馈数据',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
// planAddRef.value.open('查看计划', row)
}
},
{
name: 'edit',
title: '修改',
type: 'warning',
icon: 'el-icon-Open',
render: 'basicButton',
click: row => {
// deviceQuitPopup.value.open('重新发起退运', row)
planAddRef.value.open('重新发起计划', row)
}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [
{
alarmId: '0323fa13767c537d037cd755cc1b728e',
provinceId: '13B9B47F1E483324E05338297A0A0595',
provinceName: '国网河北电力有限公司',
billType: 'eba0f69f3a36826a1771d813a6eee0fc',
billNo: '沧供[预]2023年--09002号',
billName: '220kV东辛光伏电场技术监督工作预警单',
createrOrgId: '13B9B47F2C183324E05338297A0A0595',
createrOrgName: '国网沧州供电公司',
specialityType: '电能质量',
orgId: '13B9B47F2D623324E05338297A0A0595',
orgName: '国网海兴县供电公司',
receiveUserId: null,
receiveUserName: '',
createrTime: '2023-09-28 00:00:00',
time: null,
managerDeptId: '13B9B47F2C183324E05338297A0A0595',
managerDeptName: '国网沧州供电公司',
mainSenderId: '13B9B47F2D623324E05338297A0A0595',
mainSenderName: '国网海兴县供电公司',
copySenderId: '',
copySenderName: '',
techSupvBasis:
'GB/T 12325-2008 《电能质量 供电电压偏差》 GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量 公用电网谐波》 GB/T 15543-2008《电能质量三相电压不平衡》GB/T15945-2008《电能质量 电力系统频率偏差》GB/T 18481-2001《电能质量暂时过电压和瞬态过电压》GB/T30137-2013《电能质量 电压暂降与短时中断》',
problemDesc:
'国网冀北电科院、国网沧州供电公司组织对220千伏常庄站开展电能质量专项监督时发现246东常线电压总谐波畸变率最大值6.37%95%概率值6.24%3、5、7次谐波电压含有率最大值分别为4.31%、3.62%、2.61%95%概率值分别为4.2%、3.53%、2.51%不满足国标限制要求怀疑光伏电场内SVG存在缺陷。',
dealAdvise:
'220kV东辛光伏电场相关管理单位组织排查光伏电场站内设备设备是否存在缺陷开展电能质量检测并向国网沧州供电公司技术监督办公室(设备部)反馈排查治理情况。',
isUploadHead: 0
},
{
alarmId: '054deafbbcfc29f8dff517d31966657b',
provinceId: '13B9B47F1E483324E05338297A0A0595',
provinceName: '国网河北电力有限公司',
billType: 'eba0f69f3a36826a1771d813a6eee0fc',
billNo: '[预]2023—165号',
billName: '关于220kV赞皇龙门光伏站谐波电流指标超标预警',
createrOrgId: '13B9B47F1F223324E05338297A0A0595',
createrOrgName: '国网石家庄供电公司',
specialityType: '电能质量',
orgId: '13B9B47F1F223324E05338297A0A0595',
orgName: '国网石家庄供电公司',
receiveUserId: null,
receiveUserName: '',
createrTime: '2023-09-25 00:00:00',
time: null,
managerDeptId: '13B9B47F1F773324E05338297A0A0595',
managerDeptName: '国网石家庄供电公司本部',
mainSenderId: '',
mainSenderName: '',
copySenderId: '',
copySenderName: '',
techSupvBasis: 'GB/T 14549-1993《电能质量-公用电网谐波》',
problemDesc:
'国网冀北电科院、国网石家庄供电公司于2023年9月对220千伏赞皇龙门光伏站开展电能质量专项监督时发现220kV龙万线赞皇龙门光伏站并网线路ABC三相的5次谐波电流指标95%概率值分别为为17.27A、16.25A、16.85A不满足国标限值7.09A的要求。',
dealAdvise:
'赞皇龙门光伏站开展电能质量指标测试及分析,排查自有发电、用电设备是否存在谐波源,并向国网石家庄供电公司技术监督办公室(设备部)反馈排查治理情况。',
isUploadHead: 0
}
]
}
})
provide('tableStore', tableStore)
// 新增计划
const add = () => {
// title.value = '普测计划新增'
listFormRef.value.open('新增预警单')
}
onMounted(() => {
tableStore.index()
})
</script>
<style scoped lang="scss"></style>

View File

@@ -1,170 +0,0 @@
<template>
<TableHeader area datePicker ref="TableHeaderRef">
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="add">新增</el-button>
<el-button icon="el-icon-Delete" type="primary">删除</el-button>
</template>
</TableHeader ref="tableRef">
<Table ref="tableRef" />
<!-- 新增 -->
<listForm ref="listFormRef" />
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } 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 listForm from "./listForm.vue"
const dictData = useDictData()
const tableRef = ref()
const planAddRef = ref()
const listFormRef = ref()
const TableHeaderRef = ref()
const tableStore = new TableStore({
url: '/supervision-boot/generalSurvey/getSurvey',
publicHeight: 65,
method: 'POST',
column: [
{ width: '60', type: 'checkbox' },
{
title: '序号',
type: 'seq',
align: 'center',
width: 60,
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'billNo', title: '单据编号', minWidth: '150' },
{ field: 'billName', title: '单据名称', minWidth: '150' },
{ field: 'createrOrgName', title: '编制单位名称', minWidth: '150' },
{ field: 'specialityType', title: '所属专业', minWidth: '150' },
{ field: 'orgName', title: '责任单位名称', minWidth: '150' },
{ field: 'receiveUserName', title: '接收人名称', minWidth: '150' },
{ field: 'createrTime', title: '编制时间', minWidth: '150' },
{ field: 'managerDeptName', title: '主管部门名称', minWidth: '150' },
{ field: 'mainSenderName', title: '主送单位名称', minWidth: '150' },
{ field: 'copySenderName', title: '抄送单位名称', minWidth: '150' },
{ field: 'techSupvBasis', title: '依据标准', minWidth: '150' },
{ field: 'problemDesc', title: '问题描述', minWidth: '150' },
{ field: 'dealAdvise', title: '处理建议', minWidth: '150' },
{
title: '操作',
width: '180',
align: 'center',
render: 'buttons',
fixed: 'right',
buttons: [
{
name: 'productSetting',
title: '反馈数据',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
// planAddRef.value.open('查看计划', row)
}
},
{
name: 'edit',
title: '修改',
type: 'warning',
icon: 'el-icon-Open',
render: 'basicButton',
click: row => {
// deviceQuitPopup.value.open('重新发起退运', row)
planAddRef.value.open('重新发起计划', row)
}
},
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
tableStore.table.params.currentPage = tableStore.table.params.pageNum
},
loadCallback: () => {
tableStore.table.data = [{
alarmId: "0323fa13767c537d037cd755cc1b728e",
provinceId: "13B9B47F1E483324E05338297A0A0595",
provinceName: "国网河北电力有限公司",
billType: "eba0f69f3a36826a1771d813a6eee0fc",
billNo: "沧供[预]2023年--09002号",
billName: "220kV东辛光伏电场技术监督工作预警单",
createrOrgId: "13B9B47F2C183324E05338297A0A0595",
createrOrgName: "国网沧州供电公司",
specialityType: "电能质量",
orgId: "13B9B47F2D623324E05338297A0A0595",
orgName: "国网海兴县供电公司",
receiveUserId: null,
receiveUserName: "",
createrTime: "2023-09-28 00:00:00",
time: null,
managerDeptId: "13B9B47F2C183324E05338297A0A0595",
managerDeptName: "国网沧州供电公司",
mainSenderId: "13B9B47F2D623324E05338297A0A0595",
mainSenderName: "国网海兴县供电公司",
copySenderId: "",
copySenderName: "",
techSupvBasis: "GB/T 12325-2008 《电能质量 供电电压偏差》 GB/T12326-2008《电能质量电压波动和闪变》GB/T14549-1993《电能质量 公用电网谐波》 GB/T 15543-2008《电能质量三相电压不平衡》GB/T15945-2008《电能质量 电力系统频率偏差》GB/T 18481-2001《电能质量暂时过电压和瞬态过电压》GB/T30137-2013《电能质量 电压暂降与短时中断》",
problemDesc: "国网河北电科院、国网沧州供电公司组织对220千伏常庄站开展电能质量专项监督时发现246东常线电压总谐波畸变率最大值6.37%95%概率值6.24%3、5、7次谐波电压含有率最大值分别为4.31%、3.62%、2.61%95%概率值分别为4.2%、3.53%、2.51%不满足国标限制要求怀疑光伏电场内SVG存在缺陷。",
dealAdvise: "220kV东辛光伏电场相关管理单位组织排查光伏电场站内设备设备是否存在缺陷开展电能质量检测并向国网沧州供电公司技术监督办公室(设备部)反馈排查治理情况。",
isUploadHead: 0
},
{
alarmId: "054deafbbcfc29f8dff517d31966657b",
provinceId: "13B9B47F1E483324E05338297A0A0595",
provinceName: "国网河北电力有限公司",
billType: "eba0f69f3a36826a1771d813a6eee0fc",
billNo: "[预]2023—165号",
billName: "关于220kV赞皇龙门光伏站谐波电流指标超标预警",
createrOrgId: "13B9B47F1F223324E05338297A0A0595",
createrOrgName: "国网石家庄供电公司",
specialityType: "电能质量",
orgId: "13B9B47F1F223324E05338297A0A0595",
orgName: "国网石家庄供电公司",
receiveUserId: null,
receiveUserName: "",
createrTime: "2023-09-25 00:00:00",
time: null,
managerDeptId: "13B9B47F1F773324E05338297A0A0595",
managerDeptName: "国网石家庄供电公司本部",
mainSenderId: "",
mainSenderName: "",
copySenderId: "",
copySenderName: "",
techSupvBasis: "GB/T 14549-1993《电能质量-公用电网谐波》",
problemDesc: "国网河北电科院、国网石家庄供电公司于2023年9月对220千伏赞皇龙门光伏站开展电能质量专项监督时发现220kV龙万线赞皇龙门光伏站并网线路ABC三相的5次谐波电流指标95%概率值分别为为17.27A、16.25A、16.85A不满足国标限值7.09A的要求。",
dealAdvise: "赞皇龙门光伏站开展电能质量指标测试及分析,排查自有发电、用电设备是否存在谐波源,并向国网石家庄供电公司技术监督办公室(设备部)反馈排查治理情况。",
isUploadHead: 0
},
]
}
})
tableStore.table.params.status = ''
provide('tableStore', tableStore)
// 新增计划
const add = () => {
// title.value = '普测计划新增'
listFormRef.value.open('新增预警单')
}
onMounted(() => {
tableStore.index()
})
</script>
<style scoped lang="scss"></style>

View File

@@ -29,13 +29,7 @@
<el-input v-model="form.orgName" placeholder="请输入责任单位名称" clearable></el-input> <el-input v-model="form.orgName" placeholder="请输入责任单位名称" clearable></el-input>
</el-form-item> </el-form-item>
<el-form-item label="接收人名称:" prop="receiveUserId"> <el-form-item label="接收人名称:" prop="receiveUserId">
<el-select <el-select v-model="form.receiveUserId" clearable placeholder="请选择接收人名称">
v-model="form.receiveUserId"
clearable
placeholder="请选择接收人名称"
@change="changeFn"
@clear="clear('receiveUserId', 'receiveUserName')"
>
<el-option <el-option
v-for="item in ImplementationPeople" v-for="item in ImplementationPeople"
:key="item.id" :key="item.id"
@@ -97,6 +91,9 @@ const dictData = useDictData()
const manufactorList = dictData.getBasicData('Dev_Manufacturers') const manufactorList = dictData.getBasicData('Dev_Manufacturers')
const dialogVisible = ref(false) const dialogVisible = ref(false)
const title: any = ref('') const title: any = ref('')
const ImplementationPeople = ref([])
const Categories = ref([])
const Major = ref([])
const form: any = ref({ const form: any = ref({
billName: '', billName: '',
billNo: '', billNo: '',

View File

@@ -5,7 +5,7 @@
<el-tab-pane label="技术监督管理" name="2"><technology v-if="activeName == '2'"/></el-tab-pane> --> <el-tab-pane label="技术监督管理" name="2"><technology v-if="activeName == '2'"/></el-tab-pane> -->
<el-tab-pane label="预警单列表" name="3"> <el-tab-pane label="预警单列表" name="3">
<earlyWarning v-if="activeName == '3'"/> <earlyWarn v-if="activeName == '3'" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="告警单列表" name="4"><alarm v-if="activeName == '4'" /></el-tab-pane> <el-tab-pane label="告警单列表" name="4"><alarm v-if="activeName == '4'" /></el-tab-pane>
</el-tabs> </el-tabs>
@@ -15,13 +15,13 @@
<script setup lang="ts"> <script setup lang="ts">
import overview from './components/overview.vue' import overview from './components/overview.vue'
import technology from './components/technology.vue' import technology from './components/technology.vue'
import earlyWarning from './components/earlyWarning.vue' import earlyWarn from './components/earlyWarn.vue'
import alarm from './components/alarm.vue' import alarm from './components/alarm.vue'
import { onMounted, reactive, ref, provide } from 'vue' import { onMounted, reactive, ref, provide } from 'vue'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
defineOptions({ defineOptions({
name: 'supervision/harmonicmanagement' name: 'supervision/supervision/manage'
}) })
const activeName = ref('3') const activeName = ref('3')
const Statistics = ref() const Statistics = ref()

View File

@@ -1,20 +1,19 @@
<template> <template>
<div> <div>
<TableHeader area ref='TableHeaderRef'> <TableHeader area ref="TableHeaderRef">
<template #select> <template #select>
<el-form-item label='信息查询'> <el-form-item label="信息查询">
<el-input v-model='tableStore.table.params.searchValue' clearable></el-input> <el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
</el-form-item> </el-form-item>
</template> </template>
<template #operation> <template #operation>
<el-button icon='el-icon-Download' type='primary'>导出</el-button> <el-button icon="el-icon-Download" type="primary">导出</el-button>
</template> </template>
</TableHeader> </TableHeader>
<Table ref='tableRef' /> <Table ref="tableRef" />
</div> </div>
</template> </template>
<script setup lang='ts'> <script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue' import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
@@ -32,6 +31,7 @@ const areaOptionList = dictData.getBasicData('jibei_area')
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/device-boot/runManage/getLineLedger', url: '/device-boot/runManage/getLineLedger',
publicHeight: 65, publicHeight: 65,
isWebPaging: true,
method: 'POST', method: 'POST',
column: [ column: [
/* { title: '序号', type: 'seq', width: 80 },*/ /* { title: '序号', type: 'seq', width: 80 },*/
@@ -51,23 +51,22 @@ const tableStore = new TableStore({
{ field: 'lineName', title: '监测点名称', minWidth: 130 }, { field: 'lineName', title: '监测点名称', minWidth: 130 },
{ field: 'scale', title: '监测点电压等级', minWidth: 120 }, { field: 'scale', title: '监测点电压等级', minWidth: 120 },
{ field: 'loadType', title: '干扰源类型', minWidth: 120 }, { field: 'loadType', title: '干扰源类型', minWidth: 120 },
{ field: 'objName', title: '监测对象名称', minWidth: 180 }, { field: 'objName', title: '监测对象名称', minWidth: 180 },
{ {
field: 'shortCapacity', field: 'shortCapacity',
title: '最小短路容量(MVA)', title: '最小短路容量(MVA)',
minWidth: 150, minWidth: 150
}, },
{ {
field: 'devCapacity', field: 'devCapacity',
title: '供电设备容量(MVA )', title: '供电设备容量(MVA )',
minWidth: 150, minWidth: 150
}, },
{ {
field: 'dealCapacity', field: 'dealCapacity',
title: '用户协议容量(MVA)', title: '用户协议容量(MVA)',
minWidth: 150, minWidth: 150
}, },
/* { field: 'comFlag', title: '通讯状态 ', minWidth: 120 },*/ /* { field: 'comFlag', title: '通讯状态 ', minWidth: 120 },*/
{ field: 'id', title: '监测点序号', minWidth: 90 }, { field: 'id', title: '监测点序号', minWidth: 90 },
@@ -76,14 +75,13 @@ const tableStore = new TableStore({
{ {
field: 'voltageDev', field: 'voltageDev',
title: '电压偏差上限(%)', title: '电压偏差上限(%)',
minWidth: 120, minWidth: 120
}, },
{ {
field: 'uvoltageDev', field: 'uvoltageDev',
title: '电压偏差下限(%)', title: '电压偏差下限(%)',
minWidth: 120, minWidth: 120
}, }
/* { /* {
title: '操作', title: '操作',
@@ -113,16 +111,11 @@ const tableStore = new TableStore({
name: '电网拓扑', name: '电网拓扑',
code: 'Power_Network' code: 'Power_Network'
} }
} }
}) })
provide('tableStore', tableStore) provide('tableStore', tableStore)
onMounted(() => { onMounted(() => {
tableStore.index() tableStore.index()
}) })
</script> </script>

View File

@@ -0,0 +1,371 @@
<template>
<div class="default-main">
<el-descriptions :column="2" border>
<el-descriptions-item label="填报人">
{{ detailData.reporter }}
</el-descriptions-item>
<el-descriptions-item label="填报日期">
{{ formatDate(detailData.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label="填报部门">
{{ detailData.orgName }}
</el-descriptions-item>
<el-descriptions-item label="工程投产日期">
{{ formatDate(detailData.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label="所属地市">
{{ detailData.city }}
</el-descriptions-item>
<el-descriptions-item label="用户状态">
{{
userStateList.find(item => {
return item.value == detailData.userStatus
})?.label
}}
</el-descriptions-item>
<el-descriptions-item label="关联干扰源">
{{ detailData.userName }}
</el-descriptions-item>
<el-descriptions-item label="关联设备">
{{ detailData.monitoringTerminalName }}
</el-descriptions-item>
<el-descriptions-item label="监测点名称">
{{ detailData.lineName }}
</el-descriptions-item>
<el-descriptions-item label="监测点电压等级">
{{ detailData.voltageLevel }}
</el-descriptions-item>
<el-descriptions-item label="接入母线">
{{ detailData.connectedBus }}
</el-descriptions-item>
<el-descriptions-item label="短路容量">
{{ detailData.shortCapacity }}
</el-descriptions-item>
<el-descriptions-item label="协议容量">
{{ detailData.dealCapacity }}
</el-descriptions-item>
<el-descriptions-item label="设备容量">
{{ detailData.devCapacity }}
</el-descriptions-item>
<el-descriptions-item label="基准容量">
{{ detailData.standardCapacity }}
</el-descriptions-item>
<el-descriptions-item label="CT变比">
{{ detailData.ctRatio }}
</el-descriptions-item>
<el-descriptions-item label="PT变比">
{{ detailData.ptRatio }}
</el-descriptions-item>
<el-descriptions-item label="监测点编码">
{{ detailData.lineId }}
</el-descriptions-item>
<el-descriptions-item label="测量间隔">
{{ detailData.timeInterval }}
</el-descriptions-item>
<el-descriptions-item label="干扰源类型">
{{ detailData.loadType }}
</el-descriptions-item>
<el-descriptions-item label="干扰源类别">
{{ detailData.businessType }}
</el-descriptions-item>
<el-descriptions-item label="监测点性质">
{{ detailData.pointNature }}
</el-descriptions-item>
<el-descriptions-item label="是否参与统计">
{{ detailData.isStatistical=='0'?'是':'否' }}
</el-descriptions-item>
<el-descriptions-item label="对象名称(对端)">
{{ detailData.objName }}
</el-descriptions-item>
<el-descriptions-item label="电网侧变电站">
{{ detailData.powerSubstationName }}
</el-descriptions-item>
<el-descriptions-item label="是否并网点">
{{ detailData.isGridConnectionPoint=='0'?'是':'否' }}
</el-descriptions-item>
<el-descriptions-item label="电压偏差上限">
{{ detailData.voltageDeviationUpperLimit }}
</el-descriptions-item>
<el-descriptions-item label="电压偏差下限">
{{ detailData.voltageDeviationLowerLimit }}
</el-descriptions-item>
<el-descriptions-item label="监测点运行状态">
{{ detailData.operationStatus }}
</el-descriptions-item>
<!--文件地址-->
<el-descriptions-item label="监测点台账信息" v-if="detailData.lineFilePath">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.lineFilePath.url">
{{ detailData?.lineFilePath.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="主接线图" v-if="detailData?.mainWiringDiagram">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.mainWiringDiagram.url">
{{ detailData?.mainWiringDiagram.name }}
</a>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref, reactive } from 'vue'
import { useRoute } from 'vue-router'
import { formatDate } from '@/utils/formatTime'
import { propTypes } from '@/utils/propTypes'
import { getTempLineDetailsById } from '@/api/supervision-boot/monitorpoint/index'
import { getDictTreeById } from '@/api/system-boot/dictTree'
import { useDictData } from '@/stores/dictData'
import { getFileNameAndFilePath } from '@/api/system-boot/file'
import { Link } from '@element-plus/icons-vue'
defineOptions({ name: 'BpmUserReportDetail' })
const { query } = useRoute() // 查询参数
const props = defineProps({
id: propTypes.string.def(undefined)
})
const detailLoading = ref(false) // 表单的加载中
const detailData = ref<any>({}) // 详情数据
const queryId = query.id as unknown as string // 从 URL 传递过来的 id 编号
//用户状态数组
const userStateList = reactive([
{
label: '可研',
value: '0'
},
{
label: '建设',
value: '1'
},
{
label: '运行',
value: '2'
},
{
label: '退运',
value: '3'
}
])
const dictData = useDictData()
//字典获取所属地市
const areaOptionList = dictData.getBasicData('jibei_area')
//定义监测装置安装位置下拉框数据
const monitoringDeviceInstallationPositionList = [
{
id: '0',
name: '电网侧'
},
{
id: '1',
name: '用户侧'
}
]
//定义召唤标志下拉框数据
const summonFlagList = [
{
id: '0',
name: '周期触发'
},
{
id: '1',
name: '变为触发'
}
]
//定义终端模型下拉框数据
const terminalModelList = [
{
id: '0',
name: '虚拟设备'
},
{
id: '1',
name: '虚拟设备'
},
{
id: '2',
name: '虚拟设备'
}
]
//定义通讯状态下拉框数据
const communicationStatusList = [
{
id: '0',
name: '中断'
},
{
id: '1',
name: '正常'
}
]
//字典获取监测点电压等级
const voltageLevelList = dictData.getBasicData('Dev_Voltage_Stand')
//字典获取数据类型
const dataTypeList = dictData.getBasicData('System_Type')
//字典获取终端型号
const terminalTypeList = dictData.getBasicData('Dev_Type')
//字典获取电压互感器类型
const voltageTransformerTypeList = dictData.getBasicData('Voltage_Transformer')
//字典获取中性点接线方式
const neutralPointWiringMethodList = dictData.getBasicData('Neutral_Point')
//字典获取所属前置机
const frontEndMachineList = dictData.getBasicData('Front_Type')
//字典获取终端接线方式类型
const terminalWiringMethodTypeList = dictData.getBasicData('Dev_Connect')
//字典获取厂家
const manufacturerList = dictData.getBasicData('Dev_Manufacturers')
/** 获得数据 */
const getInfo = async () => {
detailLoading.value = true
try {
await getTempLineDetailsById({ id: props.id || queryId }).then(res => {
detailData.value = res.data
console.log(detailData.value, '++++获取监测点详情数据+++++')
getFileName()
})
} finally {
detailLoading.value = false
}
}
const getFileName = async () => {
//验收检验报告
if (detailData.value.acceptanceInspectionReport) {
await getFileNamePath(detailData.value.acceptanceInspectionReport, 'acceptanceInspectionReport')
}
//验收检验报告单
if (detailData.value.acceptanceInspectionReportSingle) {
await getFileNamePath(detailData.value.acceptanceInspectionReportSingle, 'acceptanceInspectionReportSingle')
}
//出厂检验报告
if (detailData.value.factoryInspectionReport) {
await getFileNamePath(detailData.value.factoryInspectionReport, 'factoryInspectionReport')
}
//信息安全检测报告
if (detailData.value.informationSecurityTestReport) {
await getFileNamePath(detailData.value.informationSecurityTestReport, 'informationSecurityTestReport')
}
//监测点台账信息
if (detailData.value.lineFilePath) {
await getFileNamePath(detailData.value.lineFilePath, 'lineFilePath')
}
//其他附件
if (detailData.value.otherAttachments) {
await getFileNamePath(detailData.value.otherAttachments, 'otherAttachments')
}
//性能检测报告
if (detailData.value.performanceTestReport) {
await getFileNamePath(detailData.value.performanceTestReport, 'performanceTestReport')
}
//型式实验报告
if (detailData.value.typeExperimentReport) {
await getFileNamePath(detailData.value.typeExperimentReport, 'typeExperimentReport')
}
//其他附件
// if (detailData.value.additionalAttachments) {
// getFileNamePath(detailData.value.additionalAttachments, 'additionalAttachments')
// }
}
//根据文件名请求
const getFileNamePath = async (val: any, pathName: any) => {
await getFileNameAndFilePath({ filePath: val }).then(res => {
console.log(111111111)
if (res.data) {
//可研报告
if (pathName == 'acceptanceInspectionReport' && detailData.value.acceptanceInspectionReport) {
detailData.value.acceptanceInspectionReport = {
name: res.data.fileName,
url: res.data.url
}
}
//终端台账信息
else if (
pathName == 'acceptanceInspectionReportSingle' &&
detailData.value.acceptanceInspectionReportSingle
) {
detailData.value.acceptanceInspectionReportSingle = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估报告
else if (pathName == 'factoryInspectionReport' && detailData.value.factoryInspectionReport) {
detailData.value.factoryInspectionReport = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估评审意见报告
else if (pathName == 'informationSecurityTestReport' && detailData.value.informationSecurityTestReport) {
detailData.value.informationSecurityTestReport = {
name: res.data.fileName,
url: res.data.url
}
}
//用户接入变电站主接线示意图
else if (pathName == 'lineFilePath' && detailData.value.lineFilePath) {
detailData.value.lineFilePath = {
name: res.data.fileName,
url: res.data.url
}
}
//主要敏感设备清单
else if (pathName == 'otherAttachments' && detailData.value.otherAttachments) {
detailData.value.otherAttachments = {
name: res.data.fileName,
url: res.data.url
}
}
//抗扰度测试报告
else if (pathName == 'performanceTestReport' && detailData.value.performanceTestReport) {
detailData.value.performanceTestReport = {
name: res.data.fileName,
url: res.data.url
}
}
//背景电能质量测试报告
else if (pathName == 'typeExperimentReport' && detailData.value.typeExperimentReport) {
detailData.value.typeExperimentReport = {
name: res.data.fileName,
url: res.data.url
}
}
//其他附件
else if (pathName == 'additionalAttachments' && detailData.value.additionalAttachments) {
detailData.value.additionalAttachments = {
name: res.data.fileName,
url: res.data.url
}
}
}
})
}
defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗
/** 初始化 **/
onMounted(() => {
getInfo()
})
</script>
<style lang="scss">
.default-main {
height: calc(100vh - 100px);
overflow: auto;
}
::v-deep.el-icon svg {
margin: 5px !important;
position: absolute !important;
top: 20px !important;
}
</style>

View File

@@ -0,0 +1,217 @@
<!---终端入网检测-->
<template>
<TableHeader area datePicker ref="TableHeaderRef">
<!-- <template #select>
<el-form-item label="工程名称">
<el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
</el-form-item>
<el-form-item label="所属地市">
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择所属地市">
<el-option
v-for="item in areaOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</template> -->
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</el-button>
<!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> -->
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 新增弹框 -->
<addForm ref="addForms" @onSubmit="tableStore.index()"></addForm>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useRouter } from 'vue-router'
import { useDictData } from '@/stores/dictData'
import { getLoadTypeUserList } from '@/api/process-boot/interference'
import addForm from './addForm.vue'
const dictData = useDictData()
const { push } = useRouter()
const TableHeaderRef = ref()
const tableRef = ref()
const areaOptionList = dictData.getBasicData('jibei_area')
const ruleFormRef = ref()
const show: any = ref(false)
const fileList = ref([])
const tableStore = new TableStore({
url: '/supervision-boot/tempLine/list',
publicHeight: 65,
method: 'POST',
column: [
{ title: '序号', type: 'seq', width: 80 },
{ field: 'orgName', title: '填报部门名称' , minWidth: 170 },
{ field: 'reportDate', title: '填报日期', minWidth: 170},
{ field: 'reporter', title: '填报人', minWidth: 80 },
{
field: 'status',
title: '审核状态',
minWidth: 100,
render: 'tag',
custom: {
1: 'primary',
2: 'success',
3: 'danger',
4: 'warning'
},
replaceValue: {
1: '审批中',
2: '审批通过',
3: '审批不通过',
4: '已取消'
}
},
{ field: 'monitoringTerminalName', title: '设备名称', minWidth: 170 },
{ field: 'substation', title: '所属变电站', minWidth: 170 },
// {
// field: 'userType',
// title: '用户性质',
// minWidth: 150,
// formatter: (obj: any) => {
// const userType = obj.row.userType
// return getUserTypeName(userType)
// }
// },
// { field: 'informationSecurityTestReport', title: '信息安全检测报告', minWidth: 170 },
// { field: 'otherAttachments', title: '其他附件', minWidth: 170 },
// { field: 'orgName', title: '填报部门名称'},
// { field: 'performanceTestReport', title: '性能检测报告', minWidth: 170 },
// {
// field: 'userStatus',
// title: '用户状态',
// minWidth: 100,
// render: 'tag',
// custom: {
// 0: 'primary',
// 1: 'primary',
// 2: 'success',
// 3: 'warning'
// },
// replaceValue: {
// 0: '可研',
// 1: '建设',
// 2: '运行',
// 3: '退运'
// }
// },
// { field: 'substation', title: '变电站', minWidth: 100 },
// { field: 'createTime', title: '开始时间', minWidth: 170 },
{
title: '操作',
minWidth: 150,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '流程详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
handleAudit(row.processInstanceId)
}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
})
// tableStore.table.params.loadType = ''
// tableStore.table.params.userName = ''
// tableStore.table.params.fileUploadflag = ''
provide('tableStore', tableStore)
const addForms = ref()
const addFormModel = () => {
setTimeout(() => {
addForms.value.open()
}, 0);
}
const exportEvent = () => {
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
getLoadTypeUserList(form).then(res => {
tableRef.value.getRef().exportData({
filename: '未建档非线性用户', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
})
})
}
onMounted(() => {
tableStore.index()
})
/** 处理审批按钮 */
const handleAudit = (instanceId: any) => {
push({
name: 'BpmProcessInstanceDetail',
query: {
id: instanceId
}
})
}
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
</script>
<style scoped lang="scss">
:deep(.el-upload-list__item) {
width: 400px;
}
::v-deep .el-input__wrapper {
// width: 200px !important;
}
</style>

View File

@@ -0,0 +1,494 @@
<template>
<div class="default-main">
<el-descriptions :column="2" border>
<el-descriptions-item label="填报人">
{{ detailData.reporter }}
</el-descriptions-item>
<el-descriptions-item label="填报日期">
{{ formatDate(detailData.reportDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<el-descriptions-item label="填报部门">
{{ detailData.orgName }}
</el-descriptions-item>
<el-descriptions-item label="工程投产日期">
{{ formatDate(detailData.expectedProductionDate, 'YYYY-MM-DD') }}
</el-descriptions-item>
<!-- <el-descriptions-item label="所属地市">
{{ detailData.city }}
</el-descriptions-item> -->
<el-descriptions-item label="用户状态">
{{
userStateList.find(item => {
return item.value == detailData.userStatus
})?.label
}}
</el-descriptions-item>
<!--文件地址-->
<el-descriptions-item label="终端台账信息" v-if="detailData.lineFilePath">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.lineFilePath.url">
{{ detailData?.lineFilePath.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="所属供电公司">
{{
areaOptionList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.powerCompany
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="所属变电站">
{{ detailData.supervisionTempDeviceReport?.substation }}
</el-descriptions-item>
<el-descriptions-item label="变电站电压等级">
{{
voltageLevelList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.substationVoltageLevel
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="检测终端编码">
{{ detailData.supervisionTempDeviceReport?.monitoringTerminalCode }}
</el-descriptions-item>
<el-descriptions-item label="检测终端名称">
{{ detailData.supervisionTempDeviceReport?.monitoringTerminalName }}
</el-descriptions-item>
<el-descriptions-item label="电压互感器类型">
{{
voltageTransformerTypeList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.voltageTransformerType
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="终端接线方式类型">
{{
terminalWiringMethodTypeList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.terminalWiringMethodType
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="中性点接线方式">
{{
neutralPointWiringMethodList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.neutralPointWiringMethod
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="厂家">
{{
manufacturerList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.manufacturer
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="厂家设备编号">
{{ detailData.supervisionTempDeviceReport?.manufacturerDeviceNumber }}
</el-descriptions-item>
<el-descriptions-item label="终端IP">
{{ detailData.supervisionTempDeviceReport?.terminalIp }}
</el-descriptions-item>
<el-descriptions-item label="终端型号">
{{
terminalTypeList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.terminalType
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="端口">
{{ detailData.supervisionTempDeviceReport?.terminalPort }}
</el-descriptions-item>
<el-descriptions-item label="所属前置机">
{{
frontEndMachineList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.frontEndMachine
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="本次终端检测时间">
{{ detailData.supervisionTempDeviceReport?.currentTerminalDetectionTime.replace('T',' ') }}
</el-descriptions-item>
<el-descriptions-item label="下次终端定检时间">
{{ detailData.supervisionTempDeviceReport?.nextTerminalInspectionTime.replace('T',' ') }}
</el-descriptions-item>
<el-descriptions-item label="识别码">
{{ detailData.supervisionTempDeviceReport?.identificationCode }}
</el-descriptions-item>
<el-descriptions-item label="终端秘钥">
{{ detailData.supervisionTempDeviceReport?.terminalSecretKey }}
</el-descriptions-item>
<el-descriptions-item label="经度">
{{ detailData.supervisionTempDeviceReport?.longitude }}
</el-descriptions-item>
<el-descriptions-item label="纬度">
{{ detailData.supervisionTempDeviceReport?.latitude }}
</el-descriptions-item>
<el-descriptions-item label="终端模型">
{{
terminalModelList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.terminalModel
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="数据类型">
{{
dataTypeList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.dataType
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="通讯状态">
{{
communicationStatusList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.communicationStatus
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="SIM卡号">
{{ detailData.supervisionTempDeviceReport?.simCardNumber }}
</el-descriptions-item>
<el-descriptions-item label="投运时间">
{{ detailData.supervisionTempDeviceReport?.commissioningTime.replace('T',' ') }}
</el-descriptions-item>
<el-descriptions-item label="数据更新时间">
{{ detailData.supervisionTempDeviceReport?.dataUpdateTime.replace('T',' ') }}
</el-descriptions-item>
<el-descriptions-item label="对时功能">
{{ detailData.supervisionTempDeviceReport?.timeSyncFunction=='0'?'否':detailData.supervisionTempDeviceReport?.timeSyncFunction=='1'?'是':'-' }}
</el-descriptions-item>
<el-descriptions-item label="电镀功能">
{{ detailData.supervisionTempDeviceReport?.electroplatingFunction=='0'?'否':detailData.supervisionTempDeviceReport?.electroplatingFunction=='1'?'是':'-' }}
</el-descriptions-item>
<el-descriptions-item label="监测装置安装位置">
{{
monitoringDeviceInstallationPositionList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.monitoringDeviceInstallationPosition
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="召唤标志">
{{
summonFlagList.find(item => {
return item.id == detailData.supervisionTempDeviceReport?.summonFlag
})?.name
}}
</el-descriptions-item>
<el-descriptions-item label="告警功能">
{{ detailData.supervisionTempDeviceReport?.alarmFunction=='0'?'否':detailData.supervisionTempDeviceReport?.alarmFunction=='1'?'是':'-' }}
</el-descriptions-item>
<el-descriptions-item label="合同号">
{{ detailData.supervisionTempDeviceReport?.contractNumber }}
</el-descriptions-item>
<el-descriptions-item label="监测点台账信息" v-if="detailData.factoryInspectionReport">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.factoryInspectionReport.url">
{{ detailData?.factoryInspectionReport.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="验收检验报告单" v-if="detailData?.informationSecurityTestReport">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.informationSecurityTestReport.url">
{{ detailData?.informationSecurityTestReport.name }}
</a>
</el-descriptions-item>
<el-descriptions-item label="验收检验报告" v-if="detailData?.otherAttachments">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.otherAttachments.url">{{ detailData?.otherAttachments.name }}</a>
</el-descriptions-item>
<el-descriptions-item label="型式实验报告" v-if="detailData?.performanceTestReport">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.performanceTestReport.url">{{ detailData?.performanceTestReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label="出厂检验报告" v-if="detailData?.typeExperimentReport">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.typeExperimentReport.url">{{ detailData?.typeExperimentReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label="性能检测报告" v-if="detailData?.performanceTestReport">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.performanceTestReport.url">{{ detailData?.performanceTestReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label="信息安全检测报告" v-if="detailData?.typeExperimentReport">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.typeExperimentReport.url">{{ detailData?.typeExperimentReport.name }}</a>
</el-descriptions-item>
<el-descriptions-item label="其他附件" v-if="detailData?.additionalAttachments">
<el-icon>
<Link />
</el-icon>
<a :href="detailData?.additionalAttachments.url">{{ detailData?.additionalAttachments.name }}</a>
</el-descriptions-item>
</el-descriptions>
</div>
</template>
<script lang="ts" setup>
import { onMounted, ref, reactive } from 'vue'
import { useRoute } from 'vue-router'
import { formatDate } from '@/utils/formatTime'
import { propTypes } from '@/utils/propTypes'
import { getTerminalDetailsById } from '@/api/supervision-boot/terminal/index'
import { getDictTreeById } from '@/api/system-boot/dictTree'
import { useDictData } from '@/stores/dictData'
import { getFileNameAndFilePath } from '@/api/system-boot/file'
import { Link } from '@element-plus/icons-vue'
defineOptions({ name: 'BpmUserReportDetail' })
const { query } = useRoute() // 查询参数
const props = defineProps({
id: propTypes.string.def(undefined)
})
const detailLoading = ref(false) // 表单的加载中
const detailData = ref<any>({}) // 详情数据
const queryId = query.id as unknown as string // 从 URL 传递过来的 id 编号
//用户状态数组
const userStateList = reactive([
{
label: '可研',
value: '0'
},
{
label: '建设',
value: '1'
},
{
label: '运行',
value: '2'
},
{
label: '退运',
value: '3'
}
])
const dictData = useDictData()
//字典获取所属地市
const areaOptionList = dictData.getBasicData('jibei_area')
//定义监测装置安装位置下拉框数据
const monitoringDeviceInstallationPositionList = [
{
id: '0',
name: '电网侧'
},
{
id: '1',
name: '用户侧'
}
]
//定义召唤标志下拉框数据
const summonFlagList = [
{
id: '0',
name: '周期触发'
},
{
id: '1',
name: '变为触发'
}
]
//定义终端模型下拉框数据
const terminalModelList = [
{
id: '0',
name: '虚拟设备'
},
{
id: '1',
name: '虚拟设备'
},
{
id: '2',
name: '虚拟设备'
}
]
//定义通讯状态下拉框数据
const communicationStatusList = [
{
id: '0',
name: '中断'
},
{
id: '1',
name: '正常'
}
]
//字典获取监测点电压等级
const voltageLevelList = dictData.getBasicData('Dev_Voltage_Stand')
//字典获取数据类型
const dataTypeList = dictData.getBasicData('System_Type')
//字典获取终端型号
const terminalTypeList = dictData.getBasicData('Dev_Type')
//字典获取电压互感器类型
const voltageTransformerTypeList = dictData.getBasicData('Voltage_Transformer')
//字典获取中性点接线方式
const neutralPointWiringMethodList = dictData.getBasicData('Neutral_Point')
//字典获取所属前置机
const frontEndMachineList = dictData.getBasicData('Front_Type')
//字典获取终端接线方式类型
const terminalWiringMethodTypeList = dictData.getBasicData('Dev_Connect')
//字典获取厂家
const manufacturerList = dictData.getBasicData('Dev_Manufacturers')
/** 获得数据 */
const getInfo = async () => {
detailLoading.value = true
try {
await getTerminalDetailsById({ id: props.id || queryId }).then(res => {
detailData.value = res.data
console.log(detailData.value, '+++++++++')
getFileName()
})
} finally {
detailLoading.value = false
}
}
const getFileName = async () => {
//验收检验报告
if (detailData.value.acceptanceInspectionReport) {
await getFileNamePath(detailData.value.acceptanceInspectionReport, 'acceptanceInspectionReport')
}
//验收检验报告单
if (detailData.value.acceptanceInspectionReportSingle) {
await getFileNamePath(detailData.value.acceptanceInspectionReportSingle, 'acceptanceInspectionReportSingle')
}
//出厂检验报告
if (detailData.value.factoryInspectionReport) {
await getFileNamePath(detailData.value.factoryInspectionReport, 'factoryInspectionReport')
}
//信息安全检测报告
if (detailData.value.informationSecurityTestReport) {
await getFileNamePath(detailData.value.informationSecurityTestReport, 'informationSecurityTestReport')
}
//监测点台账信息
if (detailData.value.lineFilePath) {
await getFileNamePath(detailData.value.lineFilePath, 'lineFilePath')
}
//其他附件
if (detailData.value.otherAttachments) {
await getFileNamePath(detailData.value.otherAttachments, 'otherAttachments')
}
//性能检测报告
if (detailData.value.performanceTestReport) {
await getFileNamePath(detailData.value.performanceTestReport, 'performanceTestReport')
}
//型式实验报告
if (detailData.value.typeExperimentReport) {
await getFileNamePath(detailData.value.typeExperimentReport, 'typeExperimentReport')
}
//其他附件
// if (detailData.value.additionalAttachments) {
// getFileNamePath(detailData.value.additionalAttachments, 'additionalAttachments')
// }
}
//根据文件名请求
const getFileNamePath = async (val: any, pathName: any) => {
await getFileNameAndFilePath({ filePath: val }).then(res => {
console.log(111111111)
if (res.data) {
//可研报告
if (pathName == 'acceptanceInspectionReport' && detailData.value.acceptanceInspectionReport) {
detailData.value.acceptanceInspectionReport = {
name: res.data.fileName,
url: res.data.url
}
}
//终端台账信息
else if (
pathName == 'acceptanceInspectionReportSingle' &&
detailData.value.acceptanceInspectionReportSingle
) {
detailData.value.acceptanceInspectionReportSingle = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估报告
else if (pathName == 'factoryInspectionReport' && detailData.value.factoryInspectionReport) {
detailData.value.factoryInspectionReport = {
name: res.data.fileName,
url: res.data.url
}
}
//预测评估评审意见报告
else if (pathName == 'informationSecurityTestReport' && detailData.value.informationSecurityTestReport) {
detailData.value.informationSecurityTestReport = {
name: res.data.fileName,
url: res.data.url
}
}
//用户接入变电站主接线示意图
else if (pathName == 'lineFilePath' && detailData.value.lineFilePath) {
detailData.value.lineFilePath = {
name: res.data.fileName,
url: res.data.url
}
}
//主要敏感设备清单
else if (pathName == 'otherAttachments' && detailData.value.otherAttachments) {
detailData.value.otherAttachments = {
name: res.data.fileName,
url: res.data.url
}
}
//抗扰度测试报告
else if (pathName == 'performanceTestReport' && detailData.value.performanceTestReport) {
detailData.value.performanceTestReport = {
name: res.data.fileName,
url: res.data.url
}
}
//背景电能质量测试报告
else if (pathName == 'typeExperimentReport' && detailData.value.typeExperimentReport) {
detailData.value.typeExperimentReport = {
name: res.data.fileName,
url: res.data.url
}
}
//其他附件
else if (pathName == 'additionalAttachments' && detailData.value.additionalAttachments) {
detailData.value.additionalAttachments = {
name: res.data.fileName,
url: res.data.url
}
}
}
})
}
defineExpose({ open: getInfo }) // 提供 open 方法,用于打开弹窗
/** 初始化 **/
onMounted(() => {
getInfo()
})
</script>
<style lang="scss">
.default-main {
height: calc(100vh - 100px);
overflow: auto;
}
::v-deep.el-icon svg {
margin: 5px !important;
position: absolute !important;
top: 20px !important;
}
</style>

View File

@@ -0,0 +1,218 @@
<!---终端入网检测-->
<template>
<TableHeader area datePicker ref="TableHeaderRef">
<!-- <template #select>
<el-form-item label="工程名称">
<el-input v-model="tableStore.table.params.searchValue" clearable></el-input>
</el-form-item>
<el-form-item label="所属地市">
<el-select v-model="tableStore.table.params.loadType" clearable placeholder="请选择所属地市">
<el-option
v-for="item in areaOptionList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</template> -->
<template #operation>
<el-button icon="el-icon-Plus" type="primary" @click="addFormModel">新增</el-button>
<!-- <el-button icon="el-icon-Download" @click="exportEvent" type="primary">导出</el-button> -->
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 新增弹框 -->
<addForm ref="addForms" @onSubmit="tableStore.index()"></addForm>
</template>
<script setup lang="ts">
import { ref, onMounted, provide, nextTick } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue'
import { useRouter } from 'vue-router'
import { useDictData } from '@/stores/dictData'
import { getLoadTypeUserList } from '@/api/process-boot/interference'
import addForm from './addForm.vue'
const dictData = useDictData()
const { push } = useRouter()
const TableHeaderRef = ref()
const tableRef = ref()
const areaOptionList = dictData.getBasicData('jibei_area')
const ruleFormRef = ref()
const show: any = ref(false)
const fileList = ref([])
const tableStore = new TableStore({
url: '/supervision-boot/deVReport/list',
publicHeight: 65,
method: 'POST',
column: [
{ title: '序号', type: 'seq', width: 80 },
{ field: 'orgName', title: '填报部门名称' , minWidth: 170 },
{ field: 'reportDate', title: '填报日期', minWidth: 170},
{ field: 'reporter', title: '填报人', minWidth: 80 },
{
field: 'status',
title: '审核状态',
minWidth: 100,
render: 'tag',
custom: {
1: 'primary',
2: 'success',
3: 'danger',
4: 'warning'
},
replaceValue: {
1: '审批中',
2: '审批通过',
3: '审批不通过',
4: '已取消'
}
},
{ field: 'monitoringTerminalName', title: '设备名称', minWidth: 170 },
{ field: 'substation', title: '所属变电站', minWidth: 170 },
// {
// field: 'userType',
// title: '用户性质',
// minWidth: 150,
// formatter: (obj: any) => {
// const userType = obj.row.userType
// return getUserTypeName(userType)
// }
// },
// { field: 'informationSecurityTestReport', title: '信息安全检测报告', minWidth: 170 },
// { field: 'otherAttachments', title: '其他附件', minWidth: 170 },
// { field: 'orgName', title: '填报部门名称'},
// { field: 'performanceTestReport', title: '性能检测报告', minWidth: 170 },
// {
// field: 'userStatus',
// title: '用户状态',
// minWidth: 100,
// render: 'tag',
// custom: {
// 0: 'primary',
// 1: 'primary',
// 2: 'success',
// 3: 'warning'
// },
// replaceValue: {
// 0: '可研',
// 1: '建设',
// 2: '运行',
// 3: '退运'
// }
// },
// { field: 'substation', title: '变电站', minWidth: 100 },
// { field: 'createTime', title: '开始时间', minWidth: 170 },
{
title: '操作',
minWidth: 150,
fixed: 'right',
render: 'buttons',
buttons: [
{
name: 'productSetting',
title: '流程详情',
type: 'primary',
icon: 'el-icon-EditPen',
render: 'basicButton',
click: row => {
handleAudit(row.processInstanceId)
}
}
]
}
],
beforeSearchFun: () => {
tableStore.table.params.orgNo = tableStore.table.params.deptIndex
// tableStore.table.params.relationUserName = tableStore.table.params.userName
}
})
// tableStore.table.params.loadType = ''
// tableStore.table.params.userName = ''
// tableStore.table.params.fileUploadflag = ''
console.log(tableStore.table.params,"=========查询列表");
provide('tableStore', tableStore)
const addForms = ref()
const addFormModel = () => {
setTimeout(() => {
addForms.value.open()
}, 0);
}
const exportEvent = () => {
let form = JSON.parse(JSON.stringify(tableStore.table.params))
form.pageNum = 1
form.pageSize = tableStore.table.total
getLoadTypeUserList(form).then(res => {
tableRef.value.getRef().exportData({
filename: '未建档非线性用户', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column: any) {
return !(column.$columnIndex === 0)
}
})
})
}
onMounted(() => {
tableStore.index()
})
/** 处理审批按钮 */
const handleAudit = (instanceId: any) => {
push({
name: 'BpmProcessInstanceDetail',
query: {
id: instanceId
}
})
}
/**获取用户性质*/
const getUserTypeName = (userType: any) => {
if (userType === 0) {
return '新建电网工程'
}
if (userType === 1) {
return '扩建电网工程'
}
if (userType === 2) {
return '新建非线性负荷用户'
}
if (userType === 3) {
return '扩建非线性负荷用户'
}
if (userType === 4) {
return '新建新能源发电站'
}
if (userType === 5) {
return '扩建新能源发电站'
}
if (userType === 6) {
return '敏感及重要用户'
}
return '新建电网工程'
}
</script>
<style scoped lang="scss">
:deep(.el-upload-list__item) {
width: 400px;
}
::v-deep .el-input__wrapper {
// width: 200px !important;
}
</style>

View File

@@ -0,0 +1,42 @@
<template>
<div class="default-main">
<el-tabs v-model="activeName" type="border-card">
<el-tab-pane label="终端入网检测" name="1">
<terminal v-if="activeName == '1'" />
</el-tab-pane>
<el-tab-pane label="监测点台账录入" name="2">
<monitorpoint v-if="activeName == '2'" />
</el-tab-pane>
<el-tab-pane label="监测点联调列表" name="3">
<!-- <terminalNetworkDetection v-if="activeName == '3'"></terminalNetworkDetection> -->
</el-tab-pane>
</el-tabs>
</div>
</template>
<script setup lang="ts">
import { onMounted, reactive, ref, provide } from 'vue'
import undocumented from './components/undocumented/index.vue'
import { mainHeight } from '@/utils/layout'
import terminal from './components/terminainal/index.vue'
import monitorpoint from './components/monitorpoint/index.vue'
defineOptions({
name: 'Processsupervision/interferencemanagement'
})
const activeName = ref('1')
const Statistics = ref()
const compatibility = ref()
const layout = mainHeight(63) as any
</script>
<style lang="scss" scoped>
.bars_w {
width: 100%;
height: 500px;
}
:deep(.el-tabs__content) {
height: v-bind('layout.height');
overflow-y: auto;
}
</style>