实时趋势修改
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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,36 +98,48 @@
|
|||||||
realTimeFlag
|
realTimeFlag
|
||||||
"
|
"
|
||||||
>
|
>
|
||||||
<el-form-item label="日期" v-show="dataSet.indexOf('_history') != -1">
|
<template #select>
|
||||||
<DatePicker ref="datePickerRef"></DatePicker>
|
<el-form-item label="日期" v-show="dataSet.indexOf('_history') != -1">
|
||||||
</el-form-item>
|
<DatePicker ref="datePickerRef"></DatePicker>
|
||||||
<el-form-item label="指标" v-show="!realTimeFlag">
|
</el-form-item>
|
||||||
<el-input
|
<el-form-item label="指标" v-show="!realTimeFlag">
|
||||||
style="width: 160px"
|
<el-input
|
||||||
v-model="formInline.searchValue"
|
style="width: 160px"
|
||||||
autocomplete="off"
|
v-model="formInline.searchValue"
|
||||||
clearable
|
autocomplete="off"
|
||||||
placeholder="请输入关键词"
|
clearable
|
||||||
></el-input>
|
placeholder="请输入关键词"
|
||||||
</el-form-item>
|
></el-input>
|
||||||
<el-form-item label="值类型">
|
</el-form-item>
|
||||||
<el-select
|
<el-form-item v-if="mqttMessage.dataTime" label="数据时间">
|
||||||
style="width: 160px !important"
|
{{ mqttMessage.dataTime }}
|
||||||
v-model="formInline.dataLevel"
|
</el-form-item>
|
||||||
:disabled="dataLevel == 'Primary' && deviceType == '0'"
|
<el-form-item label="值类型">
|
||||||
|
<el-select
|
||||||
|
style="width: 160px !important"
|
||||||
|
v-model="formInline.dataLevel"
|
||||||
|
:disabled="dataLevel == 'Primary' && deviceType == '0'"
|
||||||
|
>
|
||||||
|
<el-option value="Primary" label="一次值"></el-option>
|
||||||
|
<el-option value="Secondary" label="二次值"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</template>
|
||||||
|
<template #operation>
|
||||||
|
<el-button type="primary" icon="el-icon-Search" @click="handleClick">查询</el-button>
|
||||||
|
<el-button type="primary" v-if="realTimeFlag" :icon="DataLine" @click="handleTrend">
|
||||||
|
谐波频谱
|
||||||
|
</el-button>
|
||||||
|
<el-button
|
||||||
|
type="primary"
|
||||||
|
v-if="realTimeFlag"
|
||||||
|
:icon="TrendCharts"
|
||||||
|
@click="handleHarmonicSpectrum"
|
||||||
>
|
>
|
||||||
<el-option value="Primary" label="一次值"></el-option>
|
实时趋势
|
||||||
<el-option value="Secondary" label="二次值"></el-option>
|
</el-button>
|
||||||
</el-select>
|
</template>
|
||||||
</el-form-item>
|
</TableHeader>
|
||||||
<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>
|
|
||||||
<el-button type="primary" v-if="realTimeFlag" :icon="TrendCharts" @click="handleTrend">
|
|
||||||
实时趋势
|
|
||||||
</el-button>
|
|
||||||
</el-form>
|
|
||||||
<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,166 +568,167 @@ 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('装置应答成功')
|
||||||
|
//2.建立mqtt通讯
|
||||||
|
//每隔30s调用一下接口,通知后台推送mqtt消息
|
||||||
|
realDataTimer.value = setInterval(() => {
|
||||||
|
getBasicRealData(lineId.value).then((res: any) => {
|
||||||
|
console.log(res, '获取基础实时数据')
|
||||||
|
})
|
||||||
|
}, 30000)
|
||||||
|
connectMqtt()
|
||||||
|
mqttRef.value.on('connect', (e: any) => {
|
||||||
|
// ElMessage.success('连接mqtt服务器成功!')
|
||||||
|
console.log('mqtt客户端已连接....')
|
||||||
|
// mqttRef.value.subscribe('/Web/Progress')
|
||||||
|
mqttRef.value.subscribe('/Web/RealData/+')
|
||||||
|
//假数据
|
||||||
|
})
|
||||||
|
|
||||||
|
mqttRef.value.on('message', (topic: any, message: any) => {
|
||||||
|
mqttMessage.value = {}
|
||||||
|
// console.log('mqtt接收到消息', message,topic)
|
||||||
|
console.log('mqtt接收到消息', JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))))
|
||||||
|
let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
|
||||||
|
//处理mqtt数据 1转2除 2转1乘
|
||||||
|
//如果消息返回值是二次值,下拉框是二次值只需要单位换算 除以1000
|
||||||
|
//如果消息返回值是一次值,下拉框是一次值只需要单位换算 除以1000
|
||||||
|
if (obj.dataLevel == formInline.dataLevel) {
|
||||||
|
obj = {
|
||||||
|
...obj,
|
||||||
|
// 电压有效值
|
||||||
|
vRmsA: obj.vRmsA / 1000,
|
||||||
|
vRmsB: obj.vRmsB / 1000,
|
||||||
|
vRmsC: obj.vRmsC / 1000,
|
||||||
|
//基波电压幅值
|
||||||
|
v1A: obj.v1A / 1000,
|
||||||
|
v1B: obj.v1B / 1000,
|
||||||
|
v1C: obj.v1C / 1000,
|
||||||
|
//有功功率
|
||||||
|
pA: obj.pA / 1000,
|
||||||
|
pB: obj.pB / 1000,
|
||||||
|
pC: obj.pC / 1000,
|
||||||
|
pTot: obj.pTot / 1000,
|
||||||
|
//无功功率
|
||||||
|
qA: obj.qA / 1000,
|
||||||
|
qB: obj.qB / 1000,
|
||||||
|
qC: obj.qC / 1000,
|
||||||
|
qTot: obj.qTot / 1000,
|
||||||
|
//视在功率
|
||||||
|
sA: obj.sA / 1000,
|
||||||
|
sB: obj.sB / 1000,
|
||||||
|
sC: obj.sC / 1000,
|
||||||
|
sTot: obj.sTot / 1000
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//如果消息返回值是二次值,下拉框是一次值需要单位换算 除以1000 并且乘以pt ct
|
||||||
|
if (obj.dataLevel == 'Secondary' && formInline.dataLevel == 'Primary') {
|
||||||
|
obj = {
|
||||||
|
...obj,
|
||||||
|
// 电压有效值
|
||||||
|
vRmsA: (obj.vRmsA * obj.pt) / 1000,
|
||||||
|
vRmsB: (obj.vRmsA * obj.pt) / 1000,
|
||||||
|
vRmsC: (obj.vRmsA * obj.pt) / 1000,
|
||||||
|
// 电流有效值
|
||||||
|
iRmsA: obj.iRmsA * obj.ct,
|
||||||
|
iRmsB: obj.iRmsA * obj.ct,
|
||||||
|
iRmsC: obj.iRmsA * 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.vRmsA / obj.pt) * 1000,
|
||||||
|
vRmsC: (obj.vRmsA / obj.pt) * 1000,
|
||||||
|
// 电流有效值
|
||||||
|
iRmsA: obj.iRmsA / obj.ct,
|
||||||
|
iRmsB: obj.iRmsA / obj.ct,
|
||||||
|
iRmsC: obj.iRmsA / 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mqttMessage.value = obj
|
||||||
|
//更新实时数据值
|
||||||
|
realTimeFlag.value && realTimeRef.value && realTimeRef.value.setRealData(mqttMessage.value)
|
||||||
|
//更新谐波频谱数据
|
||||||
|
!realTimeFlag.value &&
|
||||||
|
sonTab.value == 2 &&
|
||||||
|
harmonicSpectrumRef.value &&
|
||||||
|
harmonicSpectrumRef.value.setHarmonicSpectrumData(mqttMessage.value)
|
||||||
|
})
|
||||||
|
|
||||||
|
mqttRef.value.on('error', (error: any) => {
|
||||||
|
console.log('mqtt连接失败...', error)
|
||||||
|
mqttRef.value.end()
|
||||||
|
})
|
||||||
|
|
||||||
|
mqttRef.value.on('close', function () {
|
||||||
|
console.log('mqtt客户端已断开连接.....')
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
ElMessage.success('装置应答失败')
|
ElMessage.success('装置应答失败')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
//2.建立mqtt通讯
|
|
||||||
//每隔30s调用一下接口,通知后台推送mqtt消息
|
|
||||||
realDataTimer.value = await setInterval(() => {
|
|
||||||
getBasicRealData(lineId.value).then((res: any) => {
|
|
||||||
console.log(res, '获取基础实时数据')
|
|
||||||
})
|
|
||||||
}, 30000)
|
|
||||||
connectMqtt()
|
|
||||||
mqttRef.value.on('connect', (e: any) => {
|
|
||||||
// ElMessage.success('连接mqtt服务器成功!')
|
|
||||||
console.log('mqtt客户端已连接....')
|
|
||||||
// mqttRef.value.subscribe('/Web/Progress')
|
|
||||||
mqttRef.value.subscribe('/Web/RealData/+')
|
|
||||||
//假数据
|
|
||||||
})
|
|
||||||
|
|
||||||
mqttRef.value.on('message', (topic: any, message: any) => {
|
|
||||||
mqttMessage.value = {}
|
|
||||||
// console.log('mqtt接收到消息', message,topic)
|
|
||||||
console.log('mqtt接收到消息', JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message)))))
|
|
||||||
let obj = JSON.parse(JSON.stringify(JSON.parse(new TextDecoder().decode(message))))
|
|
||||||
//处理mqtt数据 1转2除 2转1乘
|
|
||||||
//如果消息返回值是二次值,下拉框是二次值只需要单位换算 除以1000
|
|
||||||
//如果消息返回值是一次值,下拉框是一次值只需要单位换算 除以1000
|
|
||||||
if (obj.dataLevel == formInline.dataLevel) {
|
|
||||||
obj = {
|
|
||||||
...obj,
|
|
||||||
// 电压有效值
|
|
||||||
vRmsA: obj.vRmsA / 1000,
|
|
||||||
vRmsB: obj.vRmsB / 1000,
|
|
||||||
vRmsC: obj.vRmsC / 1000,
|
|
||||||
//基波电压幅值
|
|
||||||
v1A: obj.v1A / 1000,
|
|
||||||
v1B: obj.v1B / 1000,
|
|
||||||
v1C: obj.v1C / 1000,
|
|
||||||
//有功功率
|
|
||||||
pA: obj.pA / 1000,
|
|
||||||
pB: obj.pB / 1000,
|
|
||||||
pC: obj.pC / 1000,
|
|
||||||
pTot: obj.pTot / 1000,
|
|
||||||
//无功功率
|
|
||||||
qA: obj.qA / 1000,
|
|
||||||
qB: obj.qB / 1000,
|
|
||||||
qC: obj.qC / 1000,
|
|
||||||
qTot: obj.qTot / 1000,
|
|
||||||
//视在功率
|
|
||||||
sA: obj.sA / 1000,
|
|
||||||
sB: obj.sB / 1000,
|
|
||||||
sC: obj.sC / 1000,
|
|
||||||
sTot: obj.sTot / 1000
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//如果消息返回值是二次值,下拉框是一次值需要单位换算 除以1000 并且乘以pt ct
|
|
||||||
if (obj.dataLevel == 'Secondary' && formInline.dataLevel == 'Primary') {
|
|
||||||
obj = {
|
|
||||||
...obj,
|
|
||||||
// 电压有效值
|
|
||||||
vRmsA: (obj.vRmsA * obj.pt) / 1000,
|
|
||||||
vRmsB: (obj.vRmsA * obj.pt) / 1000,
|
|
||||||
vRmsC: (obj.vRmsA * obj.pt) / 1000,
|
|
||||||
// 电流有效值
|
|
||||||
iRmsA: obj.iRmsA * obj.ct,
|
|
||||||
iRmsB: obj.iRmsA * obj.ct,
|
|
||||||
iRmsC: obj.iRmsA * 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') {
|
|
||||||
console.log(6666)
|
|
||||||
obj = {
|
|
||||||
...obj,
|
|
||||||
// 电压有效值
|
|
||||||
vRmsA: (obj.vRmsA / obj.pt) * 1000,
|
|
||||||
vRmsB: (obj.vRmsA / obj.pt) * 1000,
|
|
||||||
vRmsC: (obj.vRmsA / obj.pt) * 1000,
|
|
||||||
// 电流有效值
|
|
||||||
iRmsA: obj.iRmsA / obj.ct,
|
|
||||||
iRmsB: obj.iRmsA / obj.ct,
|
|
||||||
iRmsC: obj.iRmsA / 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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mqttMessage.value = obj
|
|
||||||
//更新实时数据值
|
|
||||||
realTimeFlag.value && realTimeRef.value && realTimeRef.value.setRealData(mqttMessage.value)
|
|
||||||
//更新谐波频谱数据
|
|
||||||
!realTimeFlag.value &&
|
|
||||||
sonTab.value == 2 &&
|
|
||||||
harmonicSpectrumRef.value &&
|
|
||||||
harmonicSpectrumRef.value.setHarmonicSpectrumData(mqttMessage.value)
|
|
||||||
})
|
|
||||||
|
|
||||||
mqttRef.value.on('error', (error: any) => {
|
|
||||||
console.log('mqtt连接失败...', error)
|
|
||||||
mqttRef.value.end()
|
|
||||||
})
|
|
||||||
|
|
||||||
mqttRef.value.on('close', function () {
|
|
||||||
console.log('mqtt客户端已断开连接.....')
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
//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()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user