修改测试bug
This commit is contained in:
@@ -1,10 +1,6 @@
|
||||
<template>
|
||||
<div
|
||||
class="default-main device-control"
|
||||
:style="{ height: pageHeight.height }"
|
||||
v-loading="loading"
|
||||
style="position: relative"
|
||||
>
|
||||
<div class="default-main device-control" :style="{ height: pageHeight.height }" v-loading="loading"
|
||||
style="position: relative">
|
||||
<!-- @init="nodeClick" -->
|
||||
<PointTree @node-click="nodeClick" @pointTypeChange="pointTypeChange"></PointTree>
|
||||
<div class="device-control-right" v-if="deviceData">
|
||||
@@ -19,12 +15,8 @@
|
||||
<el-button v-if="deviceType == '1'" type="primary" icon="el-icon-Monitor" @click="handleaddDevice">
|
||||
在线补召
|
||||
</el-button> -->
|
||||
<el-button
|
||||
v-if="deviceType == '1'"
|
||||
type="primary"
|
||||
icon="el-icon-Tickets"
|
||||
@click="handleAnalysisList"
|
||||
>
|
||||
<el-button v-if="deviceType == '1'" type="primary" icon="el-icon-Tickets"
|
||||
@click="handleAnalysisList">
|
||||
补召
|
||||
</el-button>
|
||||
</template>
|
||||
@@ -38,10 +30,10 @@
|
||||
devData.conType == 0
|
||||
? '星型接线'
|
||||
: devData.conType == 1
|
||||
? '角型接线'
|
||||
: devData.conType == 2
|
||||
? 'V型接线'
|
||||
: '/'
|
||||
? '角型接线'
|
||||
: devData.conType == 2
|
||||
? 'V型接线'
|
||||
: '/'
|
||||
}}
|
||||
</el-descriptions-item>
|
||||
|
||||
@@ -50,18 +42,13 @@
|
||||
</el-descriptions-item> -->
|
||||
|
||||
<el-descriptions-item label="PT变比" width="160">
|
||||
{{
|
||||
devData.ptRatio == null
|
||||
? '/'
|
||||
: devData.ptRatio + (devData.pt2Ratio == null ? '' : ':' + devData.pt2Ratio)
|
||||
}}
|
||||
{{ devData.ptRatio || 1 }} :
|
||||
{{ devData.pt2Ratio || 1 }}
|
||||
</el-descriptions-item>
|
||||
<el-descriptions-item label="CT变比" width="160">
|
||||
{{
|
||||
devData.ctRatio == null
|
||||
? '/'
|
||||
: devData.ctRatio + (devData.ct2Ratio == null ? '' : ':' + devData.ct2Ratio)
|
||||
}}
|
||||
{{ devData.ctRatio || 1 }} :
|
||||
{{ devData.ct2Ratio || 1 }}
|
||||
|
||||
</el-descriptions-item>
|
||||
|
||||
<!-- <el-descriptions-item label="名称">
|
||||
@@ -85,14 +72,8 @@
|
||||
</el-descriptions-item> -->
|
||||
</el-descriptions>
|
||||
<el-tabs v-model.trim="dataSet" type="border-card" class="device-control-box-card" @tab-click="handleClick">
|
||||
<el-tab-pane
|
||||
lazy
|
||||
:label="item.name"
|
||||
:name="item.id"
|
||||
v-for="(item, index) in deviceData.dataSetList"
|
||||
:key="index"
|
||||
:disabled="tableLoading"
|
||||
>
|
||||
<el-tab-pane lazy :label="item.name" :name="item.id" v-for="(item, index) in deviceData.dataSetList"
|
||||
:key="index" :disabled="tableLoading">
|
||||
<template #label>
|
||||
<span class="custom-tabs-label">
|
||||
<!-- <el-icon>
|
||||
@@ -126,36 +107,25 @@
|
||||
</span>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<TableHeader
|
||||
:showSearch="false"
|
||||
v-if="
|
||||
(dataSet.indexOf('_trenddata') == -1 &&
|
||||
<TableHeader :showSearch="false" v-if="
|
||||
(dataSet.indexOf('_trenddata') == -1 &&
|
||||
dataSet.indexOf('_kilowattHour') == -1 &&
|
||||
dataSet.indexOf('_realtimedata') == -1 &&
|
||||
dataSet.indexOf('_event') == -1) ||
|
||||
realTimeFlag
|
||||
"
|
||||
>
|
||||
dataSet.indexOf('_realtimedata') == -1 &&
|
||||
dataSet.indexOf('_event') == -1) ||
|
||||
realTimeFlag
|
||||
">
|
||||
<template #select>
|
||||
<el-form-item
|
||||
label="日期"
|
||||
v-show="
|
||||
dataSet.includes('_items') ||
|
||||
dataSet.indexOf('_history') != -1 ||
|
||||
dataSet.indexOf('_moduleData') != -1 ||
|
||||
dataSet.indexOf('_devRunTrend') != -1
|
||||
"
|
||||
>
|
||||
<DatePicker ref="datePickerRef"></DatePicker>
|
||||
<el-form-item label="日期" v-show="dataSet.includes('_items') ||
|
||||
dataSet.indexOf('_history') != -1 ||
|
||||
dataSet.indexOf('_moduleData') != -1 ||
|
||||
dataSet.indexOf('_devRunTrend') != -1
|
||||
">
|
||||
<DatePicker ref="datePickerRef" :timeKeyList="['3', '4', '5']"></DatePicker>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据类型" v-if="!dataSet.includes('_')">
|
||||
<el-select v-model.trim="formInline.targetType" @change="handleTargetTypeChange">
|
||||
<el-option
|
||||
v-for="item in queryList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
<el-option v-for="item in queryList" :key="item.id" :label="item.name"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
|
||||
@@ -165,16 +135,15 @@
|
||||
<el-option value="Primary" label="一次值"></el-option>
|
||||
<el-option value="Secondary" label="二次值"></el-option>
|
||||
</el-select> -->
|
||||
<el-radio-group
|
||||
v-model.trim="formInline.dataLevel"
|
||||
v-if="
|
||||
!dataSet.includes('_devRunTrend') &&
|
||||
!dataSet.includes('_moduleData') &&
|
||||
TrendList?.lineType == 1
|
||||
"
|
||||
:disabled="TrendList?.lineType != 1"
|
||||
@change="handleClick"
|
||||
>
|
||||
<!-- _realtimedata
|
||||
-->
|
||||
|
||||
<el-radio-group v-model.trim="formInline.dataLevel" v-if="
|
||||
!dataSet.includes('_devRunTrend') &&
|
||||
!dataSet.includes('_moduleData') &&
|
||||
TrendList?.lineType == 1
|
||||
" :disabled="TrendList?.lineType != 1"
|
||||
@change="dataSet.includes('_realtimedata') ? realtimeChange() : handleClick()">
|
||||
<el-radio-button label="一次值" value="Primary" />
|
||||
<el-radio-button label="二次值" value="Secondary" />
|
||||
</el-radio-group>
|
||||
@@ -182,102 +151,56 @@
|
||||
|
||||
<el-form-item label="谐波次数" v-show="oddAndEvenFlag && !dataSet.includes('_')">
|
||||
<el-select v-model.trim="oddAndEven" style="min-width: 120px !important">
|
||||
<el-option
|
||||
v-for="item in oddAndEvenList"
|
||||
:key="item.value"
|
||||
:label="item.label"
|
||||
:value="item.value"
|
||||
/>
|
||||
<el-option v-for="item in oddAndEvenList" :key="item.value" :label="item.label"
|
||||
:value="item.value" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="数据来源" v-if="dataSet.includes('_items')">
|
||||
<el-select v-model.trim="formInline.dataSource" placeholder="请选择数据来源" clearable>
|
||||
<el-option
|
||||
v-for="item in dataSourceList"
|
||||
:key="item.id"
|
||||
:label="item.name"
|
||||
:value="item.id"
|
||||
/>
|
||||
<el-option v-for="item in dataSourceList" :key="item.id" :label="item.name"
|
||||
:value="item.id" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关键字筛选" v-if="!dataSet.includes('_')">
|
||||
<el-input
|
||||
maxlength="32"
|
||||
show-word-limit
|
||||
v-model.trim="searchValue"
|
||||
autocomplete="off"
|
||||
clearable
|
||||
@input="handleSearch"
|
||||
placeholder="请输入关键字筛选"
|
||||
style="width: 180px !important"
|
||||
></el-input>
|
||||
<el-input maxlength="32" show-word-limit v-model.trim="searchValue" autocomplete="off"
|
||||
clearable @input="handleSearch" placeholder="请输入关键字筛选"
|
||||
style="width: 180px !important"></el-input>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<template #operation>
|
||||
<el-button
|
||||
type="primary"
|
||||
<el-button type="primary"
|
||||
:icon="dataSet.indexOf('_realtimedata') != -1 ? 'el-icon-Refresh' : 'el-icon-Search'"
|
||||
@click="handleClick"
|
||||
>
|
||||
@click="handleClick" :loading="tableLoading">
|
||||
{{ dataSet.indexOf('_realtimedata') != -1 ? '刷新' : '查询' }}
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
v-if="dataSet.indexOf('_moduleData') != -1 && moduleFlag"
|
||||
:icon="Refresh"
|
||||
@click="refreshTheState"
|
||||
>
|
||||
<el-button type="primary" v-if="dataSet.indexOf('_moduleData') != -1 && moduleFlag"
|
||||
:icon="Refresh" @click="refreshTheState">
|
||||
刷新状态
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
:disabled="tableLoading"
|
||||
v-if="showButton"
|
||||
:icon="DataLine"
|
||||
@click="handleTrend"
|
||||
>
|
||||
<el-button type="primary" :disabled="tableLoading" v-if="showButton" :icon="DataLine"
|
||||
@click="handleTrend">
|
||||
谐波频谱
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
v-if="showButton"
|
||||
:icon="TrendCharts"
|
||||
@click="handleHarmonicSpectrum"
|
||||
:disabled="tableLoading"
|
||||
>
|
||||
<el-button type="primary" v-if="showButton" :icon="TrendCharts" @click="handleHarmonicSpectrum"
|
||||
:disabled="tableLoading">
|
||||
实时趋势
|
||||
</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
v-if="showButton"
|
||||
:icon="Download"
|
||||
@click="downloadTxt"
|
||||
:disabled="tableLoading"
|
||||
>
|
||||
<el-button type="primary" v-if="showButton" :icon="Download" @click="downloadTxt"
|
||||
:disabled="tableLoading">
|
||||
下载数据
|
||||
</el-button>
|
||||
</template>
|
||||
</TableHeader>
|
||||
<div
|
||||
class="data_time"
|
||||
:style="{
|
||||
height: realTimeFlag ? '30px' : '40px',
|
||||
alignItems: realTimeFlag ? 'flex-end' : 'center'
|
||||
}"
|
||||
v-if="dataSet.includes('_realtimedata') && mqttMessage && mqttMessage.dataTime && sonTab != 2"
|
||||
>
|
||||
<p class="mb5">
|
||||
<span v-if="trendDataTime && !realTimeFlag">数据时间:{{ trendDataTime }}</span>
|
||||
<span v-if="realTimeFlag">数据时间:{{ mqttMessage.dataTime }}</span>
|
||||
<div class="data_time" :style="{
|
||||
alignItems: realTimeFlag ? 'flex-end' : 'center'
|
||||
}" v-if="dataSet.includes('_realtimedata') && sonTab != 2 && trendDataTime && !realTimeFlag">
|
||||
<p class="mb10 mt10">
|
||||
<span>数据时间:{{ trendDataTime || '-' }}</span>
|
||||
|
||||
</p>
|
||||
|
||||
<el-button
|
||||
v-if="!realTimeFlag && dataSet.includes('_realtimedata')"
|
||||
style="float: right !important"
|
||||
:icon="Back"
|
||||
@click="handleReturn"
|
||||
:loading="tableLoading"
|
||||
>
|
||||
<el-button v-if="!realTimeFlag && dataSet.includes('_realtimedata')" style="float: right !important"
|
||||
:icon="Back" @click="handleReturn" :loading="tableLoading">
|
||||
返回
|
||||
</el-button>
|
||||
</div>
|
||||
@@ -293,52 +216,32 @@
|
||||
></div> -->
|
||||
<!-- v-loading="tableLoading" -->
|
||||
<div :style="{ height: tableHeight }" v-loading="tableLoading" v-if="!dataSet.includes('_')">
|
||||
<div
|
||||
style="overflow: auto"
|
||||
:style="{ height: tableHeight }"
|
||||
v-if="
|
||||
dataSet.indexOf('_trenddata') == -1 &&
|
||||
dataSet.indexOf('_kilowattHour') == -1 &&
|
||||
dataSet.indexOf('_realtimedata') == -1 &&
|
||||
dataSet.indexOf('_event') == -1 &&
|
||||
tableData.length != 0
|
||||
"
|
||||
>
|
||||
<div
|
||||
class="mb5 mt5"
|
||||
v-if="dataSet.indexOf('_history') == -1"
|
||||
style="font-weight: 800; font-size: 16px; text-align: center"
|
||||
>
|
||||
统计时间:{{ tableData[0]?.time || '' }}
|
||||
<div style="overflow: auto" :style="{ height: tableHeight }" v-if="
|
||||
dataSet.indexOf('_trenddata') == -1 &&
|
||||
dataSet.indexOf('_kilowattHour') == -1 &&
|
||||
dataSet.indexOf('_realtimedata') == -1 &&
|
||||
dataSet.indexOf('_event') == -1 &&
|
||||
tableData.length != 0
|
||||
">
|
||||
<div class="mb10 mt10" v-if="dataSet.indexOf('_history') == -1"
|
||||
style="font-weight: 700; font-size: 13px; text-align: center">
|
||||
最新数据时标:{{ tableData[0]?.time || '-' }}
|
||||
</div>
|
||||
|
||||
<nearRealTimeData
|
||||
ref="nearRealTimeDataRef"
|
||||
v-if="dataSet.indexOf('_history') == -1"
|
||||
:style="{ height: tableHeightBox, overflow: 'auto' }"
|
||||
/>
|
||||
<nearRealTimeData ref="nearRealTimeDataRef" v-if="dataSet.indexOf('_history') == -1"
|
||||
:style="{ height: tableHeightBox, overflow: 'auto' }" />
|
||||
|
||||
<!-- 循环渲染的card 最新数据/历史数据显示 -->
|
||||
<div
|
||||
class="content"
|
||||
<div class="content"
|
||||
v-if="tableData.length != 0 && !tableLoading && dataSet.indexOf('_history') != -1"
|
||||
:style="{ height: tableHeightBox }"
|
||||
>
|
||||
<el-card
|
||||
class="box-card"
|
||||
:class="dataSet.indexOf('_history') == -1 ? 'box-card-new' : ''"
|
||||
v-for="(item, index) in tableData"
|
||||
:key="index"
|
||||
>
|
||||
:style="{ height: tableHeightBox }">
|
||||
<el-card class="box-card" :class="dataSet.indexOf('_history') == -1 ? 'box-card-new' : ''"
|
||||
v-for="(item, index) in tableData" :key="index">
|
||||
<template #header>
|
||||
<div class="clearfix">
|
||||
<span style="flex: 1">{{ item.name }}</span>
|
||||
<Icon
|
||||
name="el-icon-TrendCharts"
|
||||
class="ml10"
|
||||
@click="getDeviceDataTrend(item)"
|
||||
style="font-size: 26px; cursor: pointer; color: #fff"
|
||||
></Icon>
|
||||
<Icon name="el-icon-TrendCharts" class="ml10" @click="getDeviceDataTrend(item)"
|
||||
style="font-size: 26px; cursor: pointer; color: #fff"></Icon>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -352,49 +255,37 @@
|
||||
</div>
|
||||
<div v-else-if="item.children.length" class="box-card-div">
|
||||
<div style="display: flex; align-items: center">
|
||||
<el-tag
|
||||
effect="dark"
|
||||
type="danger"
|
||||
style="width: 40px; text-align: center"
|
||||
class="mr10"
|
||||
>
|
||||
<el-tag effect="dark" type="danger" style="width: 40px; text-align: center"
|
||||
class="mr10">
|
||||
MAX
|
||||
</el-tag>
|
||||
{{
|
||||
item.children[0].maxValue === 3.1415956 ||
|
||||
typeof item.children[0].maxValue != 'number'
|
||||
typeof item.children[0].maxValue != 'number'
|
||||
? '暂无数据'
|
||||
: item.children[0].maxValue
|
||||
}}
|
||||
</div>
|
||||
<div style="display: flex; align-items: center">
|
||||
<el-tag
|
||||
effect="dark"
|
||||
type="success"
|
||||
style="width: 40px; text-align: center"
|
||||
class="mr10"
|
||||
>
|
||||
<el-tag effect="dark" type="success" style="width: 40px; text-align: center"
|
||||
class="mr10">
|
||||
AVG
|
||||
</el-tag>
|
||||
{{
|
||||
item.children[0].avgValue === 3.1415956 ||
|
||||
typeof item.children[0].avgValue != 'number'
|
||||
typeof item.children[0].avgValue != 'number'
|
||||
? '暂无数据'
|
||||
: item.children[0].avgValue
|
||||
}}
|
||||
</div>
|
||||
<div style="display: flex; align-items: center">
|
||||
<el-tag
|
||||
effect="dark"
|
||||
type="warning"
|
||||
style="width: 40px; text-align: center"
|
||||
class="mr10"
|
||||
>
|
||||
<el-tag effect="dark" type="warning" style="width: 40px; text-align: center"
|
||||
class="mr10">
|
||||
MIN
|
||||
</el-tag>
|
||||
{{
|
||||
item.children[0].minValue === 3.1415956 ||
|
||||
typeof item.children[0].minValue != 'number'
|
||||
typeof item.children[0].minValue != 'number'
|
||||
? '暂无数据'
|
||||
: item.children[0].minValue
|
||||
}}
|
||||
@@ -403,82 +294,10 @@
|
||||
</el-card>
|
||||
<el-empty description="暂无数据" v-if="tableData.length === 0"></el-empty>
|
||||
</div>
|
||||
<!-- <div class="content" v-if="tableData.length != 0 && !tableLoading"
|
||||
:style="{ height: tableHeightBox }">
|
||||
|
||||
<el-card class="box-card" :class="dataSet.indexOf('_history') == -1 ? 'box-card-new' : ''"
|
||||
v-for="(item, index) in tableData" :key="index">
|
||||
<template #header>
|
||||
<div class="clearfix">
|
||||
<span style="flex: 1">{{ item.name }}</span>
|
||||
<Icon name="el-icon-TrendCharts" class="ml10" @click="getDeviceDataTrend(item)"
|
||||
style="font-size: 26px; cursor: pointer; color: #fff"></Icon>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<div class="box-card-content" v-if="dataSet.indexOf('_history') == -1">
|
||||
<div class="box-card-div">
|
||||
<div v-for="(child, childIndex) in item.children" :key="childIndex">
|
||||
{{ child.anotherName }}:
|
||||
{{ child.dataValue === 3.1415926 ? '暂无数据' : child.dataValue }}
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
<div v-else-if="item.children.length" class="box-card-div">
|
||||
<div style="display: flex; align-items: center">
|
||||
<el-tag effect="dark" type="danger" style="width: 40px; text-align: center"
|
||||
class="mr10">
|
||||
MAX
|
||||
</el-tag>
|
||||
{{
|
||||
item.children[0].maxValue === 3.1415956 ||
|
||||
typeof item.children[0].maxValue != 'number'
|
||||
? '暂无数据'
|
||||
: item.children[0].maxValue
|
||||
}}
|
||||
</div>
|
||||
<div style="display: flex; align-items: center">
|
||||
<el-tag effect="dark" type="success" style="width: 40px; text-align: center"
|
||||
class="mr10">
|
||||
AVG
|
||||
</el-tag>
|
||||
{{
|
||||
item.children[0].avgValue === 3.1415956 ||
|
||||
typeof item.children[0].avgValue != 'number'
|
||||
? '暂无数据'
|
||||
: item.children[0].avgValue
|
||||
}}
|
||||
</div>
|
||||
<div style="display: flex; align-items: center">
|
||||
<el-tag effect="dark" type="warning" style="width: 40px; text-align: center"
|
||||
class="mr10">
|
||||
MIN
|
||||
</el-tag>
|
||||
{{
|
||||
item.children[0].minValue === 3.1415956 ||
|
||||
typeof item.children[0].minValue != 'number'
|
||||
? '暂无数据'
|
||||
: item.children[0].minValue
|
||||
}}
|
||||
</div>
|
||||
</div>
|
||||
</el-card>
|
||||
<el-empty description="暂无数据" v-if="tableData.length === 0"></el-empty>
|
||||
</div> -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- <el-pagination v-if="
|
||||
tableData.length &&
|
||||
dataSet.indexOf('_trenddata') == -1 &&
|
||||
dataSet.indexOf('_realtimedata') == -1 &&
|
||||
dataSet.indexOf('_event') == -1
|
||||
" background class="mr2 mt10" style="float: right" @size-change="handleSizeChange"
|
||||
@current-change="pageChange" :current-page="formInline.pageNum" :page-sizes="[20, 30, 40, 50, 100]"
|
||||
:page-size="formInline.pageSize" layout="total, sizes, prev, pager, next, jumper"
|
||||
:total="formInline.total"></el-pagination> -->
|
||||
|
||||
|
||||
<!-- 趋势数据 -->
|
||||
<div style="height: calc(100vh - 340px)" v-if="dataSet.indexOf('_trenddata') != -1">
|
||||
@@ -489,68 +308,47 @@
|
||||
<electroplating ref="electroplatingRef" :TrendList="TrendList"></electroplating>
|
||||
</div>
|
||||
<!-- 实时数据 -->
|
||||
<div
|
||||
:style="`height: calc(100vh - (${sonTab == 1 ? '378px' : sonTab == 2 ? '340px' : '425px'}))`"
|
||||
v-if="dataSet.indexOf('_realtimedata') != -1"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<div :style="`height: calc(100vh - (${sonTab == 1 ? '346px' : sonTab == 2 ? '308px' : '393px'}))`"
|
||||
v-if="dataSet.indexOf('_realtimedata') != -1" v-loading="tableLoading"
|
||||
>
|
||||
<!-- <div class="view_top_btn" v-if="realTimeFlag">
|
||||
<el-button type="primary" :icon="Platform" @click="handleRecordWaves">
|
||||
实时录波
|
||||
</el-button>
|
||||
</div> -->
|
||||
<div
|
||||
class="view_top_btn"
|
||||
v-if="dataSet.includes('_realtimedata') && !realTimeFlag && mqttMessage.dataTime && sonTab == 2"
|
||||
>
|
||||
<div class="view_top_btn"
|
||||
v-if="dataSet.includes('_realtimedata') && !realTimeFlag && mqttMessage.dataTime && sonTab == 2">
|
||||
<el-button :icon="Back" @click="handleReturn" :loading="tableLoading">返回</el-button>
|
||||
</div>
|
||||
<!-- 实时数据主界面组件 -->
|
||||
<realTime v-if="realTimeFlag" ref="realTimeRef"></realTime>
|
||||
<realTime v-if="realTimeFlag" ref="realTimeRef" :dataTime="mqttMessage.dataTime"></realTime>
|
||||
<!-- 实时数据-实时录波组件 -->
|
||||
<recordWoves v-if="!realTimeFlag && sonTab == 0"></recordWoves>
|
||||
<!-- 实时数据-实时趋势组件 -->
|
||||
<realTrend
|
||||
v-if="!realTimeFlag && sonTab == 1"
|
||||
ref="realTrendRef"
|
||||
@changeTrendType="changeTrendType"
|
||||
></realTrend>
|
||||
<realTrend v-if="!realTimeFlag && sonTab == 1" ref="realTrendRef"
|
||||
@changeTrendType="changeTrendType">
|
||||
</realTrend>
|
||||
<!-- 实时数据-谐波频谱组件 -->
|
||||
<harmonicSpectrum
|
||||
v-show="!realTimeFlag && sonTab == 2"
|
||||
ref="harmonicSpectrumRef"
|
||||
></harmonicSpectrum>
|
||||
<harmonicSpectrum v-show="!realTimeFlag && sonTab == 2" ref="harmonicSpectrumRef">
|
||||
</harmonicSpectrum>
|
||||
</div>
|
||||
<!-- 暂态事件 -->
|
||||
<div
|
||||
style="height: calc(100vh - 340px)"
|
||||
v-if="dataSet.indexOf('_event') != -1"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<div style="height: calc(100vh - 340px)" v-if="dataSet.indexOf('_event') != -1">
|
||||
<Event ref="eventRef" :deviceType="deviceType"></Event>
|
||||
</div>
|
||||
<!-- 测试项记录 -->
|
||||
<div
|
||||
style="height: calc(100vh - 395px)"
|
||||
v-if="dataSet.indexOf('_items') != -1"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<div style="height: calc(100vh - 395px)" v-if="dataSet.indexOf('_items') != -1"
|
||||
v-loading="tableLoading">
|
||||
<testItemRecords ref="testItemRecordsRef" @onSubmit="handleClick" />
|
||||
</div>
|
||||
<!-- 模块数据 -->
|
||||
<div
|
||||
style="height: calc(100vh - 395px)"
|
||||
v-if="dataSet.indexOf('_moduleData') != -1"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<div style="height: calc(100vh - 395px)" v-if="dataSet.indexOf('_moduleData') != -1"
|
||||
v-loading="tableLoading">
|
||||
<moduleData ref="moduleDataRef" @onSubmit="handleClick" />
|
||||
</div>
|
||||
<!-- 运行趋势 -->
|
||||
<div
|
||||
style="height: calc(100vh - 395px)"
|
||||
v-if="dataSet.indexOf('_devRunTrend') != -1"
|
||||
v-loading="tableLoading"
|
||||
>
|
||||
<div style="height: calc(100vh - 395px)" v-if="dataSet.indexOf('_devRunTrend') != -1"
|
||||
v-loading="tableLoading">
|
||||
<operatingTrend ref="operatingTrendRef" @onSubmit="handleClick" />
|
||||
</div>
|
||||
<div v-if="!tableData" style="height: 42px"></div>
|
||||
@@ -592,7 +390,7 @@ import harmonicSpectrum from './tabs/components/harmonicSpectrum.vue' //实时
|
||||
import recordWoves from './tabs/components/recordwoves.vue' //实时数据-实时录波子页面
|
||||
import offLineDataImport from './offLineDataImport/index.vue'
|
||||
import Event from './tabs/event.vue'
|
||||
import nearRealTimeData from './nearRealTimeData.vue'
|
||||
import nearRealTimeData from './nearRealTimeData.vue'//最新数据
|
||||
import testItemRecords from './testItemRecords.vue'
|
||||
import moduleData from './moduleData.vue'
|
||||
import { useDictData } from '@/stores/dictData'
|
||||
@@ -694,7 +492,7 @@ const volConTypeList = dictData.getBasicData('Dev_Connect')
|
||||
const realTrendRef = ref()
|
||||
const txtContent = ref('')
|
||||
const operatingTrendRef = ref()
|
||||
const electroplatingRef = ref()
|
||||
const electroplatingRef = ref()
|
||||
const changeTrendType = (val: any) => {
|
||||
trendDataTime.value = ''
|
||||
activeTrendName.value = val * 1
|
||||
@@ -739,7 +537,7 @@ const handleTrend = async () => {
|
||||
.then((res: any) => {
|
||||
if (res.code == 'A0000') {
|
||||
trendDataTime.value = ''
|
||||
ElMessage.success('设备应答成功')
|
||||
// ElMessage.success('设备应答成功')
|
||||
//每隔30s调用一下接口,通知后台推送mqtt消息
|
||||
trendTimer.value = window.setInterval(() => {
|
||||
if (!dataSet.value.includes('_realtimedata')) return
|
||||
@@ -781,7 +579,7 @@ const handleHarmonicSpectrum = async () => {
|
||||
// getRealDataMqttMsg()
|
||||
await getBasicRealData(lineId.value).then((res: any) => {
|
||||
if (res.code == 'A0000') {
|
||||
ElMessage.success('设备应答成功')
|
||||
// ElMessage.success('设备应答成功')
|
||||
// mqttMessage.value = {}
|
||||
showButton.value = true
|
||||
realDataTimer.value = window.setInterval(() => {
|
||||
@@ -811,7 +609,7 @@ const handleReturn = async () => {
|
||||
tableLoading.value = true
|
||||
await getBasicRealData(lineId.value).then((res: any) => {
|
||||
if (res.code == 'A0000') {
|
||||
ElMessage.success('设备应答成功')
|
||||
// ElMessage.success('设备应答成功')
|
||||
showButton.value = true
|
||||
// mqttMessage.value = {}
|
||||
realDataTimer.value = window.setInterval(() => {
|
||||
@@ -905,7 +703,7 @@ const nodeClick = async (e: anyObj, node?: any) => {
|
||||
}
|
||||
|
||||
//选中设备名称后,点击标签页也能查询数据,要求点击设备名称后,点击标签页默认查询第一个监测点数据
|
||||
if (e.level == 3 ) {
|
||||
if (e.level == 3) {
|
||||
engineeringName.value = node?.parent.parent.data.name
|
||||
|
||||
await queryDictType({
|
||||
@@ -1008,6 +806,7 @@ const bindMqttMessage = (handler: (topic: any, message: any) => void) => {
|
||||
mqttRef.value.on('message', handler)
|
||||
}
|
||||
|
||||
|
||||
const connectMqtt = () => {
|
||||
if (mqttRef.value) {
|
||||
if (mqttRef.value.connected) {
|
||||
@@ -1039,7 +838,7 @@ const getRealDataMqttMsg = async () => {
|
||||
await getBasicRealData(lineId.value)
|
||||
.then((res: any) => {
|
||||
if (res.code == 'A0000') {
|
||||
ElMessage.success('设备应答成功')
|
||||
// ElMessage.success('设备应答成功')
|
||||
mqttMessage.value = {}
|
||||
showButton.value = true
|
||||
realDataTimer.value = window.setInterval(async () => {
|
||||
@@ -1064,7 +863,7 @@ const getRealDataMqttMsg = async () => {
|
||||
tableLoading.value = false
|
||||
}, 6000)
|
||||
} else {
|
||||
ElMessage.success('设备应答失败')
|
||||
ElMessage.warning('设备应答失败')
|
||||
tableLoading.value = false
|
||||
}
|
||||
})
|
||||
@@ -1078,147 +877,150 @@ const getRealDataMqttMsg = async () => {
|
||||
|
||||
const realDataTimer: any = ref()
|
||||
const mqttMessage = ref<any>({})
|
||||
|
||||
const realtimeMessage = ref<any>({})
|
||||
const realtimeChange = () => {
|
||||
onMqttRealDataMessage('', realtimeMessage.value)
|
||||
}
|
||||
/** 实时数据 / 实时趋势 MQTT 消息(命名函数,便于 off 避免重复注册) */
|
||||
const onMqttRealDataMessage = (topic: any, message: any) => {
|
||||
let obj = decodeMqttPayload(message)
|
||||
|
||||
if (lineId.value != obj.lineId || adminInfo.userIndex != obj.userId) return
|
||||
|
||||
realtimeMessage.value = message
|
||||
//处理mqtt数据 1转2除 2转1乘
|
||||
//如果消息返回值是二次值,下拉框是二次值只需要单位换算 除以1000
|
||||
//如果消息返回值是一次值,下拉框是一次值只需要单位换算 除以1000
|
||||
if (obj.dataLevel == formInline.dataLevel) {
|
||||
obj = {
|
||||
...obj,
|
||||
// 电压有效值
|
||||
vRmsA: obj.vRmsA,
|
||||
vRmsB: obj.vRmsB,
|
||||
vRmsC: obj.vRmsC,
|
||||
//基波电压幅值
|
||||
v1A: obj.v1A,
|
||||
v1B: obj.v1B,
|
||||
v1C: obj.v1C,
|
||||
//有功功率
|
||||
pA: obj.pA,
|
||||
pB: obj.pB,
|
||||
pC: obj.pC,
|
||||
pTot: obj.pTot,
|
||||
//无功功率
|
||||
qA: obj.qA,
|
||||
qB: obj.qB,
|
||||
qC: obj.qC,
|
||||
qTot: obj.qTot,
|
||||
//视在功率
|
||||
sA: obj.sA,
|
||||
sB: obj.sB,
|
||||
sC: obj.sC,
|
||||
sTot: obj.sTot
|
||||
}
|
||||
}
|
||||
//如果消息返回值是二次值,下拉框是一次值需要单位换算 除以1000 并且乘以pt ct
|
||||
if (obj.dataLevel == 'Secondary' && formInline.dataLevel == 'Primary') {
|
||||
obj = {
|
||||
...obj,
|
||||
// 电压有效值
|
||||
vRmsA: (obj.vRmsA * obj.pt) / 1000,
|
||||
vRmsB: (obj.vRmsB * obj.pt) / 1000,
|
||||
vRmsC: (obj.vRmsC * obj.pt) / 1000,
|
||||
// 电流有效值
|
||||
iRmsA: obj.iRmsA * obj.ct,
|
||||
iRmsB: obj.iRmsB * obj.ct,
|
||||
iRmsC: obj.iRmsC * obj.ct,
|
||||
//基波电压幅值
|
||||
v1A: (obj.v1A * obj.pt) / 1000,
|
||||
v1B: (obj.v1B * obj.pt) / 1000,
|
||||
v1C: (obj.v1C * obj.pt) / 1000,
|
||||
//基波电流幅值
|
||||
i1A: obj.i1A * obj.ct,
|
||||
i1B: obj.i1B * obj.ct,
|
||||
i1C: obj.i1C * obj.ct,
|
||||
//有功功率
|
||||
pA: (obj.pA * obj.pt * obj.ct) / 1000,
|
||||
pB: (obj.pB * obj.pt * obj.ct) / 1000,
|
||||
pC: (obj.pC * obj.pt * obj.ct) / 1000,
|
||||
pTot: (obj.pTot * obj.pt * obj.ct) / 1000,
|
||||
//无功功率
|
||||
qA: (obj.qA * obj.pt * obj.ct) / 1000,
|
||||
qB: (obj.qB * obj.pt * obj.ct) / 1000,
|
||||
qC: (obj.qC * obj.pt * obj.ct) / 1000,
|
||||
qTot: (obj.qTot * obj.pt * obj.ct) / 1000,
|
||||
//视在功率
|
||||
sA: (obj.sA * obj.pt * obj.ct) / 1000,
|
||||
sB: (obj.sB * obj.pt * obj.ct) / 1000,
|
||||
sC: (obj.sC * obj.pt * obj.ct) / 1000,
|
||||
sTot: (obj.sTot * obj.pt * obj.ct) / 1000
|
||||
}
|
||||
}
|
||||
//如果消息返回值是一次值,下拉框是二次值需要单位换算 乘以1000 并且除以pt ct
|
||||
if (obj.dataLevel == 'Primary' && formInline.dataLevel == 'Secondary') {
|
||||
obj = {
|
||||
...obj,
|
||||
// 电压有效值
|
||||
vRmsA: (obj.vRmsA / obj.pt) * 1000,
|
||||
vRmsB: (obj.vRmsB / obj.pt) * 1000,
|
||||
vRmsC: (obj.vRmsC / obj.pt) * 1000,
|
||||
// 电流有效值
|
||||
iRmsA: obj.iRmsA / obj.ct,
|
||||
iRmsB: obj.iRmsB / obj.ct,
|
||||
iRmsC: obj.iRmsC / obj.ct,
|
||||
//基波电压幅值
|
||||
v1A: (obj.v1A / obj.pt) * 1000,
|
||||
v1B: (obj.v1B / obj.pt) * 1000,
|
||||
v1C: (obj.v1C / obj.pt) * 1000,
|
||||
//基波电流幅值
|
||||
i1A: obj.i1A / obj.ct,
|
||||
i1B: obj.i1B / obj.ct,
|
||||
i1C: obj.i1C / obj.ct,
|
||||
//有功功率
|
||||
pA: (obj.pA / obj.pt / obj.ct) * 1000,
|
||||
pB: (obj.pB / obj.pt / obj.ct) * 1000,
|
||||
pC: (obj.pC / obj.pt / obj.ct) * 1000,
|
||||
pTot: (obj.pTot / obj.pt / obj.ct) * 1000,
|
||||
//无功功率
|
||||
qA: (obj.qA / obj.pt / obj.ct) * 1000,
|
||||
qB: (obj.qB / obj.pt / obj.ct) * 1000,
|
||||
qC: (obj.qC / obj.pt / obj.ct) * 1000,
|
||||
qTot: (obj.qTot / obj.pt / obj.ct) * 1000,
|
||||
//视在功率
|
||||
sA: (obj.sA / obj.pt / obj.ct) * 1000,
|
||||
sB: (obj.sB / obj.pt / obj.ct) * 1000,
|
||||
sC: (obj.sC / obj.pt / obj.ct) * 1000,
|
||||
sTot: (obj.sTot / obj.pt / obj.ct) * 1000
|
||||
}
|
||||
}
|
||||
//保留两位小数
|
||||
for (var i in obj) {
|
||||
if (typeof obj[i] == 'number' && obj[i] != 0 && Math.abs(obj[i]) % 1 != 0) {
|
||||
obj[i] = obj[i].toFixed(2)
|
||||
}
|
||||
}
|
||||
if (obj.hasOwnProperty('pA') && obj.hasOwnProperty('pB')) {
|
||||
mqttMessage.value = obj
|
||||
txtContent.value = JSON.stringify(obj)
|
||||
//如果消息返回值是二次值,下拉框是二次值只需要单位换算 除以1000
|
||||
//如果消息返回值是一次值,下拉框是一次值只需要单位换算 除以1000
|
||||
if (obj.dataLevel == formInline.dataLevel) {
|
||||
obj = {
|
||||
...obj,
|
||||
// 电压有效值
|
||||
vRmsA: obj.vRmsA,
|
||||
vRmsB: obj.vRmsB,
|
||||
vRmsC: obj.vRmsC,
|
||||
//基波电压幅值
|
||||
v1A: obj.v1A,
|
||||
v1B: obj.v1B,
|
||||
v1C: obj.v1C,
|
||||
//有功功率
|
||||
pA: obj.pA,
|
||||
pB: obj.pB,
|
||||
pC: obj.pC,
|
||||
pTot: obj.pTot,
|
||||
//无功功率
|
||||
qA: obj.qA,
|
||||
qB: obj.qB,
|
||||
qC: obj.qC,
|
||||
qTot: obj.qTot,
|
||||
//视在功率
|
||||
sA: obj.sA,
|
||||
sB: obj.sB,
|
||||
sC: obj.sC,
|
||||
sTot: obj.sTot
|
||||
}
|
||||
}
|
||||
//如果消息返回值是二次值,下拉框是一次值需要单位换算 除以1000 并且乘以pt ct
|
||||
if (obj.dataLevel == 'Secondary' && formInline.dataLevel == 'Primary') {
|
||||
obj = {
|
||||
...obj,
|
||||
// 电压有效值
|
||||
vRmsA: (obj.vRmsA * obj.pt) / 1000,
|
||||
vRmsB: (obj.vRmsB * obj.pt) / 1000,
|
||||
vRmsC: (obj.vRmsC * obj.pt) / 1000,
|
||||
// 电流有效值
|
||||
iRmsA: obj.iRmsA * obj.ct,
|
||||
iRmsB: obj.iRmsB * obj.ct,
|
||||
iRmsC: obj.iRmsC * obj.ct,
|
||||
//基波电压幅值
|
||||
v1A: (obj.v1A * obj.pt) / 1000,
|
||||
v1B: (obj.v1B * obj.pt) / 1000,
|
||||
v1C: (obj.v1C * obj.pt) / 1000,
|
||||
//基波电流幅值
|
||||
i1A: obj.i1A * obj.ct,
|
||||
i1B: obj.i1B * obj.ct,
|
||||
i1C: obj.i1C * obj.ct,
|
||||
//有功功率
|
||||
pA: (obj.pA * obj.pt * obj.ct) / 1000,
|
||||
pB: (obj.pB * obj.pt * obj.ct) / 1000,
|
||||
pC: (obj.pC * obj.pt * obj.ct) / 1000,
|
||||
pTot: (obj.pTot * obj.pt * obj.ct) / 1000,
|
||||
//无功功率
|
||||
qA: (obj.qA * obj.pt * obj.ct) / 1000,
|
||||
qB: (obj.qB * obj.pt * obj.ct) / 1000,
|
||||
qC: (obj.qC * obj.pt * obj.ct) / 1000,
|
||||
qTot: (obj.qTot * obj.pt * obj.ct) / 1000,
|
||||
//视在功率
|
||||
sA: (obj.sA * obj.pt * obj.ct) / 1000,
|
||||
sB: (obj.sB * obj.pt * obj.ct) / 1000,
|
||||
sC: (obj.sC * obj.pt * obj.ct) / 1000,
|
||||
sTot: (obj.sTot * obj.pt * obj.ct) / 1000
|
||||
}
|
||||
}
|
||||
//如果消息返回值是一次值,下拉框是二次值需要单位换算 乘以1000 并且除以pt ct
|
||||
if (obj.dataLevel == 'Primary' && formInline.dataLevel == 'Secondary') {
|
||||
obj = {
|
||||
...obj,
|
||||
// 电压有效值
|
||||
vRmsA: (obj.vRmsA / obj.pt) * 1000,
|
||||
vRmsB: (obj.vRmsB / obj.pt) * 1000,
|
||||
vRmsC: (obj.vRmsC / obj.pt) * 1000,
|
||||
// 电流有效值
|
||||
iRmsA: obj.iRmsA / obj.ct,
|
||||
iRmsB: obj.iRmsB / obj.ct,
|
||||
iRmsC: obj.iRmsC / obj.ct,
|
||||
//基波电压幅值
|
||||
v1A: (obj.v1A / obj.pt) * 1000,
|
||||
v1B: (obj.v1B / obj.pt) * 1000,
|
||||
v1C: (obj.v1C / obj.pt) * 1000,
|
||||
//基波电流幅值
|
||||
i1A: obj.i1A / obj.ct,
|
||||
i1B: obj.i1B / obj.ct,
|
||||
i1C: obj.i1C / obj.ct,
|
||||
//有功功率
|
||||
pA: (obj.pA / obj.pt / obj.ct) * 1000,
|
||||
pB: (obj.pB / obj.pt / obj.ct) * 1000,
|
||||
pC: (obj.pC / obj.pt / obj.ct) * 1000,
|
||||
pTot: (obj.pTot / obj.pt / obj.ct) * 1000,
|
||||
//无功功率
|
||||
qA: (obj.qA / obj.pt / obj.ct) * 1000,
|
||||
qB: (obj.qB / obj.pt / obj.ct) * 1000,
|
||||
qC: (obj.qC / obj.pt / obj.ct) * 1000,
|
||||
qTot: (obj.qTot / obj.pt / obj.ct) * 1000,
|
||||
//视在功率
|
||||
sA: (obj.sA / obj.pt / obj.ct) * 1000,
|
||||
sB: (obj.sB / obj.pt / obj.ct) * 1000,
|
||||
sC: (obj.sC / obj.pt / obj.ct) * 1000,
|
||||
sTot: (obj.sTot / obj.pt / obj.ct) * 1000
|
||||
}
|
||||
}
|
||||
//保留两位小数
|
||||
for (var i in obj) {
|
||||
if (typeof obj[i] == 'number' && obj[i] != 0 && Math.abs(obj[i]) % 1 != 0) {
|
||||
obj[i] = obj[i].toFixed(2)
|
||||
}
|
||||
}
|
||||
if (obj.hasOwnProperty('pA') && obj.hasOwnProperty('pB')) {
|
||||
mqttMessage.value = obj
|
||||
txtContent.value = JSON.stringify(obj)
|
||||
|
||||
//更新实时数据主页面值
|
||||
realTimeFlag.value &&
|
||||
realTimeRef.value &&
|
||||
realTimeRef.value.setRealData(mqttMessage.value, formInline.dataLevel)
|
||||
tableLoading.value = false
|
||||
//更新实时趋势折线图数据
|
||||
if (sonTab.value == 2) {
|
||||
!realTimeFlag.value &&
|
||||
sonTab.value == 2 &&
|
||||
harmonicSpectrumRef.value &&
|
||||
harmonicSpectrumRef.value.setHarmonicSpectrumData(mqttMessage.value)
|
||||
}
|
||||
}
|
||||
//更新实时数据主页面值
|
||||
realTimeFlag.value &&
|
||||
realTimeRef.value &&
|
||||
realTimeRef.value.setRealData(mqttMessage.value, formInline.dataLevel)
|
||||
tableLoading.value = false
|
||||
//更新实时趋势折线图数据
|
||||
if (sonTab.value == 2) {
|
||||
!realTimeFlag.value &&
|
||||
sonTab.value == 2 &&
|
||||
harmonicSpectrumRef.value &&
|
||||
harmonicSpectrumRef.value.setHarmonicSpectrumData(mqttMessage.value)
|
||||
}
|
||||
}
|
||||
|
||||
//更新谐波频谱数据
|
||||
// !realTimeFlag.value &&
|
||||
// sonTab.value == 1 &&
|
||||
// realTrendRef.value &&
|
||||
// realTrendRef.value.setRealTrendData(obj)
|
||||
//更新谐波频谱数据
|
||||
// !realTimeFlag.value &&
|
||||
// sonTab.value == 1 &&
|
||||
// realTrendRef.value &&
|
||||
// realTrendRef.value.setRealTrendData(obj)
|
||||
}
|
||||
|
||||
const handleClick = async (tab?: any) => {
|
||||
@@ -1499,7 +1301,7 @@ const refreshTheState = () => {
|
||||
moduleDataRef.value.getModule(deviceData.value.ndid)
|
||||
}
|
||||
//模版下载
|
||||
const handleDownLoadTemplate = () => {}
|
||||
const handleDownLoadTemplate = () => { }
|
||||
//补召日志
|
||||
const analysisListRef = ref()
|
||||
//打开补召日志
|
||||
@@ -1565,7 +1367,7 @@ const downloadTxt = () => {
|
||||
URL.revokeObjectURL(url)
|
||||
}
|
||||
|
||||
onMounted(() => {})
|
||||
onMounted(() => { })
|
||||
onBeforeUnmount(() => {
|
||||
clearInterval(realDataTimer.value)
|
||||
clearInterval(trendTimer.value)
|
||||
@@ -1689,14 +1491,14 @@ onBeforeUnmount(() => {
|
||||
|
||||
.data_time {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
// height: 40px;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
p {
|
||||
font-weight: 800;
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
font-size: 13px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user