This repository has been archived on 2025-09-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
cyber-narrator-cn-ui/src/views/charts/Panel.vue

171 lines
5.2 KiB
Vue
Raw Normal View History

2021-06-11 23:00:33 +08:00
<template>
2022-01-16 23:16:00 +08:00
<div style="padding: 10px 10px 20px 10px; overflow: auto" v-if="!isEntityDetail">
<div id="cn-panel" class="cn-panel2">
<div class="panel__time">
<date-time-range class="date-time-range" :start-time="timeFilter.startTime" :end-time="timeFilter.endTime" ref="dateTimeRange" @change="reload"/>
<time-refresh class="date-time-range" @change="timeRefreshChange" :end-time="timeFilter.endTime"/>
</div>
2022-01-16 23:16:00 +08:00
<panel-chart-list
2022-01-21 10:54:21 +08:00
ref="panelChartList"
2022-01-16 23:16:00 +08:00
:time-filter="timeFilter"
:data-list="chartList"
:panel-lock="panelLock"
2022-01-21 10:54:21 +08:00
:entity="entity"
2022-01-16 23:16:00 +08:00
>
</panel-chart-list>
</div>
</div>
<div class="cn-entity-detail" id="cn-entity-detail" v-else>
<div class="entity-detail__body">
<div class="cn-panel2" id="cn-panel">
<panel-chart-list
2022-01-21 10:54:21 +08:00
ref="panelChartList"
:time-filter="timeFilter"
:data-list="chartList"
:panel-lock="panelLock"
:entity="entity"
>
</panel-chart-list>
<!-- <template v-for="chart in chartList" :key="chart.id">
<chart
2022-01-03 22:46:22 +08:00
:chart="chart"
:ref="`chart-${chart.id}`"
:entity="entity"
@getCurrentTimeRange="getCurrentTimeRange"
></chart>
</template>-->
</div>
</div>
</div>
2021-06-11 23:00:33 +08:00
</template>
<script>
import { useRoute } from 'vue-router'
import { ref } from 'vue'
2021-06-11 23:00:33 +08:00
import { panelTypeAndRouteMapping } from '@/utils/constants'
import { api, getPanelList, getChartList } from '@/utils/api'
import { getNowTime } from '@/utils/date-util'
import { getGroupHeight, getTypeCategory } from '@/views/charts/charts/tools'
2021-06-11 23:00:33 +08:00
export default {
name: 'Panel',
2021-08-02 13:22:15 +08:00
props: {
entity: Object,
2022-01-03 22:46:22 +08:00
isEntityDetail: Boolean,
typeName: String
2021-08-02 13:22:15 +08:00
},
2021-06-11 23:00:33 +08:00
data () {
return {
chartList: [], // 普通panel的chart
2022-01-16 23:16:00 +08:00
panelLock: true,
// entity详情的chart
detailTabs: [],
detailChartList: [],
2021-12-14 17:21:37 +08:00
currentTab: '',
isCryptocurrency: false// 是否为挖矿列表
}
},
2021-06-11 23:00:33 +08:00
async mounted () {
2022-01-21 15:35:09 +08:00
this.emitter.on('groupParentCalcHeight', this.groupParentCalcHeight)
2021-12-14 17:21:37 +08:00
this.isCryptocurrency = this.$route.path.indexOf('cryptocurrency') > -1
2021-06-29 19:45:44 +08:00
await this.init()
if (!this.$_.isEmpty(this.detailTabs)) {
this.currentTab = this.detailTabs[0].id + ''
}
2021-06-11 23:00:33 +08:00
},
setup (props, ctx) {
// data
const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue })
const panel = ref({})
let panelType = 1 // 取得panel的type
2021-06-11 23:00:33 +08:00
const { params } = useRoute()
panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName]
2021-06-11 23:00:33 +08:00
return {
panelType,
panel,
timeFilter,
api
2021-06-11 23:00:33 +08:00
}
},
methods: {
async init () {
2021-06-29 19:45:44 +08:00
const panels = await getPanelList({ type: this.panelType })
if (panels && panels.length > 0) {
this.panel = panels[0]
}
if (this.panel.id) {
const allCharts = (await getChartList({ panelId: this.panel.id, pageSize: -1 })).map(chart => {
2021-06-29 19:45:44 +08:00
chart.i = chart.id
2021-08-02 13:22:15 +08:00
this.recursionParamsConvert(chart)
2021-06-29 19:45:44 +08:00
return chart
})
// allCharts = allCharts.filter(chart => chart.type === 24)
2022-01-03 22:46:22 +08:00
this.chartList = allCharts
setTimeout(() => {
this.$emit('chartLoaded', allCharts)
}, 1000)
2021-06-29 19:45:44 +08:00
}
},
changeTab ({ index }) {
this.currentTab = this.detailTabs[index].id + ''
this.detailChartList = this.detailTabs[index].children
},
2021-08-02 13:22:15 +08:00
recursionParamsConvert (chart) {
chart.params = chart.params ? JSON.parse(chart.params) : null
2022-01-21 15:35:09 +08:00
if (chart.type === 94) {
chart.oldH = chart.h
chart.params = {
collpase: false
}
chart.h = getGroupHeight(chart.children) + 1.5
2022-01-21 15:35:09 +08:00
if (chart.params.collpase) {
chart.h = 1
}
}
2022-01-21 16:07:23 +08:00
if (chart.type === 95) {
let sumGroup = 0
chart.children.forEach(item => {
if (item.type === 94) {
sumGroup++
}
})
chart.h += sumGroup * 0.5
2022-01-21 16:07:23 +08:00
}
2021-08-02 13:22:15 +08:00
if (!this.$_.isEmpty(chart.children)) {
chart.children.forEach(c => {
this.recursionParamsConvert(c)
})
}
},
getCurrentTimeRange (callback) {
const myEndTime = window.$dayJs.tz().valueOf()
const myStartTime = myEndTime - this.timeFilter.dateRangeValue * 60 * 1000
callback({ startTime: myStartTime, endTime: myEndTime })
},
timeRefreshChange () {
if (!this.$refs.dateTimeRange.isCustom) {
const value = this.timeFilter.dateRangeValue
this.$refs.dateTimeRange.quickChange(value)
}
},
reload (s, e, v) {
this.dateTimeRangeChange(s, e, v)
},
// methods
dateTimeRangeChange (s, e, v) {
this.timeFilter = { startTime: s, endTime: e, dateRangeValue: v }
},
reloadCharts () {
this.chartList.forEach(chart => {
this.$refs[`chart-${chart.id}`] && this.$refs[`chart-${chart.id}`].reloadChart()
})
2022-01-21 10:54:21 +08:00
},
2022-01-21 15:35:09 +08:00
groupParentCalcHeight (params) {
this.$refs.panelChartList.groupParentCalcHeight(params.chart, params.childrenList)
}
2021-06-11 23:00:33 +08:00
}
}
</script>