<template>
|
<div class="h-full" v-loading="firstLoading">
|
<TreeGraph v-if="graphData" :data="graphData" class="h-full" :maxCount="maxCount" />
|
</div>
|
</template>
|
|
<script setup lang="ts">
|
import { onMounted, ref } from 'vue';
|
import TreeGraph from '/@/components/graph/treeGraph/TreeGraph.vue';
|
import router from '/@/router';
|
import { getMetricAgentListByPost, getMetricNameListByPost } from '/@/api/metrics';
|
import { OrgTreeItem } from './types';
|
|
const agentId = router.currentRoute.value.query.id as string;
|
const maxCount = ref(null);
|
const graphData = ref(null);
|
const firstLoading = ref(false);
|
const convertOrgTreeToTreeNode = (orgTreeData: OrgTreeItem) => {
|
const treeData = {
|
id: orgTreeData.treeId,
|
label: orgTreeData.label,
|
data: orgTreeData,
|
children: orgTreeData.children?.length > 0 ? orgTreeData.children.map((item) => convertOrgTreeToTreeNode(item)) : [],
|
};
|
return treeData;
|
};
|
const getFirstOrgTreeList = async () => {
|
// const res = await GetSMCenterFirstOrgTreeList();
|
/** @description 维度数量 */
|
let dimensionCount = 0;
|
/** @description 指标数量 */
|
let metricsCount = 0;
|
const allAgentRes = getMetricAgentListByPost();
|
const metricsRes = getMetricNameListByPost({
|
agent_id: agentId,
|
});
|
const [allAgentResult, metricsResult] = await Promise.all([allAgentRes, metricsRes]);
|
|
const allAgentList = allAgentResult?.values ?? [];
|
const metricsList = metricsResult?.values ?? [];
|
// const foundAgent = allAgentList.find(item=>item.)
|
metricsCount = metricsList.length;
|
const foundAgent = allAgentList.find((item) => item.id === agentId);
|
if (!foundAgent) return [];
|
|
const agentTreeId = `agent-${foundAgent.id}`;
|
let logicTree: OrgTreeItem = {
|
treeId: agentTreeId,
|
logicId: foundAgent.id,
|
model: foundAgent,
|
type: 'agent',
|
get label() {
|
return this.model.title;
|
},
|
level: 0,
|
children: metricsList.map((curVal) => {
|
const metricsTreeId = `${agentTreeId}-metrics-${curVal.id}`;
|
const dimensionList = curVal.dimensions ?? [];
|
const metrics: OrgTreeItem = {
|
treeId: metricsTreeId,
|
logicId: curVal.id,
|
type: 'metrics',
|
|
model: curVal,
|
get label() {
|
return this.model.title;
|
},
|
level: 1,
|
children: dimensionList.map((item) => {
|
const dimensionTreeId = `${metricsTreeId}-dimension-${item.id}`;
|
return {
|
treeId: dimensionTreeId,
|
logicId: item.id,
|
type: 'dimension',
|
model: item,
|
get label() {
|
return this.model.title;
|
},
|
level: 2,
|
};
|
}),
|
};
|
dimensionCount += metrics.children.length;
|
|
return metrics;
|
}, []),
|
};
|
const resData = logicTree;
|
const maxCount = Math.max(dimensionCount, metricsCount);
|
return [resData, maxCount];
|
};
|
onMounted(async () => {
|
if (!agentId) return;
|
firstLoading.value = true;
|
|
const [orgTreeData, maxLevelNodeCount] = await (getFirstOrgTreeList() as any).finally(() => {
|
firstLoading.value = false;
|
});
|
maxCount.value = maxLevelNodeCount;
|
graphData.value = convertOrgTreeToTreeNode(orgTreeData);
|
});
|
</script>
|
<style scoped lang="scss"></style>
|