diff --git a/src/assets/css/components/index.scss b/src/assets/css/components/index.scss index baeb75c2..82fa535f 100644 --- a/src/assets/css/components/index.scss +++ b/src/assets/css/components/index.scss @@ -27,6 +27,9 @@ @import './views/charts/chartAppBasicInfo'; @import './views/charts/chartDomainDnsRecord'; @import './views/charts/chartDomainWhois'; +@import './views/charts/chartEchartWithTable'; @import './views/charts/ipBasicInfo'; +@import './views/charts/chartEchartIpHostedDomain'; +@import './views/charts/chartEchartAppRelateDomain'; //@import '../chart'; diff --git a/src/assets/css/components/views/charts/chartEchartAppRelateDomain.scss b/src/assets/css/components/views/charts/chartEchartAppRelateDomain.scss new file mode 100644 index 00000000..f1cc55aa --- /dev/null +++ b/src/assets/css/components/views/charts/chartEchartAppRelateDomain.scss @@ -0,0 +1,70 @@ +.cn-panel2 { + position: relative; + .chart-list { + .vue-grid-layout > .vue-grid-item { + .cn-chart { + .app-detail__related-domain { + display: flex; + flex-direction: row; + height: 100%; + width: 100%; + .related-domain__list { + display: flex; + flex-direction: column; + flex: 0 0 25%; + overflow: auto; + padding-bottom: 20px; + border-bottom: 1px solid $--right-box-border-color; + + .related-domain__list-title { + padding: 13px 30px 0; + height: 40px; + color: #6B717B; + } + + .related-domain__list-body { + display: flex; + flex-direction: column; + height: calc(100% - 40px); + overflow: hidden auto; + } + + .related-domain__list-row { + padding: 5px 30px; + color: #3976CB; + + i { + color: #B8C1D1; + } + } + } + + .related-domain__chart { + display: flex; + flex-direction: row; + flex: 1; + + & > div { + flex: 0 0 50%; + display: flex; + flex-direction: column; + + .related-domain__chart-title { + padding-left: 20px; + line-height: 50px; + flex: 0 0 50px; + } + + .chart-drawing { + flex: 1; + } + } + } + } + } + } + } +} +.cn-panel2 .chart-list > .vue-grid-layout > .vue-grid-item > .panel-chart .chart-header { + border-bottom: 1px solid $--right-box-border-color; +} \ No newline at end of file diff --git a/src/assets/css/components/views/charts/chartEchartIpHostedDomain.scss b/src/assets/css/components/views/charts/chartEchartIpHostedDomain.scss new file mode 100644 index 00000000..cb8de62e --- /dev/null +++ b/src/assets/css/components/views/charts/chartEchartIpHostedDomain.scss @@ -0,0 +1,67 @@ +.cn-panel2 { + position: relative; + .chart-list { + .vue-grid-layout > .vue-grid-item { + .cn-chart { + .ip-detail__hosted-domain { + display: flex; + flex-direction: column; + height: 100%; + width: 100%; + .hosted-domain__list { + display: flex; + flex-direction: column; + flex: 0 0 25%; + overflow: auto; + padding-bottom: 20px; + border-bottom: 1px solid $--right-box-border-color; + + .hosted-domain__list-title { + padding: 13px 30px 0; + height: 40px; + color: #6B717B; + } + + .hosted-domain__list-body { + display: flex; + flex-direction: column; + height: calc(100% - 40px); + overflow: hidden auto; + } + + .hosted-domain__list-row { + padding: 5px 30px; + color: #3976CB; + + i { + color: #B8C1D1; + } + } + } + + .hosted-domain__chart { + display: flex; + flex-direction: column; + flex: 1; + + & > div { + flex: 0 0 50%; + display: flex; + flex-direction: column; + + .hosted-domain__chart-title { + padding-left: 20px; + line-height: 50px; + flex: 0 0 50px; + } + + .chart-drawing { + flex: 1; + } + } + } + } + } + } + } +} diff --git a/src/assets/css/components/views/charts/chartEchartWithTable.scss b/src/assets/css/components/views/charts/chartEchartWithTable.scss new file mode 100644 index 00000000..88bcb1d1 --- /dev/null +++ b/src/assets/css/components/views/charts/chartEchartWithTable.scss @@ -0,0 +1,78 @@ +.cn-panel2 { + position: relative; + .chart-list { + .vue-grid-layout>.vue-grid-item { + .cn-chart { + height: 100% !important; + .cn-chart__echarts { + display: flex; + flex-direction: column; + height:100%; + .cn-chart__body { + flex: auto; + display: flex; + overflow: hidden auto; + + .el-table { + padding: 0 10px; + + &:before { + height: 0; + } + thead { + color: #333; + } + th.is-leaf, td { + border-bottom: none; + } + th { + padding-bottom: 5px; + } + td { + padding: 4px 0; + color: #333; + } + } + + .chart-drawing{ + height: calc(100% - 36px) !important; + } + } + .cn-chart__body.pie-with-table { + flex-basis: 40%; + } + .cn-chart__footer.pie-with-table { + flex-basis: 60%; + padding: 10px 30px 30px; + } + } + .pie-table { + font-size: 14px; + color: #333333; + font-weight: 500; + + .el-table__header-wrapper { + .cell { + color: #333; + } + } + .el-table__expanded-cell[class*=cell] { + padding: 0; + } + + .expand-table .el-table__body .el-table__row:last-of-type td { + border: none; + } + .expand-table { + font-weight: 400; + color: #606266; + + .el-table__body-wrapper { + height: auto !important; + } + } + } + } + } + } +} diff --git a/src/views/charts/Chart2.vue b/src/views/charts/Chart2.vue index 4b46e397..79acb4f1 100644 --- a/src/views/charts/Chart2.vue +++ b/src/views/charts/Chart2.vue @@ -153,6 +153,42 @@ @showLoading="showLoading" > + + + + + + + + @@ -168,6 +204,10 @@ import ChartGroup from '@/views/charts/charts/ChartGroup' import IpBasicInfo from '@/views/charts/charts/IpBasicInfo' import ChartEchartLine from '@/views/charts/charts/ChartEchartLine' import ChartEchartWithStatistics from '@/views/charts/charts/ChartEchartWithStatistics' +import ChartEchartPie from '@/views/charts/charts/ChartEchartPie' +import ChartEchartWithTable from '@/views/charts/charts/ChartEchartWithTable' +import ChartEchartIpHostedDomain from '@/views/charts/charts/ChartEchartIpHostedDomain' +import ChartEchartAppRelateDomain from '@/views/charts/charts/ChartEchartAppRelateDomain' import ChartActiveIpTable from '@/views/charts/charts/ChartActiveIpTable' import ChartTimeBar from './charts/ChartTimeBar' import ChartCategoryBar from './charts/ChartCategoryBar' @@ -189,6 +229,7 @@ import { isTitle, isMap, getOption, + isEchartsPie, isEchartsWithTable, isEchartsWithStatistics, isEchartsTimeBar, @@ -230,14 +271,18 @@ export default { ChartNoData, ChartTabs, ChartMap, - ChartEchartLine, ChartBlock, ChartTimeBar, ChartCategoryBar, ChartIpOpenPortBar, ChartRelationShip, ChartGroup, - ChartEchartWithStatistics + ChartEchartLine, + ChartEchartWithStatistics, + ChartEchartPie, + ChartEchartWithTable, + ChartEchartIpHostedDomain, + ChartEchartAppRelateDomain }, props: { chartInfo: Object, @@ -250,7 +295,8 @@ export default { panelLock: Boolean, entity: Object, isError: Boolean, - table: Object + table: Object, + orderPieTable: Object }, computed: { isNoData () { @@ -270,7 +316,11 @@ export default { }, showLoading (show) { this.$emit('showLoading', show) + }, + initEchartsWithTable () { + this.$refs['chart' + this.chartInfo.id] && this.$refs['chart' + this.chartInfo.id].initEchartsWithTable(`chart${this.chartInfo.id}`) } + }, watch: { chartData: { @@ -286,6 +336,7 @@ export default { isEchartsTimeBar: isEchartsTimeBar(props.chartInfo.type), isEchartsCategoryBar: isEchartsCategoryBar(props.chartInfo.type), isIpOpenPortBar: isIpOpenPortBar(props.chartInfo.type), + isEchartsPie: isEchartsPie(props.chartInfo.type), isEchartsWithTable: isEchartsWithTable(props.chartInfo.type), isEchartsWithStatistics: isEchartsWithStatistics(props.chartInfo.type), isSingleValue: isSingleValue(props.chartInfo.type), diff --git a/src/views/charts/ChartHeader.vue b/src/views/charts/ChartHeader.vue index dbc85163..b887a180 100644 --- a/src/views/charts/ChartHeader.vue +++ b/src/views/charts/ChartHeader.vue @@ -71,8 +71,26 @@ + + -
+
@@ -90,11 +108,11 @@ diff --git a/src/views/charts/charts/ChartEchartIpHostedDomain.vue b/src/views/charts/charts/ChartEchartIpHostedDomain.vue new file mode 100644 index 00000000..9519e4f2 --- /dev/null +++ b/src/views/charts/charts/ChartEchartIpHostedDomain.vue @@ -0,0 +1,116 @@ + + + diff --git a/src/views/charts/charts/ChartEchartPie.vue b/src/views/charts/charts/ChartEchartPie.vue new file mode 100644 index 00000000..e63d322f --- /dev/null +++ b/src/views/charts/charts/ChartEchartPie.vue @@ -0,0 +1,107 @@ + + + diff --git a/src/views/charts/charts/ChartEchartWithTable.vue b/src/views/charts/charts/ChartEchartWithTable.vue new file mode 100644 index 00000000..c90885df --- /dev/null +++ b/src/views/charts/charts/ChartEchartWithTable.vue @@ -0,0 +1,190 @@ + + + diff --git a/src/views/charts/charts/chart-options.js b/src/views/charts/charts/chart-options.js index b6394c24..688c6d21 100644 --- a/src/views/charts/charts/chart-options.js +++ b/src/views/charts/charts/chart-options.js @@ -664,6 +664,10 @@ export function isSingleValueWithEchartsTemp (type) { export function isEchartsWithTable (type) { return type === 31 } +/* 普通饼图 */ +export function isEchartsPie (type) { + return type === 32 +} /* table */ export function isTable (type) { return type >= 61 && type <= 70 diff --git a/src/views/charts/charts/tools.js b/src/views/charts/charts/tools.js index c70ea32e..05501e2d 100644 --- a/src/views/charts/charts/tools.js +++ b/src/views/charts/charts/tools.js @@ -69,6 +69,10 @@ export function isMapBlock (type) { export function isEchartsLine (type) { return type === 11 } +/* 普通饼图 */ +export function isEchartsPie (type) { + return type === 32 +} /* 带统计的折线图 */ export function isEchartsWithStatistics (type) { return type === 12