电压暂降-高级分析-事件关联分析 影响范围分析 迁移 40%

This commit is contained in:
GGJ
2024-02-23 16:26:32 +08:00
parent 8c7e35901a
commit f51acd7623
7 changed files with 350 additions and 4 deletions

View File

@@ -19,6 +19,7 @@
"echarts": "^5.4.3", "echarts": "^5.4.3",
"echarts4": "npm:echarts@^4.9.0", "echarts4": "npm:echarts@^4.9.0",
"element-plus": "^2.5.3", "element-plus": "^2.5.3",
"exceljs": "^4.4.0",
"html2canvas": "^1.4.1", "html2canvas": "^1.4.1",
"jquery": "^3.7.1", "jquery": "^3.7.1",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
@@ -34,6 +35,7 @@
"vue-draggable-resizable": "3.0.0-beta.2", "vue-draggable-resizable": "3.0.0-beta.2",
"vue-router": "4", "vue-router": "4",
"vxe-table": "^4.5.17", "vxe-table": "^4.5.17",
"vxe-table-plugin-export-xlsx": "^4.0.1",
"xe-utils": "^3.5.14" "xe-utils": "^3.5.14"
}, },
"devDependencies": { "devDependencies": {

View File

@@ -0,0 +1,26 @@
import createAxios from '@/utils/request'
// 分析记录管理
export function queryRelevantLogPage(data: any) {
return createAxios({
url: '/advance-boot/process/queryRelevantLogPage',
method: 'post',
data: data
})
}
// 删除策略
export function delRelevantLog(data: any) {
return createAxios({
url: '/advance-boot/process/delRelevantLog',
method: 'get',
params:data,
})
}
// 影响范围分析 查询
export function queryEventsAssPage(data: any) {
return createAxios({
url: '/advance-boot/process/queryEventsAssPage',
method: 'post',
data,
})
}

View File

@@ -15,7 +15,13 @@ import '@/styles/index.scss'
import '@/assets/font/iconfont.css' import '@/assets/font/iconfont.css'
import { ElDialog } from 'element-plus' import { ElDialog } from 'element-plus'
import BaiduMap from 'vue-baidu-map-3x' import BaiduMap from 'vue-baidu-map-3x'
import ExcelJS from 'exceljs'
import VXETablePluginExportXLSX from 'vxe-table-plugin-export-xlsx'
// 方式1NPM 安装,注入 ExcelJS 对象
VXETable.use(VXETablePluginExportXLSX, {
ExcelJS
})
window.XEUtils = XEUtils window.XEUtils = XEUtils
const app = createApp(App) const app = createApp(App)

View File

@@ -105,14 +105,12 @@ const map = (res: any) => {
if (geoCoordMap.value.lengt > 0) { if (geoCoordMap.value.lengt > 0) {
geoCoordMap.value.map(item => { geoCoordMap.value.map(item => {
console.log("🚀 ~ map ~ item:", item)
areaData.push(...new Array(3).fill(item)) areaData.push(...new Array(3).fill(item))
}) })
} }
let maxNum = 0 let maxNum = 0
let minNum = 0 let minNum = 0
let num: any = [] let num: any = []
console.log('🚀 ~ map ~ areaData:', areaData)
if (areaData.length > 0) { if (areaData.length > 0) {
areaData.forEach(item => { areaData.forEach(item => {

View File

@@ -1,3 +1,161 @@
<template> <template>
<div class='default-main'>关联性分析</div> <div class="default-main">
<TableHeader datePicker>
<template #select>
<el-form-item label="筛选">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选" />
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Tickets" type="primary" @click="analysis">分析记录管理</el-button>
<el-button icon="el-icon-SuccessFilled" type="primary" @click="firing">启动关联分析</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 分析记录管理 -->
<el-dialog v-model="dialogAnalysis" title="分析记录管理" width="60%">
<vxe-table height="500" auto-resize :data="AnalysisData" v-bind="defaultAttribute">
<vxe-column field="timeId" title="策略名称"></vxe-column>
<vxe-column field="timeId" title="操作时间"></vxe-column>
<vxe-column field="createName" title="操作人"></vxe-column>
<vxe-column title="操作" width="100">
<template #default="{ row }">
<el-popconfirm title="是否确认删除策略!" @confirm="details(row)">
<template #reference>
<el-button type="danger" link>删除</el-button>
</template>
</el-popconfirm>
</template>
</vxe-column>
</vxe-table>
</el-dialog>
</div>
</template> </template>
<script setup lang="ts">
import { ref, onMounted, provide } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import TableHeader from '@/components/table/header/index.vue'
import { queryRelevantLogPage, delRelevantLog } from '@/api/advance-boot/analyse.ts'
import { ElMessage, ElMessageBox } from 'element-plus'
defineOptions({
name: 'govern/log/operation'
})
const dialogAnalysis = ref(false)
const AnalysisData = ref([])
const tableStore = new TableStore({
url: '/advance-boot/process/querySagEventsPage',
method: 'POST',
column: [
{
field: 'index',
title: '序号',
width: '60',
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'startTime', title: '发生时间' },
{ field: 'duration', title: '持续时间(s)' },
{
field: 'featureAmplitude',
title: '暂降(骤升)幅值(%)'
},
{ field: 'gdName', title: '供电公司' },
{ field: 'subName', title: '变电站' },
{ field: 'lineName', title: '监测点' },
{
field: 'dealFlag',
title: '暂降特征幅值计算',
render: 'tag',
custom: {
0: 'warning',
1: 'success',
2: 'success',
3: 'warning'
},
replaceValue: {
0: '未处理',
1: '已处理',
2: '已处理,无结果',
3: '计算失败'
}
},
{
field: 'fileFlag',
title: '录波文件',
render: 'tag',
custom: {
0: 'warning',
1: 'success'
},
replaceValue: {
0: '不存在',
1: '存在'
}
},
{
title: '操作',
width: '120',
render: 'buttons',
buttons: [
{
name: 'edit',
title: '波形分析',
type: 'primary',
disabled: row => {
return row.fileFlag == 0
},
icon: 'el-icon-Plus',
render: 'basicButton',
click: row => {}
},
{
name: 'edit',
title: '暂无波形',
type: '',
disabled: row => {
return row.fileFlag == 1
},
icon: 'el-icon-Plus',
render: 'basicButton'
}
]
}
],
loadCallback: () => {
tableStore.table.data.forEach((item: any) => {
item.failReason = item.failReason || '/'
item.result = item.result === 1 ? '成功' : '失败'
item.loginName = item.loginName || '/'
})
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
//分析记录管理
const analysis = () => {
queryRelevantLogPage({}).then((res: any) => {
AnalysisData.value = res.data.records
})
dialogAnalysis.value = true
}
// 启动关联分析
const firing = () => {}
// 删除策略
const details = (row: any) => {
delRelevantLog({ id: row.id }).then((res: any) => {
ElMessage({
type: 'success',
message: res.message
})
queryRelevantLogPage({}).then((res: any) => {
AnalysisData.value = res.data.records
})
})
}
</script>

View File

@@ -0,0 +1,7 @@
<template>
<div>3</div>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
</script>
<style lang="scss" scoped></style>

View File

@@ -0,0 +1,149 @@
<template>
<div class="default-main">
<TableHeader datePicker>
<template #select>
<el-form-item label="筛选">
<el-input v-model="tableStore.table.params.searchValue" clearable placeholder="输入关键字筛选" />
</el-form-item>
</template>
<template #operation>
<el-button icon="el-icon-Download" type="primary" @click="exportEvent">导出</el-button>
</template>
</TableHeader>
<Table ref="tableRef" />
<!-- 分析记录管理 -->
<el-dialog v-model="dialogAnalysis" title="分析记录管理" width="60%">
<vxe-table height="500" auto-resize :data="AnalysisData" v-bind="defaultAttribute">
<vxe-column field="timeId" title="策略名称"></vxe-column>
<vxe-column field="timeId" title="操作时间"></vxe-column>
<vxe-column field="createName" title="操作人"></vxe-column>
<vxe-column title="操作" width="100">
<template #default="{ row }">
<el-popconfirm title="是否确认删除策略!" @confirm="details(row)">
<template #reference>
<el-button type="danger" link>删除</el-button>
</template>
</el-popconfirm>
</template>
</vxe-column>
</vxe-table>
</el-dialog>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted, provide } from 'vue'
import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue'
import { defaultAttribute } from '@/components/table/defaultAttribute'
import TableHeader from '@/components/table/header/index.vue'
import { queryRelevantLogPage, delRelevantLog } from '@/api/advance-boot/analyse.ts'
import { ElMessage, ElMessageBox } from 'element-plus'
import { queryEventsAssPage } from '@/api/advance-boot/analyse.ts'
defineOptions({
name: 'govern/log/operation'
})
const dialogAnalysis = ref(false)
const AnalysisData = ref([])
const tableRef = ref()
const tableStore = new TableStore({
url: '/advance-boot/process/queryEventsAssPage',
method: 'POST',
column: [
{
field: 'index',
title: '序号',
width: '60',
formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
}
},
{ field: 'timeId', title: '时间', width: '200' },
{ field: 'timeId', title: '事件关联分析名称', width: '200' },
{
field: 'contentDes',
title: '事件关联分析描述'
},
{
title: '操作',
width: '200',
render: 'buttons',
buttons: [
{
name: 'edit',
title: '暂降源定位',
type: 'primary',
icon: 'el-icon-Plus',
render: 'basicButton',
click: row => {}
},
{
name: 'edit',
title: '范围查看',
type: 'primary',
icon: 'el-icon-Plus',
render: 'basicButton'
}
]
}
],
loadCallback: () => {
tableStore.table.data.forEach((item: any) => {
item.failReason = item.failReason || '/'
item.result = item.result === 1 ? '成功' : '失败'
item.loginName = item.loginName || '/'
})
}
})
provide('tableStore', tableStore)
onMounted(() => {
tableStore.index()
})
//分析记录管理
const analysis = () => {
queryRelevantLogPage({}).then((res: any) => {
AnalysisData.value = res.data.records
})
dialogAnalysis.value = true
}
// 启动关联分析
const firing = () => {}
// 删除策略
const details = (row: any) => {
delRelevantLog({ id: row.id }).then((res: any) => {
ElMessage({
type: 'success',
message: res.message
})
queryRelevantLogPage({}).then((res: any) => {
AnalysisData.value = res.data.records
})
})
}
// 导出
const exportEvent = () => {
console.log('🚀 ~ exportEvent ~ tableRef.value:', tableRef.value)
queryEventsAssPage({
searchBeginTime: tableStore.table.params.searchBeginTime,
searchEndTime: tableStore.table.params.searchEndTime,
searchValue: tableStore.table.params.searchValue,
pageNum: 1,
pageSize: tableStore.table.params.total
}).then(res => {
tableRef.value.getRef().exportData({
filename: '影响范围分析', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: res.data.records, // 数据源 // 过滤那个字段导出
columnFilterMethod: function (column, $columnIndex) {
return !(column.$columnIndex === 0)
}
})
})
}
</script>