348 lines
9.6 KiB
Vue
348 lines
9.6 KiB
Vue
<template>
|
||
<div class="w-100%">
|
||
<div class="flex justify-between items-center">
|
||
<div
|
||
class="w-[calc(50%-50px)] py-16px px-20px bg-#fff border-rd-10px b-1px .dark:bg-#1D1E1F .dark:b-#2A2B2C .dark:b-solid"
|
||
>
|
||
<h5 class="text">服务器基本信息</h5>
|
||
<div class="w-100% inline-grid grid-cols-4 gap-4 text-center">
|
||
<div class="left-bottom-box" v-for="(item, index) in topLeftData" :key="index">
|
||
<p>{{ item.title }}</p>
|
||
<div>
|
||
<span>{{ item.num }}</span> {{ item.dw }}
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div
|
||
class="flex w-[calc(50%-50px)] px-20px bg-#fff border-rd-10px justify-between items-center b-1px .dark:bg-#1D1E1F .dark:b-#2A2B2C .dark:b-solid"
|
||
>
|
||
<div class="conter-right-box" v-for="(item, index) in arr" :key="index">
|
||
<p class="text-conter">{{ item.title }}</p>
|
||
<div class="chart">
|
||
<Echart :options="syl_pie_option" width="140px" height="130px"></Echart>
|
||
</div>
|
||
</div>
|
||
<!-- <div class="conter-right-box">
|
||
<p class="text-conter">内存使用率</p>
|
||
<div class="chart">
|
||
<Echart :options="syl_pie_option" width="140px" height="130px"></Echart>
|
||
</div>
|
||
</div>
|
||
<div class="conter-right-box">
|
||
<p class="text-conter">系统平均负载(1m)</p>
|
||
<div class="chart">
|
||
<Echart :options="syl_pie_option" width="140px" height="130px"></Echart>
|
||
</div>
|
||
</div> -->
|
||
</div>
|
||
</div>
|
||
<div class="flex justify-between mt-20px">
|
||
<div
|
||
class="w-[calc(50%-50px)] bg-#fff border-rd-10px p-20px b-1px .dark:bg-#1D1E1F .dark:b-#2A2B2C .dark:b-solid"
|
||
>
|
||
<Echart :options="cpu_line_option" width="100%" height="350px" />
|
||
</div>
|
||
<div
|
||
class="w-[calc(50%-50px)] bg-#fff border-rd-10px p-20px b-1px .dark:bg-#1D1E1F .dark:b-#2A2B2C .dark:b-solid"
|
||
>
|
||
<Echart :options="nc_line_option" width="100%" height="350px" />
|
||
</div>
|
||
</div>
|
||
<div class="flex justify-between mt-20px">
|
||
<div
|
||
class="w-[calc(50%-50px)] bg-#fff border-rd-10px p-20px b-1px .dark:bg-#1D1E1F .dark:b-#2A2B2C .dark:b-solid"
|
||
>
|
||
<Echart :options="ll_line_option" width="100%" height="350px" />
|
||
</div>
|
||
<div
|
||
class="w-[calc(50%-50px)] bg-#fff border-rd-10px p-20px b-1px .dark:bg-#1D1E1F .dark:b-#2A2B2C .dark:b-solid"
|
||
>
|
||
<Echart :options="cp_line_option" width="100%" height="350px" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script lang="ts" setup>
|
||
import { useAppStore } from '@/store/modules/app'
|
||
import { CACHE_KEY, useCache } from '@/hooks/web/useCache'
|
||
import { batchGetTableList } from '@/api/design/report'
|
||
|
||
defineOptions({ name: 'Home3' })
|
||
|
||
interface TopLeftData {
|
||
title: string
|
||
dw: string
|
||
dictionary: string
|
||
num?: number
|
||
}
|
||
|
||
const topLeftData = ref<TopLeftData[]>([
|
||
{ title: '系统运行时间', dw: '天', dictionary: 'xtyxsj' },
|
||
{ title: 'cpu核心数', dw: '', dictionary: 'cpuhxs' },
|
||
{ title: '内存总量', dw: 'G', dictionary: 'nczl' },
|
||
{ title: '系统平均负数', dw: '', dictionary: 'xtpjfz' }
|
||
])
|
||
|
||
const arr = ref<any>([
|
||
{ title: 'CPU使用率(1m)', dictionary: 'cpusyl' },
|
||
{ title: '内存使用率', dictionary: 'ncsyl' },
|
||
{ title: '系统平均负载(1m)', dictionary: 'xtpjfzl' }
|
||
])
|
||
|
||
const syl_pie_option = ref<any>({
|
||
title: { text: '50%', left: 'center', top: 'center' },
|
||
series: [
|
||
{
|
||
type: 'pie',
|
||
stillShowZeroSum: false,
|
||
label: { show: false },
|
||
hoverAnimation: false,
|
||
data: [
|
||
{ value: 100, name: 'A' },
|
||
{ value: 0, name: 'B' }
|
||
],
|
||
itemStyle: {
|
||
normal: {
|
||
color: function (params) {
|
||
var colors = ['#e9e9e9', '#0099ff', '#51d351']
|
||
return colors[params.dataIndex % colors.length]
|
||
}
|
||
}
|
||
},
|
||
radius: ['50%', '70%']
|
||
}
|
||
]
|
||
})
|
||
|
||
const cpuLineXAxis = ref<string[]>([])
|
||
const cpuLineSeries = ref<string[]>([])
|
||
const cpu_line_option = reactive<any>({
|
||
title: {
|
||
text: 'CPU使用率',
|
||
textStyle: {}
|
||
},
|
||
tooltip: {},
|
||
legend: { data: ['使用率'], x: 'right', selectedMode: false },
|
||
xAxis: {
|
||
data: cpuLineXAxis.value
|
||
},
|
||
yAxis: { type: 'value' },
|
||
series: [
|
||
{
|
||
name: '使用率',
|
||
data: cpuLineSeries.value,
|
||
type: 'line',
|
||
stack: 'x',
|
||
areaStyle: { color: '#ffd7dc' },
|
||
itemStyle: { normal: { color: '#ffd7dc', lineStyle: { color: '#ff7a8c' } } }
|
||
}
|
||
]
|
||
})
|
||
const ncLineXAxis = ref<string[]>([])
|
||
const ncLineSeries = ref<string[]>([])
|
||
const nc_line_option = reactive<any>({
|
||
title: {
|
||
text: '内存使用率',
|
||
textStyle: {}
|
||
},
|
||
tooltip: {},
|
||
legend: { data: ['使用率'], x: 'right', selectedMode: false },
|
||
xAxis: {
|
||
data: ncLineXAxis.value
|
||
},
|
||
yAxis: { type: 'value' },
|
||
series: [
|
||
{
|
||
name: '使用率',
|
||
data: ncLineSeries.value,
|
||
type: 'line',
|
||
stack: 'x',
|
||
areaStyle: { color: '#b2e0ff' },
|
||
itemStyle: { normal: { color: '#b2e0ff', lineStyle: { color: '#0099ff' } } }
|
||
}
|
||
]
|
||
})
|
||
const llLineXAxis = ref<string[]>([])
|
||
const llLineSeries1 = ref<string[]>([])
|
||
const llLineSeries2 = ref<string[]>([])
|
||
const ll_line_option = reactive<any>({
|
||
title: {
|
||
text: '服务器流量',
|
||
textStyle: {}
|
||
},
|
||
tooltip: {},
|
||
legend: { data: ['上传', '下载'], x: 'right', selectedMode: false },
|
||
xAxis: { data: llLineXAxis.value },
|
||
yAxis: { type: 'value' },
|
||
series: [
|
||
{
|
||
name: '上传',
|
||
data: llLineSeries1.value,
|
||
type: 'line',
|
||
// stack: 'x',
|
||
areaStyle: { color: '#caf1ca' },
|
||
itemStyle: { normal: { color: '#51d351', lineStyle: { color: '#51d351' } } }
|
||
},
|
||
{
|
||
name: '下载',
|
||
data: llLineSeries2.value,
|
||
type: 'line',
|
||
// stack: 'x',
|
||
areaStyle: { color: '#ffe5c9' },
|
||
itemStyle: { normal: { color: '#ffb465', lineStyle: { color: '#ffb465' } } }
|
||
}
|
||
]
|
||
})
|
||
const cpLineXAxis = ref<string[]>([])
|
||
const cpLineSeries1 = ref<string[]>([])
|
||
const cpLineSeries2 = ref<string[]>([])
|
||
const cp_line_option = reactive<any>({
|
||
title: {
|
||
text: '服务器磁盘IO',
|
||
textStyle: {}
|
||
},
|
||
tooltip: {},
|
||
legend: { data: ['输出', '输入'], x: 'right', selectedMode: false },
|
||
xAxis: { data: cpLineXAxis.value },
|
||
yAxis: { type: 'value' },
|
||
series: [
|
||
{
|
||
name: '输出',
|
||
data: cpLineSeries1.value,
|
||
type: 'line',
|
||
// stack: 'x',
|
||
areaStyle: { color: '#bdf1f1' },
|
||
itemStyle: { normal: { color: '#78e3e4', lineStyle: { color: '#78e3e4' } } }
|
||
},
|
||
{
|
||
name: '输入',
|
||
data: cpLineSeries2.value,
|
||
type: 'line',
|
||
// stack: 'x',
|
||
areaStyle: { color: '#d9d1fc' },
|
||
itemStyle: { normal: { color: '#8167f5', lineStyle: { color: '#8167f5' } } }
|
||
}
|
||
]
|
||
})
|
||
const textStyle = reactive({
|
||
color: ''
|
||
})
|
||
const appStore = useAppStore()
|
||
|
||
const init = async () => {
|
||
let oneres = await batchGetTableList(
|
||
'example_systemmonitor_server_information,example_systemmonitor_cpu_utilization,example_systemmonitor_memory_utilization,example_systemmonitor_server_traffic,example_systemmonitor_disk_io'
|
||
)
|
||
|
||
let serverInformation = oneres.example_systemmonitor_server_information.records[0]
|
||
topLeftData.value = topLeftData.value.map((item) => {
|
||
return (item = {
|
||
...item,
|
||
num: serverInformation[item.dictionary]
|
||
})
|
||
})
|
||
arr.value = arr.value.map((item) => {
|
||
syl_pie_option.value.title.text = serverInformation[item.dictionary] + '%'
|
||
syl_pie_option.value.series[0].data[1].value = serverInformation[item.dictionary]
|
||
return item
|
||
})
|
||
//CPU使用率
|
||
let cpuUtilization = oneres.example_systemmonitor_cpu_utilization.records
|
||
cpuUtilization.forEach((ele) => {
|
||
cpuLineXAxis.value.push(ele.sj)
|
||
cpuLineSeries.value.push(ele.syl)
|
||
})
|
||
//内存使用率
|
||
let memoryUtilization = oneres.example_systemmonitor_memory_utilization.records
|
||
memoryUtilization.forEach((ele) => {
|
||
ncLineXAxis.value.push(ele.sj)
|
||
ncLineSeries.value.push(ele.syl)
|
||
})
|
||
//服务器流量
|
||
let serverTraffic = oneres.example_systemmonitor_server_traffic.records
|
||
serverTraffic.forEach((ele) => {
|
||
llLineXAxis.value.push(ele.sj)
|
||
llLineSeries1.value.push(ele.sc)
|
||
llLineSeries2.value.push(ele.xz)
|
||
})
|
||
//服务器磁盘IO
|
||
let diskIo = oneres.example_systemmonitor_disk_io.records
|
||
diskIo.forEach((ele) => {
|
||
cpLineXAxis.value.push(ele.sj)
|
||
cpLineSeries1.value.push(ele.sc)
|
||
cpLineSeries2.value.push(ele.sr)
|
||
})
|
||
}
|
||
|
||
onMounted(async () => {
|
||
await init()
|
||
// 判断是否为暗色模式
|
||
const { wsCache } = useCache()
|
||
if (wsCache.get(CACHE_KEY.IS_DARK)) {
|
||
textStyle.color = '#E5EAF3'
|
||
cpu_line_option.title.textStyle = textStyle
|
||
nc_line_option.title.textStyle = textStyle
|
||
ll_line_option.title.textStyle = textStyle
|
||
cp_line_option.title.textStyle = textStyle
|
||
}
|
||
})
|
||
|
||
watch(
|
||
() => appStore.isDark,
|
||
(val) => {
|
||
if (val) {
|
||
textStyle.color = '#E5EAF3'
|
||
} else {
|
||
textStyle.color = 'black'
|
||
}
|
||
cpu_line_option.title.textStyle = textStyle
|
||
nc_line_option.title.textStyle = textStyle
|
||
ll_line_option.title.textStyle = textStyle
|
||
cp_line_option.title.textStyle = textStyle
|
||
}
|
||
)
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
h5,
|
||
p {
|
||
padding: 0;
|
||
margin: 0;
|
||
}
|
||
|
||
.conter-right-box {
|
||
width: 200px;
|
||
text-align: center;
|
||
|
||
.text-conter {
|
||
margin-top: 15px;
|
||
font-size: 14px;
|
||
}
|
||
|
||
.chart {
|
||
display: flex;
|
||
width: 100%;
|
||
justify-content: center;
|
||
}
|
||
}
|
||
|
||
.left-bottom-box {
|
||
margin: 20px 0;
|
||
font-size: 12px;
|
||
text-align: center;
|
||
|
||
span {
|
||
font-size: 28px;
|
||
font-weight: 600;
|
||
}
|
||
}
|
||
|
||
.text {
|
||
margin-bottom: 20px;
|
||
font-size: 14px;
|
||
color: #666;
|
||
}
|
||
</style>
|