From 086c35d174067107fedc49e8ac7d5d12b7e0d8fa Mon Sep 17 00:00:00 2001 From: zhangyu Date: Thu, 20 Jan 2022 15:39:52 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9Atype=2022=20=EF=BC=8830%=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/assets/css/components/index.scss | 1 + .../views/charts/ChartIpOpenPortBar.scss | 24 +++++ .../css/components/views/charts/chart.scss | 4 +- src/assets/css/themes/theme-light.scss | 1 + src/views/charts/Chart2.vue | 17 +++- src/views/charts/PanelChart.vue | 3 +- src/views/charts/charts/ChartCategoryBar.vue | 11 ++- .../charts/charts/ChartIpOpenPortBar.vue | 91 +++++++++++++++++++ src/views/charts/charts/ChartTimeBar.vue | 8 +- src/views/charts/charts/options/bar.js | 2 +- src/views/charts/charts/testData.js | 29 +++++- src/views/charts/charts/tools.js | 60 ++++++++++++ 12 files changed, 241 insertions(+), 10 deletions(-) create mode 100644 src/assets/css/components/views/charts/ChartIpOpenPortBar.scss create mode 100644 src/views/charts/charts/ChartIpOpenPortBar.vue diff --git a/src/assets/css/components/index.scss b/src/assets/css/components/index.scss index 69f2c83d..348545dc 100644 --- a/src/assets/css/components/index.scss +++ b/src/assets/css/components/index.scss @@ -19,4 +19,5 @@ @import './views/entityExplorer/entityList/row'; @import 'views/entityExplorer/entityList/detail-overview'; @import './views/charts/panel'; +@import 'views/charts/ChartIpOpenPortBar'; //@import '../chart'; diff --git a/src/assets/css/components/views/charts/ChartIpOpenPortBar.scss b/src/assets/css/components/views/charts/ChartIpOpenPortBar.scss new file mode 100644 index 00000000..b4271780 --- /dev/null +++ b/src/assets/css/components/views/charts/ChartIpOpenPortBar.scss @@ -0,0 +1,24 @@ +.chart-ip-open-port-bar { + display: flex; + .el-table--border td{ + border: none !important; + } + .el-table--border th{ + border-right: none !important; + } + .chart-box{ + width: 30%; + height: 100%; + border: 1px solid #EBEEF5; + >.title{ + height: 36px; + line-height: 36px; + box-sizing: border-box; + padding: 0 10px; + color: #909399; + font-size: 12px; + font-weight: bold; + } + } + +} diff --git a/src/assets/css/components/views/charts/chart.scss b/src/assets/css/components/views/charts/chart.scss index 2debd81d..a3d40b6b 100644 --- a/src/assets/css/components/views/charts/chart.scss +++ b/src/assets/css/components/views/charts/chart.scss @@ -345,7 +345,9 @@ border-left: 5px solid #aeaeae; } } - +.nz-chart-tooltip{ + border-color: transparent !important; +} .nz-chart-tooltip .cn-chart-tooltip-box{ display: flex; .cn-chart-tooltip-content{ diff --git a/src/assets/css/themes/theme-light.scss b/src/assets/css/themes/theme-light.scss index f7af0885..c5b535c7 100644 --- a/src/assets/css/themes/theme-light.scss +++ b/src/assets/css/themes/theme-light.scss @@ -55,6 +55,7 @@ $--content-right-background-color: #EFF2F5; //右侧背景色 $--background-color-empty: #fffffe; $--background-color-1: #EFEFEF; // 普通字色(覆盖element-ui内置变量) +$--color-text: #333; $--color-text-regular: #666665; $--border-color-light: #E7EAED; $--chart-box-border-color: $--border-color-light; diff --git a/src/views/charts/Chart2.vue b/src/views/charts/Chart2.vue index 7aabd5a7..aa5c713d 100644 --- a/src/views/charts/Chart2.vue +++ b/src/views/charts/Chart2.vue @@ -69,6 +69,15 @@ @showLoading="showLoading" > + + { - console.log(testData) if (this.chartInfo.type === 23 && testData) { response = testData.data } else if (this.chartInfo.type === 24 && testData) { response = testData.data2 + } else if (this.chartInfo.type === 22 && testData) { + response = testData.data3 } if (response.code === 200) { this.chartData = response.data.result diff --git a/src/views/charts/charts/ChartCategoryBar.vue b/src/views/charts/charts/ChartCategoryBar.vue index d0cd2b81..44ec8936 100644 --- a/src/views/charts/charts/ChartCategoryBar.vue +++ b/src/views/charts/charts/ChartCategoryBar.vue @@ -11,7 +11,7 @@ import { legendMapping } from '@/components/charts/chart-table-title' import { categoryBar } from '@/views/charts/charts/options/bar' -import { getCharBartColor } from '@/views/charts/charts/tools' +import { getCharBartColor, categoryBarTooltipFormatter } from '@/views/charts/charts/tools' export default { name: 'ChartCategoryBar', @@ -33,6 +33,11 @@ export default { const dom = document.getElementById(id) !this.myChart && (this.myChart = echarts.init(dom)) this.chartOption = this.$_.cloneDeep(categoryBar) + this.chartOption.tooltip.trigger = 'item' + this.chartOption.tooltip.formatter = (params) => { + const str = categoryBarTooltipFormatter(params, chartParams.direction) + return str + } if (!chartParams.itemColorAlternately) { this.chartOption.series[0].itemStyle.color = function (params) { return getCharBartColor(0) @@ -50,9 +55,9 @@ export default { this.chartData.forEach((r, index) => { // chartParams.direction === 'vertical' ? r.values.map(v => [Number(v[0]) * 1000, Number(v[1]), chartParams.unitType]) : r.values.map(v => [Number(v[1]), Number(v[0]) * 1000, chartParams.unitType]) if (chartParams.direction === 'horizontal') { - obj.data.push([Number(r.events), r.clientCountry + ' ' + r.clientRegion, r]) + obj.data.push([Number(r.events), r.clientCountry + ' ' + r.clientRegion, chartParams.unitType]) } else { - obj.data.push([r.clientCountry + ' ' + r.clientRegion, Number(r.events), r]) + obj.data.push([r.clientCountry + ' ' + r.clientRegion, Number(r.events), chartParams.unitType]) } return obj }) diff --git a/src/views/charts/charts/ChartIpOpenPortBar.vue b/src/views/charts/charts/ChartIpOpenPortBar.vue new file mode 100644 index 00000000..5167ad21 --- /dev/null +++ b/src/views/charts/charts/ChartIpOpenPortBar.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/views/charts/charts/ChartTimeBar.vue b/src/views/charts/charts/ChartTimeBar.vue index d8bd4481..b766be13 100644 --- a/src/views/charts/charts/ChartTimeBar.vue +++ b/src/views/charts/charts/ChartTimeBar.vue @@ -11,7 +11,7 @@ import { legendMapping } from '@/components/charts/chart-table-title' import { timeBar } from '@/views/charts/charts/options/bar' -import { getCharBartColor } from '@/views/charts/charts/tools' +import { getCharBartColor, timeBarTooltipFormatter } from '@/views/charts/charts/tools' export default { name: 'ChaetTimeBar', @@ -33,6 +33,11 @@ export default { const dom = document.getElementById(id) !this.myChart && (this.myChart = echarts.init(dom)) this.chartOption = this.$_.cloneDeep(timeBar) + this.chartOption.tooltip.trigger = 'item' + this.chartOption.tooltip.formatter = (params) => { + const str = timeBarTooltipFormatter(params, chartParams.direction) + return str + } if (!chartParams.itemColorAlternately) { this.chartOption.series[0].itemStyle.color = function (params) { return getCharBartColor(0) @@ -107,6 +112,7 @@ export default { return allZero } } + }, watch: { chartData: { diff --git a/src/views/charts/charts/options/bar.js b/src/views/charts/charts/options/bar.js index 26a317b7..01b2d058 100644 --- a/src/views/charts/charts/options/bar.js +++ b/src/views/charts/charts/options/bar.js @@ -34,7 +34,7 @@ export const ipOpenPortBar = { export const categoryBar = { tooltip: { appendToBody: true, - trigger: 'axis', + trigger: 'item', textStyle: { width: '20px', overflow: 'truncate' diff --git a/src/views/charts/charts/testData.js b/src/views/charts/charts/testData.js index cadb5032..aad6fd70 100644 --- a/src/views/charts/charts/testData.js +++ b/src/views/charts/charts/testData.js @@ -59,8 +59,35 @@ const data2 = { clientRegion: 'ShangHai', clientId: 'CN', events: 13000 + }, { + serverCountry: 'America2', + serverRegion: 'Washington2', + serverId: 'US', + clientCountry: 'China', + clientRegion: 'ShangHai2', + clientId: 'CN', + events: 13000 } ] } } -export default { data, data2 } +const data3 = { + code: 200, + msg: '', + data: { + resultType: 'object', + result: [{ + port: '80', + protocol: 'HTTP', + banner: 'Http/1.1 200 OK\r\nDate:2021-9-17 13:53:03\r\nServer: Apache', + utime: '2021-9-17 13:53:37' + }, { + port: '443', + protocol: 'HTTPS', + banner: 'Http/1.1 200 OK\r\nDate:2021-9-17 13:53:03\r\nServer: Apache', + utime: '2021-9-17 13:53:37' + } + ] + } +} +export default { data, data2, data3 } diff --git a/src/views/charts/charts/tools.js b/src/views/charts/charts/tools.js index 24c15208..d2c8d357 100644 --- a/src/views/charts/charts/tools.js +++ b/src/views/charts/charts/tools.js @@ -46,6 +46,9 @@ export function isEchartsTimeBar (type) { export function isEchartsCategoryBar (type) { return type === 24 } +export function isIpOpenPortBar (type) { + return type === 22 +} /* 饼图柱状图等 */ export function isEcharts (type) { return type >= 11 && type <= 50 @@ -337,3 +340,60 @@ export function timeVerticalFormatter (params) { str += '' return str } +export function timeBarTooltipFormatter (params, type) { + console.log(params, type) + let index1, index0 + if (type === 'vertical') { + index0 = 0 + index1 = 1 + } else { + index0 = 1 + index1 = 0 + } + let str = '
' + const tData = params.data[index0] + str += '
' + str += window.$dayJs.tz(tData).format('YYYY-MM-DD HH:mm:ss') + str += '
' + + str += '
' + // str += params.marker + str += ` + values + ` + str += ` + ${unitConvert(params.data[index1], params.data[2]).join(' ')} + ` + str += '
' + + str += '
' + return str +} +export function categoryBarTooltipFormatter (params, type) { + console.log(params, type) + let index1, index0 + if (type === 'vertical') { + index0 = 0 + index1 = 1 + } else { + index0 = 1 + index1 = 0 + } + let str = '
' + str += '
' + str += params.data[index0] + str += '
' + + str += '
' + // str += params.marker + str += ` + values + ` + str += ` + ${unitConvert(params.data[index1], params.data[2]).join(' ')} + ` + str += '
' + + str += '
' + return str +}