feat: 资源类型
parent
db61067b33
commit
1d28e84e9a
@ -0,0 +1,120 @@
|
|||||||
|
<template>
|
||||||
|
<v-chart
|
||||||
|
v-if="JSON.stringify(option) != '{}'"
|
||||||
|
:option="option"
|
||||||
|
/>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { ref } from 'vue';
|
||||||
|
import { keyColor, colorEnum } from '../config';
|
||||||
|
|
||||||
|
const colorArrar = Object.keys(colorEnum);
|
||||||
|
const positionArrar = [[[30, 20]], [[58, 50]], [[40, 100]], [[10, 95]], [[10, 3]], [[20, 10]], [[0, 1]], [[50, 7]]];
|
||||||
|
const option = ref({});
|
||||||
|
let list = [];
|
||||||
|
|
||||||
|
const setOptions = () => {
|
||||||
|
option.value = {
|
||||||
|
grid: {
|
||||||
|
right: '40%',
|
||||||
|
},
|
||||||
|
tooltip: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
xAxis: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
yAxis: {
|
||||||
|
show: false,
|
||||||
|
},
|
||||||
|
legend: {
|
||||||
|
show: true,
|
||||||
|
orient: 'vertical',
|
||||||
|
icon: 'circle',
|
||||||
|
right: 20,
|
||||||
|
top: 'center',
|
||||||
|
itemGap: 20,
|
||||||
|
textStyle: {
|
||||||
|
color: 'rgb(85, 185, 216)',
|
||||||
|
},
|
||||||
|
data: list.map((item) => item.name),
|
||||||
|
},
|
||||||
|
series: [
|
||||||
|
...list.map((item) => {
|
||||||
|
return {
|
||||||
|
name: item.name,
|
||||||
|
type: 'scatter',
|
||||||
|
data: item.position,
|
||||||
|
symbolSize: item.scaleValue,
|
||||||
|
itemStyle: {
|
||||||
|
color: keyColor(item.prop),
|
||||||
|
},
|
||||||
|
label: {
|
||||||
|
show: true,
|
||||||
|
formatter: item.value.toString(),
|
||||||
|
color: '#fff',
|
||||||
|
fontSize: 18,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}),
|
||||||
|
],
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
const scaleObjectArrayTo100 = (arr) => {
|
||||||
|
const max = Math.max(...arr.map((item) => item.value));
|
||||||
|
const scaleArray = arr.map((item) => ({
|
||||||
|
...item,
|
||||||
|
scaleValue: (item.value / max) * 100,
|
||||||
|
}));
|
||||||
|
return scaleArray.sort((a, b) => b.scaleValue - a.scaleValue);
|
||||||
|
};
|
||||||
|
|
||||||
|
const getResourceTypeData = () => {
|
||||||
|
console.log('执行请求ResourceType');
|
||||||
|
return new Promise((resolve) => {
|
||||||
|
setTimeout(() => {
|
||||||
|
resolve([
|
||||||
|
{
|
||||||
|
name: '应用实例数',
|
||||||
|
value: 3,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '数据库数',
|
||||||
|
value: 5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '主机数',
|
||||||
|
value: 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: '子系统数',
|
||||||
|
value: 8,
|
||||||
|
},
|
||||||
|
]);
|
||||||
|
}, 1000);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const initFN = () => {
|
||||||
|
getResourceTypeData().then((result) => {
|
||||||
|
result = scaleObjectArrayTo100(result);
|
||||||
|
list = result.map((item, index) => {
|
||||||
|
return {
|
||||||
|
name: item.name,
|
||||||
|
position: positionArrar[index],
|
||||||
|
prop: colorArrar[index],
|
||||||
|
value: item.value,
|
||||||
|
scaleValue: item.scaleValue,
|
||||||
|
};
|
||||||
|
});
|
||||||
|
setOptions();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
defineExpose({
|
||||||
|
name: 'ResourceType',
|
||||||
|
init: initFN,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
Loading…
Reference in New Issue