实时趋势修改

This commit is contained in:
zhujiyan
2024-10-17 14:08:58 +08:00
parent 82019e377c
commit 8a1a9d31ab
6 changed files with 343 additions and 277 deletions

View File

@@ -1,6 +1,6 @@
<!-- 解析列表 --> <!-- 补召日志 -->
<template> <template>
<el-dialog v-model="dialogVisible" title="解析列表" width="70%" draggable @closed="close"> <el-dialog modal-class="analysisList" v-model="dialogVisible" title="补召日志" width="70%" draggable @closed="close">
<TableHeader date-picker></TableHeader> <TableHeader date-picker></TableHeader>
<Table ref="tableRef" /> <Table ref="tableRef" />
</el-dialog> </el-dialog>
@@ -12,15 +12,16 @@ 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 { ArrowLeft } from '@element-plus/icons-vue' import { ArrowLeft } from '@element-plus/icons-vue'
import { mainHeight } from '@/utils/layout'
import popup from './popup.vue' import popup from './popup.vue'
const emit = defineEmits(['back']) const emit = defineEmits(['back'])
const dialogVisible = ref(false) const dialogVisible = ref(false)
const height = ref(0) const height = ref(0)
height.value = window.innerHeight < 1080 ? 230 : 450 height.value = window.innerHeight < 1080 ? 230 : 450
const detailRef:any=ref() const detailRef: any = ref()
const tableStore: any = new TableStore({ const tableStore: any = new TableStore({
url: '/cs-device-boot/portableOfflLog/queryMainLogPage', url: '/cs-device-boot/portableOfflLog/queryMainLogPage',
publicHeight: height.value, publicHeight: 200,
method: 'POST', method: 'POST',
column: [ column: [
// { width: '60', type: 'checkbox', fixed: 'left' }, // { width: '60', type: 'checkbox', fixed: 'left' },
@@ -113,7 +114,8 @@ onBeforeUnmount(() => {
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-dialog_body { ::v-deep .el-dialog__body{
overflow-y: hidden !important; overflow-y: hidden !important;
height: 70vh !important;
} }
</style> </style>

View File

@@ -1,12 +1,7 @@
<!-- 解析列表 --> <!-- 解析列表 -->
<template> <template>
<el-dialog v-model="dialogVisible" title="详情" width="70%" draggable @closed="close"> <el-dialog v-model="dialogVisible" title="详情" width="70%" draggable @closed="close">
<vxe-table <vxe-table border auto-resize height="500" :data="tableData" v-bind="defaultAttribute">
border
auto-resize
:data="tableData"
v-bind="defaultAttribute"
>
<vxe-column field="name" align="center" title="文件名称"></vxe-column> <vxe-column field="name" align="center" title="文件名称"></vxe-column>
<vxe-column field="createTime" align="center" title="导入时间"></vxe-column> <vxe-column field="createTime" align="center" title="导入时间"></vxe-column>
<vxe-column field="allCount" align="center" title="数据总数(条)" width="120"></vxe-column> <vxe-column field="allCount" align="center" title="数据总数(条)" width="120"></vxe-column>
@@ -121,10 +116,8 @@ onBeforeUnmount(() => {
defineExpose({ open }) defineExpose({ open })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
::v-deep .el-dialog_body { ::v-deep .el-dialog__body {
overflow-y: hidden !important; overflow-y: none !important;
.analysisTable { max-height: 70vh !important;
height: 400px !important;
}
} }
</style> </style>

View File

@@ -24,7 +24,7 @@
icon="el-icon-Tickets" icon="el-icon-Tickets"
@click="handleAnalysisList" @click="handleAnalysisList"
> >
日志 日志
</el-button> </el-button>
</template> </template>
<el-descriptions-item label="名称"> <el-descriptions-item label="名称">
@@ -88,9 +88,9 @@
</span> </span>
</template> </template>
</el-tab-pane> </el-tab-pane>
<el-form <TableHeader
:inline="true" :showSearch="false"
style="white-space: nowrap; margin-top: 10px" :key="mqttMessage"
v-if=" v-if="
(dataSet.indexOf('_trenddata') == -1 && (dataSet.indexOf('_trenddata') == -1 &&
dataSet.indexOf('_realtimedata') == -1 && dataSet.indexOf('_realtimedata') == -1 &&
@@ -98,6 +98,7 @@
realTimeFlag realTimeFlag
" "
> >
<template #select>
<el-form-item label="日期" v-show="dataSet.indexOf('_history') != -1"> <el-form-item label="日期" v-show="dataSet.indexOf('_history') != -1">
<DatePicker ref="datePickerRef"></DatePicker> <DatePicker ref="datePickerRef"></DatePicker>
</el-form-item> </el-form-item>
@@ -110,6 +111,9 @@
placeholder="请输入关键词" placeholder="请输入关键词"
></el-input> ></el-input>
</el-form-item> </el-form-item>
<el-form-item v-if="mqttMessage.dataTime" label="数据时间">
{{ mqttMessage.dataTime }}
</el-form-item>
<el-form-item label="值类型"> <el-form-item label="值类型">
<el-select <el-select
style="width: 160px !important" style="width: 160px !important"
@@ -120,14 +124,22 @@
<el-option value="Secondary" label="二次值"></el-option> <el-option value="Secondary" label="二次值"></el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
</template>
<template #operation>
<el-button type="primary" icon="el-icon-Search" @click="handleClick">查询</el-button> <el-button type="primary" icon="el-icon-Search" @click="handleClick">查询</el-button>
<el-button type="primary" v-if="realTimeFlag" :icon="DataLine" @click="handleHarmonicSpectrum"> <el-button type="primary" v-if="realTimeFlag" :icon="DataLine" @click="handleTrend">
谐波频谱 谐波频谱
</el-button> </el-button>
<el-button type="primary" v-if="realTimeFlag" :icon="TrendCharts" @click="handleTrend"> <el-button
type="primary"
v-if="realTimeFlag"
:icon="TrendCharts"
@click="handleHarmonicSpectrum"
>
实时趋势 实时趋势
</el-button> </el-button>
</el-form> </template>
</TableHeader>
<div <div
style="height: calc(100vh - 300px)" style="height: calc(100vh - 300px)"
v-if=" v-if="
@@ -263,8 +275,6 @@
<el-button type="primary" :icon="Platform" @click="handleRecordWaves"> <el-button type="primary" :icon="Platform" @click="handleRecordWaves">
实时录波 实时录波
</el-button> </el-button>
<el-button type="primary" :icon="DataLine" @click="handleHarmonicSpectrum">谐波频谱</el-button>
<el-button type="primary" :icon="TrendCharts" @click="handleTrend">实时趋势</el-button>
</div> --> </div> -->
<div class="view_top_btn" v-if="!realTimeFlag"> <div class="view_top_btn" v-if="!realTimeFlag">
<el-button :icon="Back" @click="handleReturn">返回</el-button> <el-button :icon="Back" @click="handleReturn">返回</el-button>
@@ -300,7 +310,7 @@
<Detail ref="detailRef" :detail="detail" @close="detail = null" :dataLevel="dataLevel" v-if="detail"></Detail> <Detail ref="detailRef" :detail="detail" @close="detail = null" :dataLevel="dataLevel" v-if="detail"></Detail>
<!-- 离线数据导入组件 --> <!-- 离线数据导入组件 -->
<offLineDataImport ref="offLineDataImportRef"></offLineDataImport> <offLineDataImport ref="offLineDataImportRef"></offLineDataImport>
<!-- 解析列表 --> <!-- 补召日志 -->
<analysisList ref="analysisListRef"></analysisList> <analysisList ref="analysisListRef"></analysisList>
</div> </div>
</template> </template>
@@ -382,13 +392,13 @@ const handleRecordWaves = () => {
sonTab.value = 0 sonTab.value = 0
window.clearInterval(timer.value) window.clearInterval(timer.value)
} }
//实时趋势 //谐波频谱
const realTrendRef = ref() const realTrendRef = ref()
const changeTrendType = (val: any) => { const changeTrendType = (val: any) => {
activeTrendName.value = val * 1 activeTrendName.value = val * 1
handleTrend() handleTrend()
} }
//实时趋势 //谐波频谱
const activeTrendName: any = ref(0) const activeTrendName: any = ref(0)
const handleTrend = async () => { const handleTrend = async () => {
realTimeFlag.value = false realTimeFlag.value = false
@@ -417,9 +427,9 @@ const handleTrend = async () => {
realTrendRef.value && realTrendRef.value &&
realTrendRef.value.open({ devId: deviceId.value, lineId: lineId.value, activeTrendName: activeTrendName.value }) realTrendRef.value.open({ devId: deviceId.value, lineId: lineId.value, activeTrendName: activeTrendName.value })
} }
//谐波频谱 //实时趋势
const harmonicSpectrumRef = ref() const harmonicSpectrumRef = ref()
//谐波频谱 //实时趋势
const handleHarmonicSpectrum = () => { const handleHarmonicSpectrum = () => {
realTimeFlag.value = false realTimeFlag.value = false
// harmonicSpectrumRef.value && // harmonicSpectrumRef.value &&
@@ -428,6 +438,7 @@ const handleHarmonicSpectrum = () => {
clearInterval(realDataTimer.value) clearInterval(realDataTimer.value)
realTimeFlag.value = false realTimeFlag.value = false
sonTab.value = 2 sonTab.value = 2
harmonicSpectrumRef.value && harmonicSpectrumRef.value.resetData()
getRealDataMqttMsg() getRealDataMqttMsg()
} }
//返回 //返回
@@ -557,18 +568,16 @@ const connectMqtt = () => {
mqttRef.value = mqtt.connect(url, options) mqttRef.value = mqtt.connect(url, options)
} }
const getRealDataMqttMsg = async () => { const getRealDataMqttMsg = async () => {
clearInterval(timer.value)
clearInterval(realDataTimer.value)
//新的实时数据 //新的实时数据
//1.调用接口 mqtt推送数据 //1.调用接口 mqtt推送数据
await getBasicRealData(lineId.value).then((res: any) => { await getBasicRealData(lineId.value).then((res: any) => {
if (res.code == 'A0000') { if (res.code == 'A0000') {
ElMessage.success('装置应答成功') ElMessage.success('装置应答成功')
} else {
ElMessage.success('装置应答失败')
}
})
//2.建立mqtt通讯 //2.建立mqtt通讯
//每隔30s调用一下接口通知后台推送mqtt消息 //每隔30s调用一下接口通知后台推送mqtt消息
realDataTimer.value = await setInterval(() => { realDataTimer.value = setInterval(() => {
getBasicRealData(lineId.value).then((res: any) => { getBasicRealData(lineId.value).then((res: any) => {
console.log(res, '获取基础实时数据') console.log(res, '获取基础实时数据')
}) })
@@ -657,7 +666,6 @@ const getRealDataMqttMsg = async () => {
} }
//如果消息返回值是一次值,下拉框是二次值需要单位换算 乘以1000 并且除以pt ct //如果消息返回值是一次值,下拉框是二次值需要单位换算 乘以1000 并且除以pt ct
if (obj.dataLevel == 'Primary' && formInline.dataLevel == 'Secondary') { if (obj.dataLevel == 'Primary' && formInline.dataLevel == 'Secondary') {
console.log(6666)
obj = { obj = {
...obj, ...obj,
// 电压有效值 // 电压有效值
@@ -717,6 +725,10 @@ const getRealDataMqttMsg = async () => {
mqttRef.value.on('close', function () { mqttRef.value.on('close', function () {
console.log('mqtt客户端已断开连接.....') console.log('mqtt客户端已断开连接.....')
}) })
} else {
ElMessage.success('装置应答失败')
}
})
} }
//tab点击事件 //tab点击事件
@@ -840,9 +852,9 @@ const handleClick = async (tab?: any) => {
} }
//模版下载 //模版下载
const handleDownLoadTemplate = () => {} const handleDownLoadTemplate = () => {}
//解析列表 //补召日志
const analysisListRef = ref() const analysisListRef = ref()
//打开解析列表 //打开补召日志
const handleAnalysisList = () => { const handleAnalysisList = () => {
analysisListRef.value && analysisListRef.value.open() analysisListRef.value && analysisListRef.value.open()
} }

View File

@@ -65,7 +65,7 @@ indexOptions.value = [
{ name: 'vRmsB', phase: 'B相', data: [] }, { name: 'vRmsB', phase: 'B相', data: [] },
{ name: 'vRmsC', phase: 'C相', data: [] } { name: 'vRmsC', phase: 'C相', data: [] }
], ],
unit:'kV', unit: 'kV',
data: [] data: []
}, },
{ {
@@ -76,7 +76,7 @@ indexOptions.value = [
{ name: 'iRmsB', phase: 'B相', data: [] }, { name: 'iRmsB', phase: 'B相', data: [] },
{ name: 'iRmsC', phase: 'C相', data: [] } { name: 'iRmsC', phase: 'C相', data: [] }
], ],
unit:"A", unit: 'A',
data: [] data: []
}, },
{ {
@@ -88,7 +88,7 @@ indexOptions.value = [
{ name: 'pC', phase: 'C相', data: [] }, { name: 'pC', phase: 'C相', data: [] },
{ name: 'pTot', phase: '总', data: [] } { name: 'pTot', phase: '总', data: [] }
], ],
unit:"kW", unit: 'kW',
data: [] data: []
}, },
{ {
@@ -100,7 +100,7 @@ indexOptions.value = [
{ name: 'qC', phase: 'C相', data: [] }, { name: 'qC', phase: 'C相', data: [] },
{ name: 'qTot', phase: '总', data: [] } { name: 'qTot', phase: '总', data: [] }
], ],
unit:"kW", unit: 'kW',
data: [] data: []
}, },
@@ -112,7 +112,7 @@ indexOptions.value = [
{ name: 'v1B', phase: 'B相', data: [] }, { name: 'v1B', phase: 'B相', data: [] },
{ name: 'v1C', phase: 'C相', data: [] } { name: 'v1C', phase: 'C相', data: [] }
], ],
unit:"kV", unit: 'kV',
data: [] data: []
}, },
{ {
@@ -123,43 +123,139 @@ indexOptions.value = [
{ name: 'i1B', phase: 'B相', data: [] }, { name: 'i1B', phase: 'B相', data: [] },
{ name: 'i1C', phase: 'C相', data: [] } { name: 'i1C', phase: 'C相', data: [] }
], ],
unit:"A", unit: 'A',
data: [] data: []
}, },
{ {
id: 6, id: 6,
name: '频率(Hz)', name: '频率(Hz)',
children: [ children: [
{ name: 'freq',phase: '频率', data: [] }, { name: 'freq', phase: '频率', data: [] },
{ name: 'freqDev',phase: '频率偏差', data: [] } { name: 'freqDev', phase: '频率偏差', data: [] }
], ],
unit:"Hz", unit: 'Hz',
data: [] data: []
}, },
{ {
id: 7, id: 7,
name: '电压不平衡度(%)', name: '电压不平衡度(%)',
children: [{ name: 'vUnbalance',phase: '电压不平衡度', data: [] }], children: [{ name: 'vUnbalance', phase: '电压不平衡度', data: [] }],
unit:"%", unit: '%',
data: [] data: []
}, },
{ {
id: 8, id: 8,
name: '电流不平衡度(%)', name: '电流不平衡度(%)',
children: [{ name: 'iUnbalance',phase: '电流不平衡度', data: [] }], children: [{ name: 'iUnbalance', phase: '电流不平衡度', data: [] }],
unit:"%", unit: '%',
data: [] data: []
} }
] ]
searchForm.value.index[0] = indexOptions.value[0] // searchForm.value.index[0] = indexOptions.value[0]
const heightTop = mainHeight(275) const heightTop = mainHeight(275)
let height: any = mainHeight(275).height let height: any = mainHeight(275).height
//谐波频谱参数
const params: any = ref({}) const params: any = ref({})
const getHarmonicSpectrumParams = (val: any) => { const resetData = () => {
params.value = val indexOptions.value = [
init() {
id: 0,
name: '电压总有效值(kV)',
children: [
{ name: 'vRmsA', phase: 'A相', data: [] },
{ name: 'vRmsB', phase: 'B相', data: [] },
{ name: 'vRmsC', phase: 'C相', data: [] }
],
unit: 'kV',
data: []
},
{
id: 1,
name: '电流总有效值(A)',
children: [
{ name: 'iRmsA', phase: 'A相', data: [] },
{ name: 'iRmsB', phase: 'B相', data: [] },
{ name: 'iRmsC', phase: 'C相', data: [] }
],
unit: 'A',
data: []
},
{
id: 2,
name: '有功功率(kW)',
children: [
{ name: 'pA', phase: 'A相', data: [] },
{ name: 'pB', phase: 'B相', data: [] },
{ name: 'pC', phase: 'C相', data: [] },
{ name: 'pTot', phase: '总', data: [] }
],
unit: 'kW',
data: []
},
{
id: 3,
name: '无功功率(kW)',
children: [
{ name: 'qA', phase: 'A相', data: [] },
{ name: 'qB', phase: 'B相', data: [] },
{ name: 'qC', phase: 'C相', data: [] },
{ name: 'qTot', phase: '总', data: [] }
],
unit: 'kW',
data: []
},
{
id: 4,
name: '基波电压总有效值(kV)',
children: [
{ name: 'v1A', phase: 'A相', data: [] },
{ name: 'v1B', phase: 'B相', data: [] },
{ name: 'v1C', phase: 'C相', data: [] }
],
unit: 'kV',
data: []
},
{
id: 5,
name: '基波电流总有效值(A)',
children: [
{ name: 'i1A', phase: 'A相', data: [] },
{ name: 'i1B', phase: 'B相', data: [] },
{ name: 'i1C', phase: 'C相', data: [] }
],
unit: 'A',
data: []
},
{
id: 6,
name: '频率(Hz)',
children: [
{ name: 'freq', phase: '频率', data: [] },
{ name: 'freqDev', phase: '频率偏差', data: [] }
],
unit: 'Hz',
data: []
},
{
id: 7,
name: '电压不平衡度(%)',
children: [{ name: 'vUnbalance', phase: '电压不平衡度', data: [] }],
unit: '%',
data: []
},
{
id: 8,
name: '电流不平衡度(%)',
children: [{ name: 'iUnbalance', phase: '电流不平衡度', data: [] }],
unit: '%',
data: []
}
]
searchForm.value.index = []
searchForm.value.index[0] = indexOptions.value[0]
} }
resetData()
const mqttMessage: any = ref() const mqttMessage: any = ref()
const setHarmonicSpectrumData = (val: any) => { const setHarmonicSpectrumData = (val: any) => {
mqttMessage.value = val mqttMessage.value = val
@@ -500,7 +596,7 @@ watch(
} }
) )
onMounted(() => {}) onMounted(() => {})
defineExpose({ getHarmonicSpectrumParams, setHarmonicSpectrumData }) defineExpose({ resetData, setHarmonicSpectrumData })
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.harmonic { .harmonic {

View File

@@ -212,7 +212,6 @@ const barCharts = ref()
//加载echarts //加载echarts
const init = () => { const init = () => {
console.log(tableData.value, '++++++++')
let trendData: any = [] let trendData: any = []
for (let key in tableData.value) { for (let key in tableData.value) {
console.log(key, ',,,,,') console.log(key, ',,,,,')
@@ -229,7 +228,6 @@ const init = () => {
value: limitData.value[key] value: limitData.value[key]
}) })
} }
console.log(trendData, 'mmmmm', gbData)
let xAxisList: any = [] let xAxisList: any = []
chartsData.value.map((item: any, index: any) => { chartsData.value.map((item: any, index: any) => {
chartsYxiasData.value.map((vv: any, vvs: any) => { chartsYxiasData.value.map((vv: any, vvs: any) => {
@@ -412,42 +410,6 @@ defineExpose({ open, setRealTrendData, setOverLimitData })
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
// .thead {
// height: 100%;
// // overflow-y: hidden;
// border: 1px solid #eee;
// border-right: 0;
// ul {
// width: auto;
// height: 40px;
// display: flex;
// li {
// flex: none;
// width: 100px;
// line-height: 40px;
// border: 1px solid #eee;
// text-align: center;
// list-style: none;
// }
// li:nth-child(1) {
// flex: none;
// width: 200px;
// }
// }
// ul:nth-child(1) {
// li {
// font-weight: 800;
// background: #f4f6f9;
// }
// }
// ul:nth-child(4) {
// height: 48px;
// }
// }
.table { .table {
flex: 1; flex: 1;
// min-height: 80px; // min-height: 80px;

View File

@@ -1,6 +1,5 @@
<template> <template>
<div class="view" v-loading="loading"> <div class="view" v-loading="loading">
<div class="view_time" v-if="realData.dataTime">数据时间{{ realData?.dataTime }}</div>
<div class="view_top"> <div class="view_top">
<!-- 左侧仪表盘 --> <!-- 左侧仪表盘 -->
<div class="view_top_left"> <div class="view_top_left">
@@ -594,16 +593,17 @@ onMounted(() => {
flex-direction: column; flex-direction: column;
.view_top { .view_top {
width: 100%; width: 100%;
height: auto; height: 340px !important;
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
//border: 1px solid #eee; //border: 1px solid #eee;
// padding: 10px; // padding: 10px;
.view_top_left, .view_top_left,
.view_top_right { .view_top_right {
width: 30%; // width: 300px;
flex: 1;
height: 100%; height: 100%;
padding: 10px; // padding: 10px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
@@ -612,18 +612,18 @@ onMounted(() => {
.right_charts { .right_charts {
flex: none; flex: none;
width: 100%; width: 100%;
height: 120px; height: 90px;
// margin-bottom: 16px;
margin-bottom: 16px; // padding: 10px;
padding: 10px; margin-bottom: 8px;
} }
} }
.view_top_mid { .view_top_mid {
flex: 1; // flex: 1;
width: 40%;
border: 1px solid #eee; border: 1px solid #eee;
margin: 0 10px; margin: 0 10px;
padding: 10px; padding: 10px;
height: 450px;
.mid_charts { .mid_charts {
width: 100%; width: 100%;
height: 100%; height: 100%;
@@ -639,6 +639,7 @@ onMounted(() => {
font-weight: 800; font-weight: 800;
font-weight: 16px; font-weight: 16px;
line-height: 20px; line-height: 20px;
margin: 10px;
} }
} }
.view_bot { .view_bot {