diff --git a/nezha-fronted/src/components/chart/chart/chartTopology.vue b/nezha-fronted/src/components/chart/chart/chartTopology.vue index bef1a45d8..d4acf5a7a 100644 --- a/nezha-fronted/src/components/chart/chart/chartTopology.vue +++ b/nezha-fronted/src/components/chart/chart/chartTopology.vue @@ -1,15 +1,12 @@ @@ -18,9 +15,14 @@ import * as d3 from 'd3' import chartMixin from '@/components/chart/chartMixin' import chartFormat from '@/components/chart/chartFormat' import '@svgdotjs/svg.panzoom.js' +import alertLabelMixin from '@/components/common/mixin/alertLabelMixin' +import alertLabel from '@/components/common/alert/alertLabel' export default { name: 'chartHexagonD3', - mixins: [chartMixin, chartFormat], + components: { + alertLabel + }, + mixins: [chartMixin, chartFormat, alertLabelMixin], props: { parentId: { type: String, @@ -65,8 +67,8 @@ export default { dom.append(this.ForceGraph({ nodes: this.data.nodes, links: this.data.links }, { width: dom.offsetWidth, height: dom.offsetHeight, - nodeStrength: -500, - distanceNum: 200 + nodeStrength: -50, + distanceNum: 150 })) const svg = document.getElementById('svgHex' + this.chartId) svg.setAttribute('width', '100%') @@ -106,7 +108,7 @@ export default { const icon = { asset: 'data:image/png;base64,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', endpoint: 'data:image/png;base64,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', - dc: 'data:image/png;base64,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', + datacenter: 'data:image/png;base64,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', project: 'data:image/png;base64,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', module: 'data:image/png;base64,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' } @@ -138,6 +140,7 @@ export default { const simulation = d3.forceSimulation(nodes) .force('link', forceLink) .force('charge', forceNode) + .alpha(1) .on('tick', ticked) const svg = d3.create('svg') @@ -169,6 +172,8 @@ export default { .attr('id', function (d) { return 'node' + d.id }) .attr('style', 'cursor:pointer') .call(drag(simulation)) + .on('mouseenter', nodeMouseover)// no i18n + .on('mouseleave', nodeMouseout)// no i18n .on('click', showChildren) render() if (W) linkCopy.attr('stroke-width', ({ index: i }) => W[i]) @@ -224,14 +229,56 @@ export default { .on('end', dragended) } - function nodeMouseover (d) { - console.log(d, 'nodeMouseover') + function nodeMouseover (event, d) { + const paramsId = d.id.split('-')[1] + d.highlight = true + if (self.alertLabelId === paramsId) { + return + } + console.log(event, d, 'nodeMouseover') + self.alertLabelObj = { + position: { + x: event.x, + y: event.y + }, + loading: true, + id: '' + } + if (self.timer) { + clearTimeout(self.timer) + self.timer = null + } + self.timer = setTimeout(() => { + self.alertLabelId = paramsId + self.alertLabelObj.id = paramsId + self.alertLabelType = d.type + self.alertLabelShow = true + }, 200) } - function nodeMouseout (d) { - console.log(d, 'nodeMouseout') + function nodeMouseout (event, d) { + // console.log(d, 'nodeMouseout') + clearTimeout(self.timer) + self.timer = null + d.highlight = false + self.alertLabelShow = false + self.alertLabelId = '' + self.alertLabelObj = { + position: { + x: event.x, + y: event.y + }, + loading: false, + id: '' + } + self.alertLabelType = d.type } - function showChildren (event, d) { + function showChildren (event, d, a) { + console.log(event, d, a, 'showChildren') + console.log(event.path[0].className.baseVal) + if (event.path[0].className.baseVal !== 'topology-button') { + return + } if (d.hasChildren) { hideChildren(d) return @@ -241,56 +288,20 @@ export default { type: d.type, id: d.id } + params.id = params.id.split('-')[1] self.$get('/stat/rel', params).then(res => { - res = { - data: { - nodes: [ - { - id: 'asset-4', - type: 'asset', - category: 'asset', - name: 'ddd', - hasChildren: false, - alert: [{ - priority: 'P1', - num: 11 - }] - }, - { - id: 'asset-5', - type: 'asset', - category: 'asset', - name: 'ddd', - hasChildren: false, - alert: [{ - priority: 'P1', - num: 11 - }] - } - ], - links: [ - { - source: 'asset-2', - target: 'asset-4' - }, { - source: 'asset-2', - target: 'asset-5' - } - ] - } - } - const parentId = 'asset-2' || d.id + const parentId = d.id + res.data.nodes = res.data.nodes.filter(item => item.id !== parentId) // 处理连线 node 重复的问题 + res.data.nodes = res.data.nodes.filter(item => item.id !== d.parentId) + res.data.links = res.data.links.filter(item => item.source !== d.parentId) + res.data.links = res.data.links.filter(item => item.target !== d.parentId) res.data.nodes.forEach(item => { - if (item.id === parentId) { - item.hasChildren = true - } else { - item.hasChildren = false - } + item.hasChildren = false if (!item.parentId) { item.parentId = parentId } - item.radius = 20 // 需要计算 分三级 - item.color = '#fa9' // 需要计算 分三级 + item.radius = self.getRadius(item) // 需要计算 分三级 + item.color = self.getColor(item) // 需要计算 分三级 }) nodes.push(...res.data.nodes) simulation.stop() @@ -323,8 +334,9 @@ export default { }) } function hideChildren (d) { + console.log(d, 'hideChildren') + // 创建一个数组 隐藏所有相关联的 节点 连线 if (d.id) { - d.hasChildren = false simulation.stop() nodes = nodes.filter(child => child.parentId !== d.id) node = node @@ -347,6 +359,7 @@ export default { simulation.nodes(nodes) simulation.force('link').links(links) simulation.alphaTarget(1).restart().tick() + d.hasChildren = false } } function render () { @@ -396,17 +409,21 @@ export default { .attr('stroke-width', 1) .attr('rx', '4') .attr('ry', '4') + .attr('class', 'topology-button') const button = node.append('svg') .attr('width', '14px') .attr('height', '14px') .attr('x', function (d) { return nodeRadius * 1 + 2 }) .attr('y', function (d) { return d.radius * 1 + 9 }) .attr('style', 'cursor:pointer') - .attr('class', function (d) { return d.hasChildren ? 'toggle-nodes' : 'hide' }) + .attr('class', function (d) { return d.hasChildren ? 'toggle-nodes topology-button' : 'hide topology-button' }) .attr('viewBox', '0 0 512 512') button.append('polygon') .attr('points', '508.3,204.302 508.3,94.372 232.104,94.372 232.104,119.163 2.128,119.163 2.128,148.02 103.282,148.02 103.282,395.751 104.073,395.751 104.073,395.879 231.416,395.879 231.416,433.091 507.612,433.091 507.612,323.161 231.416,323.161 231.416,365.65 135.572,365.65 135.572,148.02 232.104,148.02 232.104,204.302 ') .attr('fill', function (d) { return d.hasChildren ? '#666666' : '#FA901C' }) + .attr('class', 'topology-button') + // .off('click', showChildren.bind(this, '2')) + // .on('click', showChildren.bind(this, '2')) node.attr('class', function (d) { let cl = 'node' if (d.hasChildren && (d.expanded == undefined || (d.expanded != undefined && d.expanded == false))) { @@ -421,25 +438,6 @@ export default { }, 1000) return Object.assign(svg.node(), { scales: { color } }) }, - update (nodes, links) { - const force = d3.forceSimulation() - force.nodes(nodes) - force.force('link').links(links)// - }, - hexagonOver (that, e) { // 移入六边形 - this.tooltip.title = that.alias - this.tooltip.value = that.showValue - this.tooltip.show = true - this.setPosition(e) - }, - hexagonMove (e) { // 六边形内移动 - if (this.tooltip.show) { - this.setPosition(e) - } - }, - hexagonOut (that) { - this.tooltip.show = false - }, setPosition (e) { const windowWidth = window.innerWidth// 窗口宽度 const windowHeight = window.innerHeight// 窗口高度 @@ -465,6 +463,35 @@ export default { showChildren () { this.upDate() }, + getRadius (item) { + let sum = 0 + item.alert && item.alert.forEach(alert => { + sum += alert.num + }) + if (sum === 0) { + return 15 + } else if (sum <= 10) { + return 25 + } else { + return 35 + } + }, + getColor (item) { + const arr = [] + let color = '' + item.alert && item.alert.forEach(alert => { + arr.push(alert.priority) + }) + this.severityDataWeight.forEach(severity => { + if (arr.indexOf(severity.name) !== -1 && !color && severity.num > 0) { + color = severity.color + } + }) + if (!arr.length || !color) { + color = '#23bf9a' + } + return color + }, upDate () { } diff --git a/nezha-fronted/src/components/chart/panelChart.vue b/nezha-fronted/src/components/chart/panelChart.vue index fb8117dce..aaf867304 100644 --- a/nezha-fronted/src/components/chart/panelChart.vue +++ b/nezha-fronted/src/components/chart/panelChart.vue @@ -365,102 +365,102 @@ export default { } this.$get('/stat/rel', params).then(res => { this.loading = false - console.log(res) - const parentId = 'asset-1' || this.chartInfo.id - res = { - msg: 'success', - code: 200, - data: { - nodes: [{ - id: 'asset-1', - type: 'asset', - category: 'asset', - name: 'dddeee', - hasChildren: false, - alert: [{ - priority: 'P2', - num: 7 - }, { - priority: 'P3', - num: 5 - }] - }, { - id: 'endpoint-1', - type: 'endpoint', - category: 'endpoint', - name: 'ddd', - hasChildren: true, - alert: [{ - priority: 'P3', - num: 1 - }] - }, - { - id: 'asset-2', - type: 'dc', - category: 'asset', - name: 'ddd', - hasChildren: false, - alert: [{ - priority: 'P1', - num: 10 - }] - }, { - id: 'endpoint-2', - type: 'project', - category: 'endpoint', - name: 'ddd', - hasChildren: true, - alert: [{ - priority: 'P1', - num: 30 - }] - }, - { - id: 'asset-3', - type: 'module', - category: 'asset', - name: 'ddd', - hasChildren: false, - alert: [{ - priority: 'P1', - num: 10 - }] - }, { - id: 'endpoint-3', - type: 'endpoint', - category: 'endpoint', - name: 'ddd', - hasChildren: true, - alert: [{ - priority: 'P3', - num: 10 - }] - } - ], - links: [{ - source: 'asset-1', - target: 'endpoint-1' - }, - { - source: 'asset-1', - target: 'endpoint-2' - }, - { - source: 'asset-1', - target: 'endpoint-3' - }, - { - source: 'asset-1', - target: 'asset-2' - }, - { - source: 'asset-1', - target: 'asset-3' - } - ] - } - } + console.log(this.chartInfo,this.chartInfo.id) + const parentId = this.chartInfo.linkType + '-' + this.chartInfo.id + // res = { + // msg: 'success', + // code: 200, + // data: { + // nodes: [{ + // id: 'asset-1', + // type: 'asset', + // category: 'asset', + // name: 'dddeee', + // hasChildren: false, + // alert: [{ + // priority: 'P2', + // num: 7 + // }, { + // priority: 'P3', + // num: 5 + // }] + // }, { + // id: 'endpoint-1', + // type: 'endpoint', + // category: 'endpoint', + // name: 'ddd', + // hasChildren: true, + // alert: [{ + // priority: 'P3', + // num: 1 + // }] + // }, + // { + // id: 'asset-2', + // type: 'dc', + // category: 'asset', + // name: 'ddd', + // hasChildren: false, + // alert: [{ + // priority: 'P1', + // num: 10 + // }] + // }, { + // id: 'endpoint-2', + // type: 'project', + // category: 'endpoint', + // name: 'ddd', + // hasChildren: true, + // alert: [{ + // priority: 'P1', + // num: 30 + // }] + // }, + // { + // id: 'asset-3', + // type: 'module', + // category: 'asset', + // name: 'ddd', + // hasChildren: false, + // alert: [{ + // priority: 'P1', + // num: 10 + // }] + // }, { + // id: 'endpoint-3', + // type: 'endpoint', + // category: 'endpoint', + // name: 'ddd', + // hasChildren: true, + // alert: [{ + // priority: 'P3', + // num: 10 + // }] + // } + // ], + // links: [{ + // source: 'asset-1', + // target: 'endpoint-1' + // }, + // { + // source: 'asset-1', + // target: 'endpoint-2' + // }, + // { + // source: 'asset-1', + // target: 'endpoint-3' + // }, + // { + // source: 'asset-1', + // target: 'asset-2' + // }, + // { + // source: 'asset-1', + // target: 'asset-3' + // } + // ] + // } + // } res.data.nodes.forEach(item => { item.parentId = parentId if (item.id === parentId) { @@ -607,7 +607,7 @@ export default { arr.push(alert.priority) }) this.severityDataWeight.forEach(severity => { - if (arr.indexOf(severity.name) !== -1 && !color) { + if (arr.indexOf(severity.name) !== -1 && !color && severity.num > 0) { color = severity.color } }) diff --git a/nezha-fronted/src/components/common/table/settings/dcTable.vue b/nezha-fronted/src/components/common/table/settings/dcTable.vue index 61f420f09..a534b628e 100644 --- a/nezha-fronted/src/components/common/table/settings/dcTable.vue +++ b/nezha-fronted/src/components/common/table/settings/dcTable.vue @@ -107,7 +107,7 @@ {{$t('overall.duplicate')}} {{$t('overall.delete')}} - {{$t('overall.topology')}} + {{$t('overall.topology')}}