diff --git a/nezha-fronted/src/assets/css/components/common/project/meta2dMain.scss b/nezha-fronted/src/assets/css/components/common/project/meta2dMain.scss index 874b23456..eccf023b5 100644 --- a/nezha-fronted/src/assets/css/components/common/project/meta2dMain.scss +++ b/nezha-fronted/src/assets/css/components/common/project/meta2dMain.scss @@ -18,3 +18,7 @@ border: 1px solid; border-color: $--border-color-light; } +.meta2d-map { + right: unset; + left: 0px; +} diff --git a/nezha-fronted/src/assets/css/components/common/project/meta2dProps.scss b/nezha-fronted/src/assets/css/components/common/project/meta2dProps.scss index a0ca1ea7b..03a5ec9de 100644 --- a/nezha-fronted/src/assets/css/components/common/project/meta2dProps.scss +++ b/nezha-fronted/src/assets/css/components/common/project/meta2dProps.scss @@ -38,6 +38,12 @@ .form-row-item-full{ width: 100%; } + .form-row-value { + .el-select--small{ + width: 100%; + } + + } .form-row-item:nth-of-type(even) { /*margin-left: 10px;*/ } @@ -59,4 +65,20 @@ .right-box__container .el-form{ padding-top: 0; } + .pen-tools{ + background: $--background-color-1; + margin-bottom: 10px; + border-radius: 2px; + display: flex; + justify-content: space-between; + padding: 3px 10px + } + .promqlInput .el-cascader-menu{ + width: 200px; + } + .element-item .el-row { + .el-cascader--small,.el-select--small { + width: 100%; + } + } } diff --git a/nezha-fronted/src/components/common/mixin/beforeMeta2d.js b/nezha-fronted/src/components/common/mixin/beforeMeta2d.js index ca8fef289..34764fefd 100644 --- a/nezha-fronted/src/components/common/mixin/beforeMeta2d.js +++ b/nezha-fronted/src/components/common/mixin/beforeMeta2d.js @@ -4,7 +4,7 @@ export default { topoData: {}, querysArray: [], meta2dType: '', - timeType: 1 + params: {} } }, watch: { @@ -22,11 +22,19 @@ export default { if (res.data && res.data.topo) { this.topoData = res.data.topo.topo || {} this.querysArray = res.data.topo.elements || [] - this.timeType = res.data.topo.timeType || 1 + this.params = { + timeType: res.data.topo.timeType || 1, + unit: res.data.topo.unit || 1, + statistic: res.data.topo.statistic || 'last', + } } else { this.topoData = {} this.querysArray = [] - this.timeType = 1 + this.params = { + timeType: 1, + unit: 1, + statistic: 'last' + } } }) } diff --git a/nezha-fronted/src/components/common/project/meta2d/js/meta2dMain.js b/nezha-fronted/src/components/common/project/meta2d/js/meta2dMain.js index 6d6c9a69d..e2ba24b77 100644 --- a/nezha-fronted/src/components/common/project/meta2d/js/meta2dMain.js +++ b/nezha-fronted/src/components/common/project/meta2d/js/meta2dMain.js @@ -14,7 +14,9 @@ import { myCubeAnchors } from '../../L5/services/canvas.js' import { getTopology, setTopology, dealImg, topologyImg } from '@/components/common/js/common' +import { getMetricTypeValue } from '@/components/common/js/tools' import bus from '@/libs/bus' +import topoUtil from '@/components/common/project/meta2d/js/topoUtil' export default { data () { return { @@ -24,9 +26,13 @@ export default { meta2dLoading: true } }, + mixins: [topoUtil], methods: { init () { - const meta2dOptions = {} + const meta2dOptions = { + minScale: 0.25, + maxScale: 2 + } const meta2d = new Meta2d(this.meta2dId, meta2dOptions) meta2d.register(flowPens()) meta2d.register(activityDiagram()) @@ -53,7 +59,6 @@ export default { } // getTopology(this.topoData)).on('translate', this.topTranslate) // 平移· meta2d.on('active', this.pensActive) // 选中· - // meta2d.on('scale', this.topoScale) // 缩放· // meta2d.on('translatePens', () => {}) // 移动画笔结束· // meta2d.on('translatingPens', () => {}) // 移动画笔进行中· meta2d.on('enter', this.penEnter) // 移入画笔· @@ -68,7 +73,6 @@ export default { const startTime = endTime - 60 * 5 * 1000 this.getQueryValues(this.querysArray, startTime, endTime).then((arr) => { this.clacTopoData(this.topoData, arr).then((data) => { - console.log(data) getTopology(this.meta2dId).resize() getTopology(this.meta2dId).open(data) getTopology(this.meta2dId).centerView() @@ -76,23 +80,6 @@ export default { }) }) }, - clacTopoData (data, queryValues) { // 主要处理 属性为原始属性 处理动画属性对原始属性的影响 - return new Promise(resolve => { - if (!data.pens) { - data.pens = [] - } - data.pens.forEach(pen => { - if (pen.isNz) { - if (pen.data.legend) { - - } - } else { - // 处理加载数据 - } - }) - resolve(data) - }) - }, nodeInit (pen) { // 初始化节点参数 if (pen.data && pen.data.params) { return @@ -102,12 +89,13 @@ export default { background: pen.background || '#22222200', color: pen.color || '#222222ff', textColor: pen.textColor || '#222222ff', - image: '' }, imageId: '', valueMapping: [], legend: '', - statistic: '', + statistic: 'last', + parent: '', + value: '', enable: { valueMapping: true, tooltip: true @@ -143,6 +131,7 @@ export default { pen.visible = pen.visible || true pen.isNz = true pen.locked = pen.locked || 0 + pen.isBottom = true }, lineInit (pen) { // 初始化连线参数 if (pen.data && pen.data.params) { @@ -156,7 +145,9 @@ export default { }, valueMapping: [], legend: '', - statistic: '', + statistic: 'last', + parent: '', + value: '', enable: { valueMapping: true, tooltip: true @@ -178,16 +169,15 @@ export default { pen.isNz = pen.isNz || true pen.visible = pen.visible || true pen.locked = pen.locked || 0 + pen.isBottom = true }, pensActive (pens, e) { // 选中节点 this.selectPens = pens setTimeout(() => { - this.$refs.meta2dProps.isUpdate = true + this.$refs.meta2dProps && (this.$refs.meta2dProps.isUpdate = true) }) - console.log(pens, 'active') }, topoClick (params, e) { // 点击节点 - console.log('click') if (!params.pen && this.$refs.meta2dProps) { this.$refs.meta2dProps.activeName = 'canvas' this.selectPens = [] diff --git a/nezha-fronted/src/components/common/project/meta2d/js/topoUtil.js b/nezha-fronted/src/components/common/project/meta2d/js/topoUtil.js index 3c16d9a95..599f04a72 100644 --- a/nezha-fronted/src/components/common/project/meta2d/js/topoUtil.js +++ b/nezha-fronted/src/components/common/project/meta2d/js/topoUtil.js @@ -1,6 +1,7 @@ import { getTopology, setTopology, dealImg, topologyImg } from '@/components/common/js/common' import bus from '@/libs/bus' import axios from 'axios' +import {getMetricTypeValue} from "@/components/common/js/tools"; export default { methods: { topoResize (id) { @@ -8,10 +9,9 @@ export default { }, initEdit (id) { getTopology(id).lock(0) - getTopology(id).stopAnimate(getTopology(id).data.pens) - console.log(getTopology(id).data.pens) - if (getTopology(id).data.pens) { - getTopology(id).data.pens.forEach(item => { + getTopology(id).stopAnimate() + if (getTopology(id).data().pens) { + getTopology(id).data().pens.forEach(item => { this.calcNode(item) }) } @@ -19,7 +19,7 @@ export default { getTopology(id).centerView() }, calcNode (node) { // 处理节点数据 - node = { ...node, ...node.data.params } + node = { id: node.id, ...node.data.params } getTopology(this.meta2dId)._setValue(node) }, getQueryValues (elements, startTime, endTime) { @@ -29,7 +29,6 @@ export default { endTime = parseInt(endTime / 1000) startTime = parseInt(startTime / 1000) const urlPre = '/prom' - console.log(endTime, startTime) elements = elements.filter(item => item.state && item.expression) const requests = elements.map((element) => { // query_range @@ -42,7 +41,6 @@ export default { return this.$get(query) }) axios.all(requests).then((res) => { - console.log(res) const arr = [] res.forEach((request, index) => { arr.push({ @@ -77,7 +75,8 @@ export default { type: 'item', id: rindex + elements[index].name + JSON.stringify(r.metric), name: this.handleLegendAlias(legend, elements[index].legend, r.metric), - values: r.values + values: r.values, + parent: elements[index].name } arr.push(obj) }) @@ -129,6 +128,69 @@ export default { } return aliasExpression } - } + }, + clacTopoData (data, queryValues) { // 主要处理 属性为原始属性 处理动画属性对原始属性的影响 + console.log(this.params) + return new Promise(resolve => { // 处理加载数据 + if (!data.pens) { + data.pens = [] + } + data.pens.forEach(pen => { + if (pen.isNz) { + if (pen.data.legend) { + const findItem = queryValues.find(query => query.name === pen.data.legend && query.parent === pen.data.parent) + pen.data.value = getMetricTypeValue(findItem.values, pen.data.statistic || 'last') + this.selectMapping(pen) + } + } else { + // 处理 le5le的数据 + } + }) + resolve(data) + }) + }, + selectMapping (pen) { + let mapping = '' + const show = pen.data.enable.valueMapping + const valueMapping = pen.data.valueMapping + const value = pen.data.value + if (show && valueMapping) { + valueMapping.forEach(item => { + if (item.type === 'value') { + if (value == item.value) { + mapping = item + } + } + if (item.type === 'range') { + if (value >= item.from && value < item.to) { + mapping = item + } + } + if (item.type === 'regx') { + const reg = new RegExp(item.regx) + if (reg.test(value)) { + mapping = item + } + } + }) + if (mapping) { + this.drawPen(pen, mapping) + } + } + }, + drawPen (pen, mapping) { + if (!pen.type) { + pen.background = mapping.color.bac + pen.color = mapping.color.border + pen.textColor = mapping.color.text + } else { + pen.animateColor = mapping.color.bac + pen.borderColor = mapping.color.border + pen.color = mapping.color.text + if (pen.lineAnimateType) { + pen.autoPlay = true + } + } + }, } } diff --git a/nezha-fronted/src/components/common/project/meta2d/meta2dCanvas.vue b/nezha-fronted/src/components/common/project/meta2d/meta2dCanvas.vue index 92f2efae3..a0bcb5e21 100644 --- a/nezha-fronted/src/components/common/project/meta2d/meta2dCanvas.vue +++ b/nezha-fronted/src/components/common/project/meta2d/meta2dCanvas.vue @@ -48,7 +48,7 @@ handle: '.drag-sort' }">
-
+
@@ -117,10 +117,14 @@ export default { this.canvasProps[key] = !this.canvasProps[key] }, penActive (item) { + // bus.$emit('changeSelectPens', []) this.$emit('changeActiveName') - getTopology(this.meta2dId).active([item]) - getTopology(this.meta2dId).setValue(item) - bus.$emit('changeSelectPens', [item]) + this.$nextTick(() => { + getTopology(this.meta2dId).active([item]) + getTopology(this.meta2dId).render() + // getTopology(this.meta2dId).setValue(item) + bus.$emit('changeSelectPens', [item]) + }) }, penChange (item, key) { const obj = { @@ -129,27 +133,29 @@ export default { if (key === 'visible') { obj.visible = !item.visible if (!item.visible) { - if (item.id === getTopology(this.meta2dId).store.active[0].id) { + if (getTopology(this.meta2dId).store.active.length && item.id === getTopology(this.meta2dId).store.active[0].id) { bus.$emit('changeSelectPens', []) } } else { this.$emit('changeActiveName') getTopology(this.meta2dId).active([item]) - getTopology(this.meta2dId).setValue(item) + getTopology(this.meta2dId).render() + // getTopology(this.meta2dId).setValue(item) bus.$emit('changeSelectPens', [item]) } } if (key === 'locked') { if (!item.locked) { obj.locked = 10 - if (item.id === getTopology(this.meta2dId).store.active[0].id) { + if (getTopology(this.meta2dId).store.active.length && item.id === getTopology(this.meta2dId).store.active[0].id) { bus.$emit('changeSelectPens', []) } } else { obj.locked = 0 this.$emit('changeActiveName') getTopology(this.meta2dId).active([item]) - getTopology(this.meta2dId).setValue(item) + getTopology(this.meta2dId).render() + // getTopology(this.meta2dId).setValue(item) bus.$emit('changeSelectPens', [item]) } } @@ -163,7 +169,7 @@ export default { getTopology(this.meta2dId).addPen(obj, true) }, delPen (item) { - if (item.id === getTopology(this.meta2dId).store.active[0].id) { + if (getTopology(this.meta2dId).store.active.length && item.id === getTopology(this.meta2dId).store.active[0].id) { bus.$emit('changeSelectPens', []) } getTopology(this.meta2dId).delete([item]) @@ -177,7 +183,6 @@ export default { this.bkImage = image.image this.bkImageId = image.id getTopology(this.meta2dId).setBackgroundImage(image.image) - console.log(getTopology(this.meta2dId).data()) } } } diff --git a/nezha-fronted/src/components/common/project/meta2d/meta2dData.vue b/nezha-fronted/src/components/common/project/meta2d/meta2dData.vue index b87855d78..c1bbbf91e 100644 --- a/nezha-fronted/src/components/common/project/meta2d/meta2dData.vue +++ b/nezha-fronted/src/components/common/project/meta2d/meta2dData.vue @@ -1,13 +1,42 @@