diff --git a/nezha-fronted/src/components/chart/chart.vue b/nezha-fronted/src/components/chart/chart.vue
index a7115ccff..ef2254f24 100644
--- a/nezha-fronted/src/components/chart/chart.vue
+++ b/nezha-fronted/src/components/chart/chart.vue
@@ -19,6 +19,7 @@
:chart-info="chartInfo"
:chart-option="chartOption"
:is-fullscreen="isFullscreen"
+ @chartIsNoData="chartIsNoData"
>
diff --git a/nezha-fronted/src/components/chart/chart/chartBar.vue b/nezha-fronted/src/components/chart/chart/chartBar.vue
index 983536ff8..3c488775f 100644
--- a/nezha-fronted/src/components/chart/chart/chartBar.vue
+++ b/nezha-fronted/src/components/chart/chart/chartBar.vue
@@ -113,6 +113,7 @@ export default {
s.data = []
originalDatas.forEach((originalData, expressionIndex) => {
originalData.forEach((data, dataIndex) => {
+ this.isNoData = false
if (s) {
const value = getMetricTypeValue(data.values, chartInfo.param.statistics)
const showValue = chartDataFormat.getUnit(chartInfo.unit ? chartInfo.unit : 2).compute(value, null, -1, 2)
@@ -141,6 +142,7 @@ export default {
}
})
})
+ this.$emit('chartIsNoData', this.isNoData)
return s
},
formatterFunc (params, ticket, callback) {
diff --git a/nezha-fronted/src/components/chart/chart/chartGauge.vue b/nezha-fronted/src/components/chart/chart/chartGauge.vue
index 7d0384593..3b22c0d79 100644
--- a/nezha-fronted/src/components/chart/chart/chartGauge.vue
+++ b/nezha-fronted/src/components/chart/chart/chartGauge.vue
@@ -71,6 +71,7 @@ export default {
let colorIndex = 0
originalDatas.forEach((originalData, expressionIndex) => {
originalData.forEach((data, dataIndex) => {
+ this.isNoData = false
const gauge = {
value: '',
showValue: '',
@@ -96,6 +97,7 @@ export default {
colorIndex++
})
})
+ this.$emit('chartIsNoData', this.isNoData)
resolve()
})
},
diff --git a/nezha-fronted/src/components/chart/chart/chartPie.vue b/nezha-fronted/src/components/chart/chart/chartPie.vue
index f90fff55e..ad5b8b7d6 100644
--- a/nezha-fronted/src/components/chart/chart/chartPie.vue
+++ b/nezha-fronted/src/components/chart/chart/chartPie.vue
@@ -96,6 +96,7 @@ export default {
s.data = []
originalDatas.forEach((originalData, expressionIndex) => {
originalData.forEach((data, dataIndex) => {
+ this.isNoData = false
if (s) {
const value = getMetricTypeValue(data.values, chartInfo.param.statistics)
const showValue = chartDataFormat.getUnit(chartInfo.unit ? chartInfo.unit : 2).compute(value, null, -1, 2)
@@ -121,6 +122,7 @@ export default {
}
})
})
+ this.$emit('chartIsNoData', this.isNoData)
return s
},
formatterFunc: function (params, ticket, callback) {
diff --git a/nezha-fronted/src/components/chart/chart/chartStat.vue b/nezha-fronted/src/components/chart/chart/chartStat.vue
index 407aa3399..dcba6e8db 100644
--- a/nezha-fronted/src/components/chart/chart/chartStat.vue
+++ b/nezha-fronted/src/components/chart/chart/chartStat.vue
@@ -57,6 +57,7 @@ export default {
console.log(originalDatas)
originalDatas.forEach((originalData, expressionIndex) => {
originalData.forEach((data, dataIndex) => {
+ this.isNoData = false
const stat = {
value: '',
showValue: '',
@@ -77,6 +78,7 @@ export default {
colorIndex++
})
})
+ this.$emit('chartIsNoData', this.isNoData)
resolve()
})
},
diff --git a/nezha-fronted/src/components/chart/chart/chartTable.vue b/nezha-fronted/src/components/chart/chart/chartTable.vue
index 04d761ab9..b12384407 100644
--- a/nezha-fronted/src/components/chart/chart/chartTable.vue
+++ b/nezha-fronted/src/components/chart/chart/chartTable.vue
@@ -92,6 +92,7 @@ export default {
key = chartInfo.param.datasource[0].name
}
originalData.forEach((data, dataIndex) => {
+ this.isNoData = false
data.$labels = data.metric
const value = getMetricTypeValue(data.values, chartInfo.param.statistics || 'last')
const showValue = chartDataFormat.getUnit(chartInfo.unit ? chartInfo.unit : 2).compute(value, null, -1, 2)
@@ -126,6 +127,7 @@ export default {
colorIndex++
})
})
+ this.$emit('chartIsNoData', this.isNoData)
return returnData
},
selectTableMapping (row, valueMapping) {
diff --git a/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue b/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue
index 8083c4ae4..7772ad777 100644
--- a/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue
+++ b/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue
@@ -71,6 +71,7 @@ export default {
const { minTime, maxTime, minValue, maxValue } = this.getMinMaxFromData(this.chartData) // 此处时间是秒
chartOption.xAxis.axisLabel.formatter = this.xAxisLabelFormatter(minTime * 1000, maxTime * 1000) // 需转为毫秒
chartOption.tooltip.formatter = this.tooltipFormatter(this.chartInfo.param.stack)
+ chartOption.tooltip.position = this.tooltipPosition
chartOption.yAxis.axisLabel.formatter = this.yAxisLabelFormatter(minValue, maxValue)
if (chartOption.toolbox.feature) {
chartOption.toolbox.feature.myStack.iconStyle.borderColor = this.isStack ? this.toolboxIconColor.active : this.toolboxIconColor.inactive
diff --git a/nezha-fronted/src/components/chart/chart/chartTreemap.vue b/nezha-fronted/src/components/chart/chart/chartTreemap.vue
index b76a98d74..6e03cf23f 100644
--- a/nezha-fronted/src/components/chart/chart/chartTreemap.vue
+++ b/nezha-fronted/src/components/chart/chart/chartTreemap.vue
@@ -81,6 +81,7 @@ export default {
this.legends = []
chartOption.series[0] = this.initTreeMapData(this.chartInfo, chartOption.series[0], this.chartData) // 生成series和legends
chartOption.tooltip.formatter = this.formatterFunc
+ chartOption.tooltip.position = this.tooltipPosition
/* 使用setTimeout延迟渲染图表,避免样式错乱 */
setTimeout(() => {
const myChart = this.isInit ? echarts.init(document.getElementById(`chart-canvas-${this.chartId}`)) : getChart(this.chartId)
@@ -96,6 +97,7 @@ export default {
s.data = []
originalDatas.forEach((originalData, expressionIndex) => {
originalData.forEach((data, dataIndex) => {
+ this.isNoData = false
if (s) {
const value = getMetricTypeValue(data.values, chartInfo.param.statistics)
const showValue = chartDataFormat.getUnit(chartInfo.unit ? chartInfo.unit : 2).compute(value, null, -1, 2)
@@ -126,6 +128,7 @@ export default {
}
})
})
+ this.$emit('chartIsNoData', this.isNoData)
return s
},
formatterFunc (params, ticket, callback) {
diff --git a/nezha-fronted/src/components/chart/chart/options/chartBar.js b/nezha-fronted/src/components/chart/chart/options/chartBar.js
index b8dcf50d8..ef3835770 100644
--- a/nezha-fronted/src/components/chart/chart/options/chartBar.js
+++ b/nezha-fronted/src/components/chart/chart/options/chartBar.js
@@ -1,6 +1,7 @@
const chartBarOption = {
tooltip: {
- trigger: 'item'
+ trigger: 'item',
+ confine: false
},
legend: {
show: false
diff --git a/nezha-fronted/src/components/chart/chart/options/chartGauge.js b/nezha-fronted/src/components/chart/chart/options/chartGauge.js
index b3af69e73..7e6a604d7 100644
--- a/nezha-fronted/src/components/chart/chart/options/chartGauge.js
+++ b/nezha-fronted/src/components/chart/chart/options/chartGauge.js
@@ -8,6 +8,9 @@ const chartGaugeOption = {
show: true,
width: 30
},
+ tooltip: {
+ confine: false
+ },
pointer: {
show: false
},
diff --git a/nezha-fronted/src/components/chart/chart/options/chartPie.js b/nezha-fronted/src/components/chart/chart/options/chartPie.js
index fb68c2013..a2c806879 100644
--- a/nezha-fronted/src/components/chart/chart/options/chartPie.js
+++ b/nezha-fronted/src/components/chart/chart/options/chartPie.js
@@ -1,6 +1,7 @@
const chartPieOption = {
tooltip: {
- trigger: 'item'
+ trigger: 'item',
+ confine: false
},
legend: {
show: false
diff --git a/nezha-fronted/src/components/chart/chart/options/chartTreemap.js b/nezha-fronted/src/components/chart/chart/options/chartTreemap.js
index 20eeb4cc0..3472122af 100644
--- a/nezha-fronted/src/components/chart/chart/options/chartTreemap.js
+++ b/nezha-fronted/src/components/chart/chart/options/chartTreemap.js
@@ -2,6 +2,7 @@ import * as echarts from 'echarts'
const formatUtil = echarts.format
const chartTreemapOption = {
tooltip: {
+ confine: false,
formatter: function (info) {
const value = info.value
const treePathInfo = info.treePathInfo
diff --git a/nezha-fronted/src/components/chart/chartMixin.js b/nezha-fronted/src/components/chart/chartMixin.js
index 630a8c0e6..a04bc7091 100644
--- a/nezha-fronted/src/components/chart/chartMixin.js
+++ b/nezha-fronted/src/components/chart/chartMixin.js
@@ -1,6 +1,6 @@
import lodash from 'lodash'
import { getMetricTypeValue } from '@/components/common/js/tools'
-import { getChart, setChart } from '@/components/common/js/common'
+import { getChart, getMousePoint, setChart } from '@/components/common/js/common'
export default {
data () {
return {
@@ -13,7 +13,8 @@ export default {
inactive: '#7e7e7e'
},
chartId: '',
- isNoData: true
+ isNoData: true,
+ showAllData: false
}
},
props: {
@@ -40,6 +41,10 @@ export default {
console.log(this.chartData)
originalDatas.forEach((originalData, expressionIndex) => {
originalData.forEach((data, dataIndex) => {
+ if (colorIndex >= 20 && !this.showAllData) {
+ colorIndex++
+ return
+ }
this.isNoData = false
const s = lodash.cloneDeep(seriesTemplate)
if (s) {
@@ -167,6 +172,53 @@ export default {
}, 300)
}
},
+ tooltipPosition (point, params, dom, rect, size) {
+ dom.style.transform = 'translateZ(0)'
+ const windowWidth = window.innerWidth// 窗口宽度
+ const windowHeight = window.innerHeight// 窗口高度
+ const windowMouse = getMousePoint()
+ // 提示框位置
+ let x = 0
+ let y = 0
+ // 当前鼠标位置
+ const pointX = point[0]
+ const pointY = point[1]
+ // 外层div大小
+ const viewWidth = size.viewSize[0]
+ // const viewHeight = size.viewSize[1]
+ // 提示框大小
+ const boxWidth = size.contentSize[0]
+ const boxHeight = size.contentSize[1]
+ if (!this.isFullscreen) { // 本地显示
+ const chartDom = document.getElementById('chart-local-' + this.chartInfo.id)
+ console.log(point, params, dom, rect, size)
+ if (chartDom) {
+ if (windowMouse.x < (windowWidth / 2)) { // 说明鼠标在左边放不下提示框
+ x = pointX + 15
+ } else {
+ x = pointX - boxWidth - 15
+ }
+ if (windowMouse.y + 50 + boxHeight < windowHeight) { // 说明鼠标上面放不下提示框
+ y = pointY + 15
+ } else {
+ y = pointY - boxHeight - 10
+ }
+ return [x, y]
+ }
+ } else {
+ if (pointX < (viewWidth / 2)) { // 说明鼠标在左边放不下提示框
+ x = pointX + 10
+ } else {
+ x = pointX - boxWidth
+ }
+ if (windowMouse.y + 50 + boxHeight < windowHeight) { // 说明鼠标上面放不下提示框
+ y = pointY + 15
+ } else {
+ y = pointY - boxHeight - 10
+ }
+ return [x, y]
+ }
+ },
mouseLeaveChart () {
const myChart = getChart(this.chartId)
if (myChart) {
diff --git a/nezha-fronted/src/components/chart/panelChart.vue b/nezha-fronted/src/components/chart/panelChart.vue
index 63e0a1ebc..e374416a4 100644
--- a/nezha-fronted/src/components/chart/panelChart.vue
+++ b/nezha-fronted/src/components/chart/panelChart.vue
@@ -1,6 +1,6 @@
-