CN-1735 fix: 修复各折线图有时候首尾点错误地等于0的问题

This commit is contained in:
chenjinsong
2024-11-13 17:54:58 +08:00
parent 652f41a905
commit 5e18ec9021
6 changed files with 61 additions and 6 deletions

View File

@@ -22,7 +22,7 @@
"d3": "^7.9.0",
"dayjs": "^1.10.5",
"dexie": "~3.2.0",
"echarts": "^5.1.1",
"echarts": "^5.5.1",
"element-plus": "^2.8.5",
"force-graph": "^1.43.5",
"h3-js": "~3.7.2",

View File

@@ -377,9 +377,16 @@ export default {
echartsInit (data, item, type) {
const dom = document.getElementById(`chart${item.id}`)
if (dom && item) {
// if (!this.myChart) {
// 判断所有曲线的第一个值和最后一个值若均为0则删除该点
// 判断total曲线的第一个值和最后一个值若是0则删除
if (data.length > 1 && data[data.length - 1].ipCount === 0 && data[data.length - 1].domainCount === 0) {
data.splice(data.length - 1, 1)
}
if (data.length > 1 && data[0].ipCount === 0 && data[0].domainCount === 0) {
data.splice(0, 1)
}
this.myChart = echarts.init(dom)
// }
this.chartOption = tagLineChartOption
const series = []
if (item.indicatorType && item.indicatorType.indexOf('IP') > -1) {

View File

@@ -466,6 +466,19 @@ export default {
})
}
lineData.splice(0, 1)
const totalData = lineData[0]
// 判断total曲线的第一个值和最后一个值若是0则删除
if (totalData.values.length > 1 && Number(totalData.values[totalData.values.length - 1][1]) === 0) {
lineData.forEach(r => {
r.values.splice(r.values.length - 1, 1)
})
}
if (totalData.values[0].length > 1 && Number(totalData.values[0][1]) === 0) {
lineData.forEach(l => {
l.values.splice(0, 1)
})
}
const tabs = _.cloneDeep(this.tabs)
if (val === 'Queries/s') {
lineData.forEach((d, i) => {

View File

@@ -251,13 +251,13 @@ export default {
}
const _this = this
this.chartOption = stackedLineChartOption
const chartOption = this.chartOption.series[0]
const series = this.chartOption.series[0]
// 1、堆叠图从下往上堆叠图形数组倒序操作目的让堆叠图图形按数组一样从上往下展示
// 2、tooltip会跟着倒序操作数据展示相反tooltip处再将数组倒序回来
echartsData = echartsData.reverse()
this.chartOption.series = echartsData.map((t, i) => {
return {
...chartOption,
...series,
name: t.name,
type: 'line',
showSymbol: false,
@@ -521,8 +521,9 @@ export default {
}
})
}
// 删掉第一条无用数据
lineData.splice(0, 1)
// TODO 下面的逻辑是判断total曲线的尾部数据从尾往前数0值的个数若个数大于0所有曲线都从尾部去掉相同数量的点最多4个
// 判断total曲线的尾部数据从尾往前数0值的个数若个数大于0所有曲线都从尾部去掉相同数量的点最多4个
const totalData = lineData[0]
if (_.get(totalData, 'values', []).length > 4) {
let count = 0
@@ -539,6 +540,12 @@ export default {
})
}
}
// 判断total曲线的头部数据若第一个值是0则删除第一个值
if (totalData.values[0].length > 1 && totalData.values[0][1] === 0) {
lineData.forEach(l => {
l.values.splice(0, 1)
})
}
if (val === metricType.Sessions) {
const tabs = _.cloneDeep(this.tabsTemplate)

View File

@@ -147,8 +147,26 @@ export default {
this.chartOptionLineData[i].values = t.values
})
const result = this.chartOptionLineData.filter(t => this.chartData.params.color.indexOf(t.color) > -1)
// 判断曲线的第一个值和最后一个值若是0则删除
if (result[0] && result[0].values.length > 1 && result[0].values[result[0].values.length - 1][1] === 0) {
result.forEach(r => {
r.values.splice(r.values.length - 1, 1)
})
}
if (result[0] && result[0].values.length > 1 && result[0].values[0][1] === 0) {
result.forEach(r => {
r.values.splice(0, 1)
})
}
this.echartsInit(result, this.chartData, this.chartData.params.unitType)
} else {
// 判断曲线的第一个值和最后一个值若是0则删除
if (res.data.result[0] && res.data.result[0].values.length > 1 && res.data.result[0].values[res.data.result[0].values.length - 1][1] === 0) {
res.data.result[0].values.splice(res.data.result[0].values.length - 1, 1)
}
if (res.data.result[0] && res.data.result[0].values.length > 1 && res.data.result[0].values[0][1] === 0) {
res.data.result[0].values.splice(0, 1)
}
this.echartsInit(res.data.result, this.chartData, this.chartData.params.unitType)
}
}

View File

@@ -141,6 +141,7 @@ export default {
}
this.toggleLoading(true)
// 有q是下钻的
if (params.type && params.q) {
axios.get(api.npm.overview.trafficGraph, { params: params }).then(response => {
const res = response.data
@@ -421,7 +422,16 @@ export default {
}
})
}
// 删掉第一条无用数据
lineData.splice(0, 1)
// 判断曲线的第一个值和最后一个值若是0则删除
if (lineData[0] && lineData[0].values.length > 1 && lineData[0].values[lineData[0].values.length - 1][1] === 0) {
lineData[0].values.splice(lineData[0].values.length - 1, 1)
}
if (lineData[0] && lineData[0].values.length > 1 && lineData[0].values[0][1] === 0) {
lineData[0].values.splice(0, 1)
}
const tabs = _.cloneDeep(this.tabs)
const npmQuantity = _.cloneDeep(this.npmQuantity)
if (val === 'Sessions/s') {