方案数据添加暂态事件页面

This commit is contained in:
GGJ
2024-12-19 10:16:08 +08:00
parent 8089fcb7de
commit b10854971d
16 changed files with 283 additions and 171 deletions

View File

@@ -36,6 +36,10 @@ export default {
type: [String, Number, Boolean], type: [String, Number, Boolean],
default: 3, default: 3,
}, },
parentHeight: {
type: [String, Number, Boolean],
default: 0
},
DColor: { DColor: {
type: Boolean, type: Boolean,
default: false, default: false,
@@ -103,6 +107,10 @@ export default {
} else { } else {
this.vh = mainHeight(200, 2).height this.vh = mainHeight(200, 2).height
} }
if (this.parentHeight != 0) {
this.vh = mainHeight(this.parentHeight, 2).height
}
this.vw = '100%' this.vw = '100%'
}, },
mounted() { mounted() {
@@ -210,7 +218,10 @@ export default {
"s"; "s";
} else if (this.boxoList.systemType == 'WX') { } else if (this.boxoList.systemType == 'WX') {
let featureAmplitude = this.boxoList.featureAmplitude + '' ? this.boxoList.featureAmplitude.toFixed(2) : '/'
if (String(this.boxoList.featureAmplitude).split('.')[1] == '00') {
this.boxoList.featureAmplitude = String(this.boxoList.featureAmplitude).split('.')[0]
}
this.titles = this.titles =
' 监测点名称:' + ' 监测点名称:' +
@@ -218,7 +229,7 @@ export default {
' 发生时刻:' + ' 发生时刻:' +
this.boxoList.startTime + this.boxoList.startTime +
' 暂降(骤升)幅值:' + ' 暂降(骤升)幅值:' +
(this.boxoList.featureAmplitude) + (featureAmplitude) +
'% 持续时间:' + '% 持续时间:' +
(this.boxoList.persistTime ? this.boxoList.persistTime.toFixed(2) : '-') + (this.boxoList.persistTime ? this.boxoList.persistTime.toFixed(2) : '-') +
's' 's'

View File

@@ -28,6 +28,10 @@ export default {
type: [String, Number, Boolean], type: [String, Number, Boolean],
default: 3 default: 3
}, },
parentHeight: {
type: [String, Number, Boolean],
default: 0
},
DColor: { DColor: {
type: Boolean, type: Boolean,
default: false default: false
@@ -77,6 +81,10 @@ export default {
} else { } else {
this.vh = mainHeight(200, 2).height this.vh = mainHeight(200, 2).height
} }
if (this.parentHeight != 0) {
this.vh = mainHeight(this.parentHeight, 2).height
}
this.vw = '100%' this.vw = '100%'
}, },
watch: { watch: {
@@ -166,6 +174,11 @@ export default {
's' 's'
} }
else if (this.boxoList.systemType == 'WX') { else if (this.boxoList.systemType == 'WX') {
let featureAmplitude = this.boxoList.featureAmplitude + '' ? this.boxoList.featureAmplitude.toFixed(2) : '/'
if (String(this.boxoList.featureAmplitude).split('.')[1] == '00') {
this.boxoList.featureAmplitude = String(this.boxoList.featureAmplitude).split('.')[0]
}
this.titles = this.titles =
' 监测点名称:' + ' 监测点名称:' +
@@ -173,7 +186,7 @@ export default {
' 发生时刻:' + ' 发生时刻:' +
this.boxoList.startTime + this.boxoList.startTime +
' 暂降(骤升)幅值:' + ' 暂降(骤升)幅值:' +
(this.boxoList.featureAmplitude) + (featureAmplitude) +
'% 持续时间:' + '% 持续时间:' +
(this.boxoList.persistTime ? this.boxoList.persistTime.toFixed(2) : '-') + (this.boxoList.persistTime ? this.boxoList.persistTime.toFixed(2) : '-') +
's' 's'

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog draggable class="cn-operate-dialog" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px"> <el-form :inline="false" :model="form" label-width="120px" class="form-two">
<el-form-item label="用户名称:"> <el-form-item label="用户名称:">
<el-input v-model="form.name" :disabled="true"></el-input> <el-input v-model="form.name" :disabled="true"></el-input>
</el-form-item> </el-form-item>

View File

@@ -1,16 +1,16 @@
<template> <template>
<el-dialog draggable width="500px" v-model="dialogVisible" :title="title"> <el-dialog draggable width="500px" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" :rules="rules" class="form-one" ref="formRef">
<el-form-item label="校验密码:" prop="password"> <el-form-item label="校验密码:" prop="password">
<el-input v-model="form.password" type="password" <el-input v-model="form.password" type="password"
placeholder="请输入校验密码" show-password /> placeholder="请输入校验密码" show-password />
</el-form-item> </el-form-item>
<el-form-item label="新密码:" prop="newPwd" style="margin-top: 20px"> <el-form-item label="新密码:" prop="newPwd" >
<el-input v-model="form.newPwd" type="password" placeholder="请输入新密码" <el-input v-model="form.newPwd" type="password" placeholder="请输入新密码"
show-password /> show-password />
</el-form-item> </el-form-item>
<el-form-item label="确认密码:" prop="confirmPwd" style="margin-top: 20px"> <el-form-item label="确认密码:" prop="confirmPwd" >
<el-input v-model="form.confirmPwd" type="password" <el-input v-model="form.confirmPwd" type="password"
placeholder="请输入确认密码" show-password /> placeholder="请输入确认密码" show-password />
</el-form-item> </el-form-item>

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title'> <el-dialog width="600px" v-model='dialogVisible' :title='title'>
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline='false' :model='form' label-width='auto' class="form-one" :rules='rules' ref='formRef'>
<el-form-item label='角色名称'> <el-form-item label='角色名称'>
<el-input maxlength="32" show-word-limit v-model='form.name' placeholder='请输入菜单名称' /> <el-input maxlength="32" show-word-limit v-model='form.name' placeholder='请输入菜单名称' />
</el-form-item> </el-form-item>
@@ -9,7 +9,7 @@
<el-input maxlength="32" show-word-limit v-model='form.code' placeholder='请输入菜单名称' /> <el-input maxlength="32" show-word-limit v-model='form.code' placeholder='请输入菜单名称' />
</el-form-item> </el-form-item>
<el-form-item label='角色描述'> <el-form-item label='角色描述'>
<el-input maxlength="32" show-word-limit v-model='form.remark' :rows='2' type='textarea' <el-input maxlength="300" show-word-limit v-model='form.remark' :rows='2' type='textarea'
placeholder='请输入描述' /> placeholder='请输入描述' />
</el-form-item> </el-form-item>
</el-form> </el-form>

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" :title="title"> <el-dialog width="700px" v-model="dialogVisible" :title="title">
<el-scrollbar> <el-scrollbar>
<el-form :mode="form" :inline="false" :model="form" label-width="120px" :rules="rules"> <el-form :mode="form" :inline="false" :model="form" label-width="120px" :rules="rules" class="form-one">
<el-form-item prop="name" label="接口/按钮名称"> <el-form-item prop="name" label="接口/按钮名称">
<el-input maxlength="32" show-word-limit v-model="form.name" placeholder="请输入接口名称" /> <el-input maxlength="32" show-word-limit v-model="form.name" placeholder="请输入接口名称" />
</el-form-item> </el-form-item>

View File

@@ -1,7 +1,7 @@
<template> <template>
<el-dialog class="cn-operate-dialog" v-model="dialogVisible" title="修改密码"> <el-dialog width=500px v-model="dialogVisible" title="修改密码">
<el-scrollbar> <el-scrollbar>
<el-form :inline="false" :model="form" label-width="120px" :rules="rules" ref="formRef"> <el-form :inline="false" :model="form" label-width="120px" class="form-one" :rules="rules" ref="formRef">
<el-form-item label="新密码" prop="newPwd"> <el-form-item label="新密码" prop="newPwd">
<el-input maxlength="32" show-word-limit v-model="form.newPwd" type="password" placeholder="请输入新密码" <el-input maxlength="32" show-word-limit v-model="form.newPwd" type="password" placeholder="请输入新密码"
show-password /> show-password />

View File

@@ -1,5 +1,5 @@
<template> <template>
<div ref="refheader" v-show="view"> <div ref="refheader" v-if="!isWaveCharts">
<TableHeader datePicker> <TableHeader datePicker>
<template v-slot:select> <template v-slot:select>
<el-form-item label="数据来源"> <el-form-item label="数据来源">
@@ -16,10 +16,14 @@
</el-form-item> --> </el-form-item> -->
</template> </template>
</TableHeader> </TableHeader>
<!-- <div style="height: 300px;"> -->
<Table></Table> <Table></Table>
</div> </div>
<div style="padding: 10px" v-if="!view"> <waveFormAnalysis v-loading="loading" v-if="isWaveCharts" ref="waveFormAnalysisRef"
@handleHideCharts="isWaveCharts = false" :wp="wp" />
<!-- <div style="height: 300px;"> -->
<!-- <div style="padding: 10px" v-if="!view" v-loading="loading">
<el-row> <el-row>
<el-col :span="12"> <el-col :span="12">
<div v-if="view2" style="display: flex"> <div v-if="view2" style="display: flex">
@@ -49,24 +53,27 @@
</rmsboxi> </rmsboxi>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
<!-- <xiebofenxi ref="child" :bxshuju="bxshuju" @backfh="back"></xiebofenxi> --> </div> -->
</div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, onMounted, provide } 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'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import shushiboxi from '@/components/echarts/shushiboxi.vue' import shushiboxi from '@/components/echarts/shushiboxi.vue'
import waveFormAnalysis from '@/views/govern/device/control/tabs/components/waveFormAnalysis.vue';
import rmsboxi from '@/components/echarts/rmsboxi.vue' import rmsboxi from '@/components/echarts/rmsboxi.vue'
import { analyseWave } from '@/api/common' import { analyseWave } from '@/api/common'
import { mainHeight } from '@/utils/layout' import { mainHeight } from '@/utils/layout'
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
const props = defineProps(['deviceTree']) const props = defineProps(['deviceTree'])
const refheader = ref() const refheader = ref()
const waveFormAnalysisRef = ref()
const view = ref(true) const view = ref(true)
const isWaveCharts = ref(false)
const view2 = ref(false) const view2 = ref(false)
const showBoxi = ref(true) const showBoxi = ref(true)
const loading = ref(false)
const bxactiveName = ref('ssbx') const bxactiveName = ref('ssbx')
const boxoList: any = ref({}) const boxoList: any = ref({})
const wp = ref({}) const wp = ref({})
@@ -129,22 +136,51 @@ const tableStore = new TableStore({
}, },
click: async row => { click: async row => {
row.loading1 = true row.loading1 = true
boxoList.value = row loading.value = true
boxoList.value.systemType = 'WX' isWaveCharts.value = true
boxoList.value.featureAmplitude = row.evtParamVVaDepth != '-' ? row.evtParamVVaDepth - 0 : null
boxoList.value.persistTime = row.evtParamTm != '-' ? row.evtParamTm - 0 : null
await analyseWave(row.id) await analyseWave(row.id)
.then(res => { .then(res => {
row.loading1 = false row.loading1 = false
if (res != undefined) { if (res != undefined) {
boxoList.value = row
boxoList.value.featureAmplitude = row.evtParamVVaDepth != '-' ? row.evtParamVVaDepth - 0 : null
boxoList.value.systemType = 'WX'
wp.value = res.data wp.value = res.data
view.value = false
view2.value = true
} }
loading.value = false
}) })
.catch(() => { .catch(() => {
row.loading1 = false row.loading1 = false
loading.value = false
}) })
nextTick(() => {
waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value, true)
// waveFormAnalysisRef.value && waveFormAnalysisRef.value.setHeight(200, 190)
})
// row.loading1 = true
// view.value = false
// view2.value = true
// loading.value = true
// boxoList.value = row
// boxoList.value.systemType = 'WX'
// boxoList.value.persistTime = row.evtParamTm != '-' ? row.evtParamTm - 0 : null
// await analyseWave(row.id)
// .then(res => {
// row.loading1 = false
// if (res != undefined) {
// wp.value = res.data
// }
// loading.value = false
// })
// .catch(() => {
// row.loading1 = false
// loading.value = false
// })
} }
}, },
{ {

View File

@@ -25,12 +25,12 @@
<el-tab-pane label="瞬时波形" name="ssbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'"> <el-tab-pane label="瞬时波形" name="ssbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'">
<shushiboxi v-if="isWp && wp && activeName == 'ssbx' && showBoxi" :value="value" :boxoList="boxoList" <shushiboxi v-if="isWp && wp && activeName == 'ssbx' && showBoxi" :value="value" :boxoList="boxoList"
:wp="wp"> :parentHeight="parentHeight" :wp="wp">
</shushiboxi> </shushiboxi>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="RMS波形" name="rmsbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'"> <el-tab-pane label="RMS波形" name="rmsbx" :style="'height:' + bxecharts + ';overflow-y: scroll;'">
<rmsboxi v-if="isWp && wp && activeName == 'rmsbx' && showBoxi" :value="value" :boxoList="boxoList" <rmsboxi v-if="isWp && wp && activeName == 'rmsbx' && showBoxi" :value="value" :boxoList="boxoList"
:wp="wp"> :parentHeight="parentHeight" :wp="wp">
</rmsboxi> </rmsboxi>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@@ -50,6 +50,7 @@ const searchForm = ref({
type: 0 type: 0
}) })
const emit = defineEmits(['handleHideCharts']) const emit = defineEmits(['handleHideCharts'])
const parentHeight = ref(0)
const tableList: any = ref([]) const tableList: any = ref([])
for (let i = 0; i < 300; i++) { for (let i = 0; i < 300; i++) {
tableList.value.push({ tableList.value.push({
@@ -106,7 +107,8 @@ const getWpData = (val: any, list: any) => {
wp.value = val wp.value = val
isWp.value = true isWp.value = true
boxoList.value = list boxoList.value = list
// console.log(wp.value, val, 'ggggghhhh')
console.log(wp.value, val, 'ggggghhhh')
} }
const changeView = () => { const changeView = () => {
showBoxi.value = false showBoxi.value = false
@@ -114,7 +116,7 @@ const changeView = () => {
showBoxi.value = true showBoxi.value = true
}, 0) }, 0)
} }
const bxecharts = mainHeight(345).height as any const bxecharts: any = ref(mainHeight(190).height as any)
const handleClick = (tab: any, event: any) => { const handleClick = (tab: any, event: any) => {
// activeName.value = tab.index // activeName.value = tab.index
@@ -127,22 +129,29 @@ const handleClick = (tab: any, event: any) => {
const handleBack = () => { const handleBack = () => {
emit('handleHideCharts') emit('handleHideCharts')
} }
const setHeight = (h: any,vh: any) => {
parentHeight.value = h
setTimeout(() => {
bxecharts.value = mainHeight(vh).height
},100)
}
onMounted(() => { }) onMounted(() => { })
defineExpose({ getWpData }) defineExpose({ getWpData, setHeight })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.tab_info { // .tab_info {
width: 100%; // width: 100%;
height: calc(100vh - 450px); // height: calc(100vh - 450px);
// overflow: auto; // // overflow: auto;
// padding-bottom: 20px; // // padding-bottom: 20px;
.charts { // .charts {
width: 100%; // width: 100%;
margin-top: 10px; // margin-top: 10px;
height: calc(100vh - 450px); // height: calc(100vh - 450px);
} // }
} // }
.home { .home {
width: 100%; width: 100%;
@@ -152,11 +161,7 @@ defineExpose({ getWpData })
position: relative; position: relative;
.home_header { .home_header {
// position: absolute;
// top: -25px;
// left: 0;
// width: 80%;
// height: 40px;
height: 50px; height: 50px;
display: flex; display: flex;
align-items: center; align-items: center;

View File

@@ -2,12 +2,8 @@
<div class="view"> <div class="view">
<TableHeader datePicker ref="headerRef" v-if="!isWaveCharts" :showReset="false"></TableHeader> <TableHeader datePicker ref="headerRef" v-if="!isWaveCharts" :showReset="false"></TableHeader>
<Table ref="tableRef" v-if="!isWaveCharts" /> <Table ref="tableRef" v-if="!isWaveCharts" />
<waveFormAnalysis <waveFormAnalysis v-loading="loading" v-if="isWaveCharts" ref="waveFormAnalysisRef" @handleHideCharts="isWaveCharts = false"
v-if="isWaveCharts" :wp="wp" />
ref="waveFormAnalysisRef"
@handleHideCharts="isWaveCharts = false"
:wp="wp"
/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
@@ -24,6 +20,7 @@ const tableParams: any = ref({})
const refheader = ref() const refheader = ref()
const view = ref(true) const view = ref(true)
const view2 = ref(false) const view2 = ref(false)
const loading = ref(false)
const showBoxi = ref(true) const showBoxi = ref(true)
const bxactiveName = ref('ssbx') const bxactiveName = ref('ssbx')
const boxoList: any = ref([]) const boxoList: any = ref([])
@@ -37,9 +34,11 @@ const tableStore: any = new TableStore({
method: 'POST', method: 'POST',
column: [ column: [
// { width: '60', type: 'checkbox', fixed: 'left' }, // { width: '60', type: 'checkbox', fixed: 'left' },
{ title: '序号', width: 80,formatter: (row: any) => { {
title: '序号', width: 80, formatter: (row: any) => {
return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1 return (tableStore.table.params.pageNum - 1) * tableStore.table.params.pageSize + row.rowIndex + 1
} }, }
},
{ field: 'startTime', title: '发生时刻', minWidth: 170 }, { field: 'startTime', title: '发生时刻', minWidth: 170 },
{ field: 'showName', title: '事件描述', minWidth: 170 }, { field: 'showName', title: '事件描述', minWidth: 170 },
{ {
@@ -91,7 +90,8 @@ const tableStore: any = new TableStore({
}, },
click: async row => { click: async row => {
row.loading1 = true row.loading1 = true
isWaveCharts.value = true
loading.value = true
await analyseWave(row.id) await analyseWave(row.id)
.then(res => { .then(res => {
row.loading1 = false row.loading1 = false
@@ -102,13 +102,16 @@ const tableStore: any = new TableStore({
view.value = false view.value = false
view2.value = true view2.value = true
} }
loading.value = false
}) })
.catch(() => { .catch(() => {
row.loading1 = false row.loading1 = false
loading.value = false
}) })
isWaveCharts.value = true
nextTick(() => { nextTick(() => {
waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value) waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value)
waveFormAnalysisRef.value && waveFormAnalysisRef.value.setHeight(200, 345)
}) })
} }
}, },

View File

@@ -235,7 +235,7 @@ const init = async () => {
let obj = { let obj = {
...trendRequestData.value, ...trendRequestData.value,
list: lists, list: lists,
valueType: searchForm.value.type, // valueType: searchForm.value.type,
dataLevel: searchForm.value.dataLevel, dataLevel: searchForm.value.dataLevel,
valueType: searchForm.value.valueType, valueType: searchForm.value.valueType,
startTime: datePickerRef.value && datePickerRef.value.timeValue[0], startTime: datePickerRef.value && datePickerRef.value.timeValue[0],
@@ -389,6 +389,7 @@ const init = async () => {
// console.log("🚀 ~ unitList.forEach ~ unitList:", unitList) // console.log("🚀 ~ unitList.forEach ~ unitList:", unitList)
if (chartsList.length > 0) { if (chartsList.length > 0) {
let yData: any = []
echartsData.value.yAxis = [] echartsData.value.yAxis = []
let setList = [...new Set(unitList)]; let setList = [...new Set(unitList)];
@@ -396,6 +397,7 @@ const init = async () => {
if (index > 2) { if (index > 2) {
echartsData.value.grid.right = (index - 1) * 80 echartsData.value.grid.right = (index - 1) * 80
} }
yData.push([])
let right = { let right = {
position: 'right', position: 'right',
offset: (index - 1) * 80 offset: (index - 1) * 80
@@ -446,7 +448,7 @@ const init = async () => {
let seriesList: any = [] let seriesList: any = []
kk.forEach((cc: any) => { kk.forEach((cc: any) => {
if (cc.statisticalData !== null) { if (cc.statisticalData !== null) {
yMethodList.push(cc.statisticalData?.toFixed(2) - 0) yData[setList.indexOf(kk[0].unit)].push(cc.statisticalData?.toFixed(2))
} }
seriesList.push([cc.time, cc.statisticalData?.toFixed(2), cc.unit, lineStyle[lineS].type]) seriesList.push([cc.time, cc.statisticalData?.toFixed(2), cc.unit, lineStyle[lineS].type])
@@ -466,7 +468,12 @@ const init = async () => {
yAxisIndex: setList.indexOf(kk[0].unit) yAxisIndex: setList.indexOf(kk[0].unit)
}) })
}) })
let [min, max] = yMethod(yMethodList) // let [min, max] = yMethod(yMethodList)
// echartsData.value.yAxis[index].min = min
// echartsData.value.yAxis[index].max = max
})
yData.forEach((item: any, index: any) => {
let [min, max] = yMethod(item)
echartsData.value.yAxis[index].min = min echartsData.value.yAxis[index].min = min
echartsData.value.yAxis[index].max = max echartsData.value.yAxis[index].max = max
}) })

View File

@@ -1,25 +1,41 @@
<template> <template>
<div>
<Table ref="tableRef" v-if="!isWaveCharts" />
<waveFormAnalysis v-loading="loading" v-if="isWaveCharts" ref="waveFormAnalysisRef"
@handleHideCharts="isWaveCharts = false" :wp="wp" />
</div>
<!-- <TableHeader :showReset="false"> <!-- <TableHeader :showReset="false">
</TableHeader> --> </TableHeader> -->
<Table ref="tableRef" />
</template> </template>
<script setup lang='ts'> <script setup lang='ts'>
import { ref, provide, onMounted } from 'vue' import { ref, provide, onMounted, nextTick } from 'vue'
import { getEventByItem } from '@/api/cs-device-boot/planData' import { getEventByItem } from '@/api/cs-device-boot/planData'
import TableStore from '@/utils/tableStore' import TableStore from '@/utils/tableStore'
import Table from '@/components/table/index.vue' import Table from '@/components/table/index.vue'
import TableHeader from '@/components/table/header/index.vue' import TableHeader from '@/components/table/header/index.vue'
import { ElMessage } from 'element-plus'
import waveFormAnalysis from '@/views/govern/device/control/tabs/components/waveFormAnalysis.vue';
import { analyseWave } from '@/api/common'
import { mainHeight } from '@/utils/layout'
const props = defineProps({ const props = defineProps({
activeName: String activeName: String,
activeColName: [Object, String]
}) })
const loading = ref(false)
const waveFormAnalysisRef = ref()
const isWaveCharts = ref(false)
const boxoList: any = ref([])
const wp = ref({})
const tableStore = new TableStore({ const tableStore = new TableStore({
url: '/cs-harmonic-boot/data/getEventByItem', url: '/cs-harmonic-boot/data/getEventByItem',
method: 'POST', method: 'POST',
paramsPOST: true, paramsPOST: true,
showPage: false, showPage: false,
publicHeight: 365,
column: [ column: [
// { width: '60', type: 'checkbox', fixed: 'left' }, // { width: '60', type: 'checkbox', fixed: 'left' },
{ {
@@ -64,73 +80,77 @@ const tableStore = new TableStore({
width: 180, width: 180,
render: 'buttons', render: 'buttons',
fixed: 'right', fixed: 'right',
// buttons: [ buttons: [
// { {
// name: 'edit', name: 'edit',
// title: '波形解析', title: '波形解析',
// type: 'primary', type: 'primary',
// icon: 'el-icon-Check', icon: 'el-icon-Check',
// render: 'basicButton', render: 'basicButton',
// loading: 'loading1', loading: 'loading1',
// disabled: row => { disabled: row => {
// // && row.evtParamTm < 20 // && row.evtParamTm < 20
// return !row.wavePath return !row.wavePath
// }, },
// click: async row => { click: async row => {
// row.loading1 = true row.loading1 = true
loading.value = true
isWaveCharts.value = true
await analyseWave(row.id)
.then(res => {
row.loading1 = false
if (res != undefined) {
boxoList.value = row
boxoList.value.systemType = 'WX'
wp.value = res.data
// await analyseWave(row.id)
// .then(res => { }
// row.loading1 = false loading.value = false
// if (res != undefined) { })
// boxoList.value = row .catch(() => {
// boxoList.value.systemType = 'WX' row.loading1 = false
// wp.value = res.data loading.value = false
// view.value = false })
// view2.value = true
// } nextTick(() => {
// }) waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value, true)
// .catch(() => { setHeight()
// row.loading1 = false })
// }) }
// isWaveCharts.value = true },
// nextTick(() => { {
// waveFormAnalysisRef.value && waveFormAnalysisRef.value.getWpData(wp.value, boxoList.value) name: 'edit',
// }) text: '暂无波形',
// } type: 'info',
// }, icon: 'el-icon-DataLine',
// { render: 'basicButton',
// name: 'edit', disabled: row => {
// text: '暂无波形', return row.wavePath
// type: 'info', }
// icon: 'el-icon-DataLine', },
// render: 'basicButton', {
// disabled: row => { name: 'edit',
// return row.wavePath title: '波形下载',
// } type: 'primary',
// }, loading: 'loading2',
// { icon: 'el-icon-Check',
// name: 'edit', render: 'basicButton',
// title: '波形下载', disabled: row => {
// type: 'primary', // && row.evtParamTm < 20
// loading: 'loading2', return !row.wavePath
// icon: 'el-icon-Check', },
// render: 'basicButton', click: row => {
// disabled: row => { row.loading2 = true
// // && row.evtParamTm < 20 const url = window.location.origin + '/api/cs-harmonic-boot/event/getFileZip?eventId=' + row.id
// return !row.wavePath window.open(url, '_self')
// }, setTimeout(() => {
// click: row => { ElMessage.success('波形下载成功!')
// row.loading2 = true row.loading2 = false
// const url = window.location.origin + '/api/cs-harmonic-boot/event/getFileZip?eventId=' + row.id }, 1500)
// window.open(url, '_self') }
// setTimeout(() => { }
// ElMessage.success('波形下载成功!') ]
// row.loading2 = false
// }, 1500)
// }
// }
// ]
} }
], ],
@@ -138,6 +158,16 @@ const tableStore = new TableStore({
} }
}) })
const setHeight = () => {
if (props.activeColName == '0') {
waveFormAnalysisRef.value && waveFormAnalysisRef.value.setHeight(360, 495)
tableStore.table.height = mainHeight(385).height
} else {
waveFormAnalysisRef.value && waveFormAnalysisRef.value.setHeight(360, 360)
tableStore.table.height = mainHeight(250).height
}
}
provide('tableStore', tableStore) provide('tableStore', tableStore)
const init = () => { const init = () => {
tableStore.table.params.id = props.activeName tableStore.table.params.id = props.activeName
@@ -149,7 +179,7 @@ const init = () => {
onMounted(() => { onMounted(() => {
}) })
defineExpose({ init }) defineExpose({ init, setHeight })
</script> </script>
<style lang="scss" scoped></style> <style lang="scss" scoped></style>

View File

@@ -16,13 +16,13 @@
{{ deviceData.describe ? deviceData.describe : '/' }} {{ deviceData.describe ? deviceData.describe : '/' }}
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-collapse v-model="activeColName" @change="handleChange"> <el-collapse v-model="activeColName" @change="handleChange" accordion>
<el-collapse-item title="测试项信息" name="0"> <el-collapse-item title="测试项信息" name="0">
<div class="monitor_info" v-if="deviceData.records && deviceData.records.length != 0"> <div class="monitor_info" v-if="deviceData.records && deviceData.records.length != 0">
<!-- <div class="history_title"> <!-- <div class="history_title">
<p>测试项信息</p> <p>测试项信息</p>
</div> --> </div> -->
<el-tabs v-model="activeName" type="border-card" @click="handleClickTabs"> <el-tabs v-model="activeName" type="border-card" @tab-change="handleClickTabs">
<el-tab-pane v-for="(item, index) in deviceData?.records" :label="item.itemName" <el-tab-pane v-for="(item, index) in deviceData?.records" :label="item.itemName"
:name="item.id" :key="index"> :name="item.id" :key="index">
<template #label> <template #label>
@@ -170,7 +170,7 @@
<el-empty :style="EcharHeight" v-else description="未绑定数据" /> <el-empty :style="EcharHeight" v-else description="未绑定数据" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="暂态数据" name="1"> <el-tab-pane label="暂态数据" name="1">
<transient :activeName='activeName' ref="transientRef" /> <transient :activeName='activeName' ref="transientRef" :activeColName="activeColName"/>
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
@@ -310,6 +310,7 @@ const handleClickTabs = () => {
schemeTreeRef.value.setCheckedNode(activeName.value) schemeTreeRef.value.setCheckedNode(activeName.value)
setTimeout(() => { setTimeout(() => {
init(true) init(true)
transientRef.value && transientRef.value.init()
}, 100) }, 100)
} }
const nodeClick = async (e: anyObj) => { const nodeClick = async (e: anyObj) => {
@@ -645,12 +646,15 @@ const init = (flag: boolean) => {
} }
} }
if (chartsList.length > 0) { if (chartsList.length > 0) {
let yData: any = []
echartsData.value.yAxis = [] echartsData.value.yAxis = []
let setList = [...new Set(unitList)]; let setList = [...new Set(unitList)];
setList.forEach((item: any, index: any) => { setList.forEach((item: any, index: any) => {
if (index > 2) { if (index > 2) {
echartsData.value.grid.right = (index - 1) * 80 echartsData.value.grid.right = (index - 1) * 80
} }
yData.push([])
let right = { let right = {
position: 'right', position: 'right',
offset: (index - 1) * 80 offset: (index - 1) * 80
@@ -667,13 +671,8 @@ const init = (flag: boolean) => {
}) })
}) })
// console.log("🚀 ~ result.forEach ~ result:", result) // console.log("🚀 ~ result.forEach ~ result:", result)
let ABCName = [...new Set(chartsList.map((item: any) => { return item.anotherName == '电压负序分量' ? '电压不平衡' : item.anotherName == '电压正序分量' ? '电压不平衡' : item.anotherName == '电压零序分量' ? '电压不平衡' : item.anotherName }))]; let ABCName = [...new Set(chartsList.map((item: any) => { return item.anotherName == '电压负序分量' ? '电压不平衡' : item.anotherName == '电压正序分量' ? '电压不平衡' : item.anotherName == '电压零序分量' ? '电压不平衡' : item.anotherName }))];
// console.log("🚀 ~ result.forEach ~ result:", result)
result.forEach((item: any, index: any) => { result.forEach((item: any, index: any) => {
let yMethodList: any = [] let yMethodList: any = []
@@ -701,20 +700,12 @@ const init = (flag: boolean) => {
ABCList.forEach((kk: any) => { ABCList.forEach((kk: any) => {
let colorName = kk[0].phase?.charAt(0).toUpperCase() let colorName = kk[0].phase?.charAt(0).toUpperCase()
let lineS = ABCName.findIndex(item => item === (kk[0].anotherName == '电压负序分量' ? '电压不平衡' : kk[0].anotherName == '电压正序分量' ? '电压不平衡' : kk[0].anotherName == '电压零序分量' ? '电压不平衡' : kk[0].anotherName)); let lineS = ABCName.findIndex(item => item === (kk[0].anotherName == '电压负序分量' ? '电压不平衡' : kk[0].anotherName == '电压正序分量' ? '电压不平衡' : kk[0].anotherName == '电压零序分量' ? '电压不平衡' : kk[0].anotherName));
let seriesList: any = [] let seriesList: any = []
kk.forEach((cc: any) => { kk.forEach((cc: any) => {
if (cc.statisticalData !== null) { if (cc.statisticalData !== null) {
yMethodList.push(cc.statisticalData?.toFixed(2)) yData[setList.indexOf(kk[0].unit)].push(cc.statisticalData?.toFixed(2))
} }
seriesList.push([cc.time, cc.statisticalData?.toFixed(2), cc.unit, lineStyle[lineS].type]) seriesList.push([cc.time, cc.statisticalData?.toFixed(2), cc.unit, lineStyle[lineS].type])
}) })
@@ -732,12 +723,22 @@ const init = (flag: boolean) => {
}) })
}) })
let [min, max] = yMethod(yMethodList) // let [min, max] = yMethod(yMethodList)
// echartsData.value.yAxis[index].min = min
// echartsData.value.yAxis[index].max = max
})
yData.forEach((item: any, index: any) => {
let [min, max] = yMethod(item)
echartsData.value.yAxis[index].min = min echartsData.value.yAxis[index].min = min
echartsData.value.yAxis[index].max = max echartsData.value.yAxis[index].max = max
}) })
} }
loading.value = false loading.value = false
} }
}) })
@@ -968,6 +969,7 @@ const selectChange = (e: boolean) => {
} }
const handleChange = () => { const handleChange = () => {
if (activeColName.value == '0') { if (activeColName.value == '0') {
if (flag.value) { if (flag.value) {
EcharHeight.value = mainHeight(495) EcharHeight.value = mainHeight(495)
@@ -981,6 +983,9 @@ const handleChange = () => {
EcharHeight.value = mainHeight(315) EcharHeight.value = mainHeight(315)
} }
} }
setTimeout(() => {
transientRef.value && transientRef.value.setHeight()
}, 100);
} }
watch( watch(

View File

@@ -1,12 +1,12 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title'> <el-dialog width="600px" v-model='dialogVisible' :title='title'>
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline='false' :model='form' label-width='auto' class="form-one" :rules='rules' ref='formRef'>
<el-form-item label='名称:' class='top' prop='name'> <el-form-item label='名称:' class='top' prop='name'>
<el-input maxlength="32" show-word-limit v-model='form.name'></el-input> <el-input maxlength="32" show-word-limit v-model='form.name' placeholder='请输入名称'></el-input>
</el-form-item> </el-form-item>
<el-form-item label='计算值:' class='top'> <el-form-item label='计算值:' class='top'>
<el-input maxlength="32" show-word-limit v-model='form.value'></el-input> <el-input maxlength="32" show-word-limit v-model='form.value' placeholder="请输入计算值"></el-input>
</el-form-item> </el-form-item>
<el-form-item class='top' label='对应算法:' prop='algoDescribe' v-if='form.openDescribe == 1'> <el-form-item class='top' label='对应算法:' prop='algoDescribe' v-if='form.openDescribe == 1'>
<el-input maxlength="32" show-word-limit v-model='form.algoDescribe' placeholder='请输入数字'></el-input> <el-input maxlength="32" show-word-limit v-model='form.algoDescribe' placeholder='请输入数字'></el-input>

View File

@@ -1,12 +1,12 @@
<template> <template>
<el-dialog class='cn-operate-dialog' v-model='dialogVisible' :title='title'> <el-dialog width='600px' v-model='dialogVisible' :title='title'>
<el-scrollbar> <el-scrollbar>
<el-form :inline='false' :model='form' label-width='120px' :rules='rules' ref='formRef'> <el-form :inline='false' :model='form' label-width='auto' class="form-one" :rules='rules' ref='formRef'>
<el-form-item label='名称' prop='name'> <el-form-item label='名称' prop='name'>
<el-input maxlength="32" show-word-limit v-model='form.name'></el-input> <el-input maxlength="32" show-word-limit v-model='form.name' placeholder="请输入字典名称"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='编码' class='top' prop='code'> <el-form-item label='编码' class='top' prop='code'>
<el-input maxlength="32" show-word-limit v-model='form.code'></el-input> <el-input maxlength="32" show-word-limit v-model='form.code' placeholder="请输入字典编码"></el-input>
</el-form-item> </el-form-item>
<el-form-item label='排序' class='top' prop='sort'> <el-form-item label='排序' class='top' prop='sort'>
@@ -26,7 +26,8 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label='字典描述' class='top'> <el-form-item label='字典描述' class='top'>
<el-input maxlength="32" show-word-limit v-model='form.remark' type='textarea' :rows='2'></el-input> <el-input maxlength="300" show-word-limit v-model='form.remark' placeholder='请输入字典描述'
type='textarea' :rows='2'></el-input>
</el-form-item> </el-form-item>
</el-form> </el-form>
</el-scrollbar> </el-scrollbar>

View File

@@ -15,17 +15,17 @@
<el-input ref="usernameRef" v-model="form.username" type="text" clearable placeholder="用户名" <el-input ref="usernameRef" v-model="form.username" type="text" clearable placeholder="用户名"
autocomplete="off"> autocomplete="off">
<template #prefix> <template #prefix>
<!-- <span class="iconfont icon-yonghu" style="color: var(--el-color-primary)"></span> --> <span class="iconfont icon-yonghu" style="color: var(--el-color-primary)"></span>
<Icon name="fa fa-user" style="color: var(--el-color-primary); font-size: 16px" /> <!-- <Icon name="fa fa-user" style="color: var(--el-color-primary); font-size: 16px" /> -->
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
<el-form-item prop="password"> <el-form-item prop="password">
<el-input ref="passwordRef" v-model="form.password" type="password" placeholder="密码" <el-input ref="passwordRef" v-model="form.password" type="password" clearable placeholder="密码"
autocomplete="off"> autocomplete="off">
<template #prefix> <template #prefix>
<Icon name="local-password" style="color: var(--el-color-primary); font-size: 16px" /> <!-- <Icon name="local-password" style="color: var(--el-color-primary); font-size: 16px" /> -->
<!-- <span class="iconfont icon-mima" style="color: var(--el-color-primary)"></span> --> <span class="iconfont icon-mima" style="color: var(--el-color-primary)"></span>
</template> </template>
</el-input> </el-input>
</el-form-item> </el-form-item>
@@ -55,6 +55,7 @@ import { ElMessage } from 'element-plus'
import { gongkey, login, getSysConfig } from '@/api/user-boot/user' import { gongkey, login, getSysConfig } from '@/api/user-boot/user'
import { useAdminInfo } from '@/stores/adminInfo' import { useAdminInfo } from '@/stores/adminInfo'
import type { FormInstance, InputInstance, FormRules } from 'element-plus' import type { FormInstance, InputInstance, FormRules } from 'element-plus'
import { UserFilled, Edit, Delete, SetUp } from '@element-plus/icons-vue'
import { useRouter } from 'vue-router' import { useRouter } from 'vue-router'
import { ADMIN_INFO } from '@/stores/constant/cacheKey' import { ADMIN_INFO } from '@/stores/constant/cacheKey'
import { Local } from '@/utils/storage' import { Local } from '@/utils/storage'