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
nezha-nezha-fronted/nezha-fronted/src/components/chart/chart.vue

429 lines
13 KiB
Vue
Raw Normal View History

<template>
<!-- <div :style="showHeader&&chartInfo.param.showHeader ? '' : 'padding-top: 15px;'" class="nz-chart" :class="showHeader&&chartInfo.param.showHeader ? '' : 'no-header'" > -->
2022-05-24 10:42:59 +08:00
<div class="nz-chart" :class="chartInfo.param.showHeader===0 ? 'no-header' : ''">
<!-- <loading :loading="loading"></loading> -->
<chart-no-data v-if="isNoData || isError || chartChildrenData || (isExportHtml&&(isAutotopology(chartInfo.type) || isDiagram(chartInfo.type) || isMap(chartInfo.type)))"></chart-no-data>
<template v-else>
<chart-time-series
v-if="isTimeSeries(chartInfo.type)"
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-01 20:27:23 +08:00
:is-fullscreen="isFullscreen"
:minusTime="minusTime"
:multipleTime="multipleTime"
2021-12-23 10:44:30 +08:00
:showAllData="showAllData"
@chartIsNoData="chartIsNoData"
2023-02-22 18:32:54 +08:00
:from="from"
:globalVariables="globalVariables"
@loadMore="loadMore"
></chart-time-series>
<chart-doughnut
:ref="'chart' + chartInfo.id"
2023-04-24 10:18:20 +08:00
v-if="isChartPie(chartInfo.type)||isDoughnut(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-doughnut>
<chart-rose
:ref="'chart' + chartInfo.id"
v-if="isRose(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-rose>
2021-12-08 10:57:58 +08:00
<chart-bar
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
2021-12-08 10:57:58 +08:00
v-if="isChartBar(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
2021-12-08 10:57:58 +08:00
></chart-bar>
2021-12-28 16:50:18 +08:00
<chartHexagonD3
2021-11-30 17:15:29 +08:00
:ref="'chart'+chartInfo.id"
v-if="isHexagon(chartInfo.type)"
2021-11-30 17:15:29 +08:00
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-13 13:58:56 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
2021-12-28 16:50:18 +08:00
></chartHexagonD3>
<chart-url
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
v-if="isUrl(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-13 13:58:56 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-url>
<chart-text
2023-09-20 11:00:00 +08:00
:from="from"
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
v-if="isText(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-13 13:58:56 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-text>
<chart-treemap
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
v-if="isTreemap(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-13 13:58:56 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-treemap>
<chart-log
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
v-if="isLog(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-13 13:58:56 +08:00
:is-fullscreen="isFullscreen"
@refreshLogs="refreshLogs"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-log>
<chart-stat
2021-12-10 16:18:18 +08:00
:ref="'chart' + chartInfo.id"
v-if="isStat(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-13 13:58:56 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-stat>
2021-12-20 17:02:15 +08:00
<chart-gauge
:ref="'chart' + chartInfo.id"
v-if="isGauge(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
2021-12-20 17:02:15 +08:00
></chart-gauge>
2021-12-13 13:58:56 +08:00
<chart-diagram
:ref="'chart' + chartInfo.id"
v-if="isDiagram(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
2021-12-13 13:58:56 +08:00
:chart-option="chartOption"
:globalVariables="globalVariables"
2021-12-13 13:58:56 +08:00
></chart-diagram>
<chartAutotopology
2021-12-13 17:07:41 +08:00
:ref="'chart' + chartInfo.id"
v-if="isAutotopology(chartInfo.type)"
2021-12-13 17:07:41 +08:00
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
2021-12-14 18:56:50 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chartAutotopology>
2021-12-15 12:11:13 +08:00
<chartMap
2021-12-13 20:54:01 +08:00
:ref="'chart' + chartInfo.id"
2021-12-15 12:11:13 +08:00
v-if="isMap(chartInfo.type)"
2021-12-13 20:54:01 +08:00
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
2021-12-15 12:11:13 +08:00
></chartMap>
2021-12-15 12:12:57 +08:00
<chart-asset-info
:ref="'chart' + chartInfo.id"
v-if="isAssetInfo(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:from="from"
:globalVariables="globalVariables"
2021-12-15 12:12:57 +08:00
></chart-asset-info>
<chart-endpoint-info
:ref="'chart' + chartInfo.id"
v-if="isEndpointInfo(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:from="from"
:globalVariables="globalVariables"
2021-12-15 12:12:57 +08:00
></chart-endpoint-info>
2021-12-15 17:55:56 +08:00
<chart-table
:from="from"
2021-12-15 17:55:56 +08:00
:ref="'chart' + chartInfo.id"
v-if="isTable(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
2021-12-15 17:55:56 +08:00
></chart-table>
2021-12-13 17:07:41 +08:00
<chart-group
:ref="'chart' + chartInfo.id"
2021-12-16 19:15:32 +08:00
:from="from"
:filter="filter"
2021-12-13 17:07:41 +08:00
v-if="isGroup(chartInfo.type)"
:panelLock="panelLock"
:chart-data="chartData"
:chart-info="chartInfo"
:showTool="showTool"
2021-12-13 17:07:41 +08:00
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
2021-12-13 17:07:41 +08:00
:chart-option="chartOption"
:globalVariables="globalVariables"
2021-12-13 17:07:41 +08:00
></chart-group>
<chart-clock
:ref="'chart' + chartInfo.id"
v-if="isClock(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-clock>
2022-03-17 16:42:56 +08:00
<chart-topology
:ref="'chart' + chartInfo.id"
v-if="isTopology(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
2022-03-17 16:42:56 +08:00
></chart-topology>
<chart-bubble
:ref="'chart' + chartInfo.id"
v-if="isChartBubble(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-bubble>
<chart-rank
:ref="'chart' + chartInfo.id"
v-if="isChartRank(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-rank>
<chart-sankey
:ref="'chart' + chartInfo.id"
v-if="isSankey(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-sankey>
<chart-funnel
:ref="'chart' + chartInfo.id"
v-if="isFunnel(chartInfo.type)"
:chart-data="chartData"
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
@chartIsNoData="chartIsNoData"
:globalVariables="globalVariables"
></chart-funnel>
</template>
</div>
2021-11-19 09:40:21 +08:00
</template>
<script>
2021-12-02 21:46:07 +08:00
import loading from '@/components/common/loading'
import chartAssetInfo from './chart/chartAssetInfo'
import chartAutotopology from './chart/chartAutotopology'
import chartBar from './chart/chartBar'
import chartClock from './chart/chartClock'
import chartDiagram from './chart/chartDiagram'
import chartEndpointInfo from './chart/chartEndpointInfo'
import chartGauge from './chart/chartGauge'
import chartGroup from './chart/chartGroup'
import chartLog from './chart/chartLog'
import chartNoData from './chart/chartNoData'
import chartPie from './chart/chartPie'
import chartDoughnut from './chart/chartDoughnut'
import chartRose from './chart/chartRose'
import chartStat from './chart/chartStat'
import chartTable from './chart/chartTable'
import chartText from './chart/chartText'
2023-10-26 10:46:18 +08:00
// import chartTimeSeries from './chart/chartTimeSeries'
import chartTimeSeries from './chart/uplot/chartTimeSeries'
import chartTreemap from './chart/chartTreemap'
import chartUrl from './chart/chartUrl'
2021-12-28 16:50:18 +08:00
import chartHexagonD3 from './chart/chartHexagonD3'
2021-12-15 12:11:13 +08:00
import chartMap from './chart/chartMap'
2022-03-17 16:42:56 +08:00
import chartTopology from './chart/chartTopology'
import chartBubble from './chart/chartBubble'
import chartRank from './chart/chartRank'
import chartSankey from './chart/chartSankey'
2023-05-31 17:20:02 +08:00
import chartFunnel from './chart/chartFunnel'
import { getOption, isTimeSeries, isHexagon, isUrl, isText, isChartPie, isDoughnut, isRose, isChartBar, isTreemap, isLog, isStat, isDiagram, isGroup, isAutotopology, isMap, isAssetInfo, isEndpointInfo, isTable, isGauge, isClock, isTopology, isChartBubble, isChartRank, isSankey, isFunnel } from './chart/tools'
import lodash from 'lodash'
2021-11-19 09:40:21 +08:00
export default {
name: 'chart',
components: {
2021-12-02 21:46:07 +08:00
loading,
chartAssetInfo,
chartAutotopology,
chartBar,
chartClock,
chartDiagram,
chartEndpointInfo,
chartGauge,
chartGroup,
chartLog,
chartNoData,
chartPie,
chartDoughnut,
chartRose,
chartStat,
chartTable,
chartText,
chartTimeSeries,
chartTreemap,
chartUrl,
2021-12-28 16:50:18 +08:00
chartHexagonD3,
2022-03-17 16:42:56 +08:00
chartMap,
chartTopology,
chartBubble,
chartRank,
chartSankey,
chartFunnel
},
props: {
chartInfo: Object,
chartData: [Object, Array, String], // 数据查询后传入chart组件chart组件内不查询只根据接传递的数据来渲染
2021-12-01 20:27:23 +08:00
customChartOption: Object, // 需要自定义echarts的option时传入非必须传入该值时仍需传对应格式的chartData
2021-12-02 21:46:07 +08:00
isFullscreen: Boolean,
2021-12-13 17:07:41 +08:00
loading: Boolean,
2021-12-16 19:15:32 +08:00
panelLock: Boolean,
2021-12-17 09:47:50 +08:00
from: String,
isError: Boolean,
filter: {},
multipleTime: {},
2021-12-23 10:44:30 +08:00
minusTime: {},
showAllData: {
type: Boolean,
default: false
},
showHeader: {
type: Boolean,
default: true
},
isExportHtml: {
type: Boolean,
default: false
},
showTool: {
type: Boolean,
default: true
},
globalVariables: {}
},
data () {
return {
chartChildrenData: false
}
},
watch: {
chartData: {
deep: true,
handler (n) {
if (n) {
this.chartChildrenData = false
}
}
}
},
computed: {
isNoData () {
return lodash.isEmpty(this.chartData) && ['text', 'url', 'clock'].indexOf(this.chartInfo.type) === -1
},
chartOption () {
if (this.customChartOption) {
return lodash.cloneDeep(this.customChartOption)
} else {
return getOption(this.chartInfo.type)
}
}
},
methods: {
2021-11-30 16:39:21 +08:00
isTimeSeries,
isHexagon,
2021-12-07 17:43:21 +08:00
isChartPie,
isDoughnut,
isRose,
2021-12-08 10:57:58 +08:00
isChartBar,
isUrl,
isText,
isTreemap,
isLog,
isStat,
2021-12-13 13:58:56 +08:00
isDiagram,
2021-12-13 17:07:41 +08:00
isGroup,
isAutotopology,
2021-12-15 12:12:57 +08:00
isAssetInfo,
isEndpointInfo,
2021-12-15 12:11:13 +08:00
isMap,
2021-12-15 17:55:56 +08:00
isTable,
2021-12-20 17:02:15 +08:00
isGauge,
isClock,
2022-03-17 16:42:56 +08:00
isTopology,
isChartBubble,
isChartRank,
isSankey,
isFunnel,
chartIsNoData (flag) {
this.chartChildrenData = flag
},
2021-11-30 16:39:21 +08:00
resize () {
this.$refs['chart' + this.chartInfo.id] && this.$refs['chart' + this.chartInfo.id].resize()
},
refreshLogs (params) {
this.$emit('refreshLogs', params)
},
loadMore () {
this.$emit('loadMore')
2021-11-30 16:39:21 +08:00
}
},
mounted () {
}
2021-11-19 09:40:21 +08:00
}
</script>