diff --git a/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue b/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue index c307c4497..f27bdc96d 100644 --- a/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue +++ b/nezha-fronted/src/components/chart/chart/chartTimeSeries.vue @@ -88,6 +88,9 @@ export default { chartOption.yAxis.axisLabel.formatter = this.yAxisLabelFormatter(minValue, maxValue, copies, unit, dot) chartOption.yAxis.minInterval = chartDataFormat.Interval(maxValue, copies, unit.type, 'min') chartOption.yAxis.maxInterval = chartDataFormat.Interval(maxValue, copies, unit.type, 'max') * Math.ceil(chartOption.series.length / 5) + if (this.chartInfo.param.stack) { + chartOption.yAxis.maxInterval = chartOption.yAxis.maxInterval * (Math.ceil(chartOption.series.length / 5) + 1) + } if (unit.type === 'Time') { delete chartOption.yAxis.minInterval delete chartOption.yAxis.maxInterval @@ -159,7 +162,6 @@ export default { maxValue = Math.floor(oldValue) / Math.pow(10, dot) dot++ } - console.log(oldValue) const copies = chartDataFormat.copies(Number(oldValue), unit.type) return { minTime, maxTime, minValue, maxValue, copies, unit, dot } }, @@ -320,6 +322,11 @@ export default { self.isStack = !self.isStack // 改变tooltip option.tooltip[0].formatter = self.tooltipFormatter(self.isStack) + if (!self.chartInfo.param.stack) { + option.yAxis.maxInterval = option.yAxis.maxInterval / (Math.ceil(option.series.length / 5) + 1) + } else { + option.yAxis.maxInterval = option.yAxis.maxInterval * (Math.ceil(option.series.length / 5) + 1) + } myChart.setOption(option) } }, diff --git a/nezha-fronted/src/components/charts/chartDataFormat.js b/nezha-fronted/src/components/charts/chartDataFormat.js index f34e8179a..a00fd0d7b 100644 --- a/nezha-fronted/src/components/charts/chartDataFormat.js +++ b/nezha-fronted/src/components/charts/chartDataFormat.js @@ -397,6 +397,9 @@ function asciiCompute2 (num, ascii, units, dot = 2, unitIndex = 0) { * unit:设置的单位 * */ function timeCompute (value, unit, dot = 0) { + if (isNaN(value)) { + return `0 ${unit}` + } if (unit == 'year') { return `${value.toFixed(dot)} ${unit}` } diff --git a/nezha-fronted/src/components/common/js/tools.js b/nezha-fronted/src/components/common/js/tools.js index 8cf1614f7..0a15184cf 100644 --- a/nezha-fronted/src/components/common/js/tools.js +++ b/nezha-fronted/src/components/common/js/tools.js @@ -13,6 +13,7 @@ export const clickoutside = { let oldValue try { oldValue = JSON.parse(JSON.stringify(binding.value.obj)) + el.__oldValue__ = oldValue } catch (e) { } @@ -66,6 +67,61 @@ export const clickoutside = { el.__vueClickOutside__ = documentHandler document.addEventListener('mousedown', documentHandler) }, + update (el, binding, vnode) { + if (!binding.expression) return + const oldValue = el.__oldValue__ + const unsavedChange = localStorage.getItem('nz-unnsaved-change') + document.removeEventListener('mousedown', el.__vueClickOutside__) + function documentHandler (e) { + if (el.contains(e.target)) { + return false + } else { + let flag = true + const path = e.path || (e.composedPath && e.composedPath()) + // eslint-disable-next-line no-labels + top: for (let i = 0; i < path.length; i++) { + for (let j = 0; j < exceptClassName.length; j++) { + if (path[i].className && path[i].className.indexOf && path[i].className.indexOf(exceptClassName[j]) !== -1) { + flag = false + // eslint-disable-next-line no-labels + break top + } + } + } + if (!flag) { + return false + } + if (oldValue) { + const newValue = JSON.parse(JSON.stringify(binding.value.obj)) + if (unsavedChange == 'on' && !isEqual(oldValue, newValue)) { + MessageBox.confirm(i18n.t('tip.confirmCancel'), { + confirmButtonText: i18n.t('tip.yes'), + cancelButtonText: i18n.t('tip.no'), + type: 'warning' + }).then(() => { + if (binding.value.func) { + binding.value.func() + } + }) + } else { + binding.value.func() + } + } else { + if (binding.arg) { + binding.value(e, binding.arg) + } else { + if (binding.value) { + binding.value(e) + } + } + } + } + } + + // 给当前元素绑定个私有变量,方便在unbind中可以解除事件监听 + el.__vueClickOutside__ = documentHandler + document.addEventListener('mousedown', documentHandler) + }, unbind (el, binding) { // 解除事件监听 document.removeEventListener('mousedown', el.__vueClickOutside__) diff --git a/nezha-fronted/src/components/common/rightBox/chart/chartRightBox.vue b/nezha-fronted/src/components/common/rightBox/chart/chartRightBox.vue index ce8ef369c..fa725da8a 100644 --- a/nezha-fronted/src/components/common/rightBox/chart/chartRightBox.vue +++ b/nezha-fronted/src/components/common/rightBox/chart/chartRightBox.vue @@ -1,5 +1,5 @@