|
|
@ -161,6 +161,59 @@ |
|
|
|
<span class="input-help">{{ computeSize(item.used) }} / {{ computeSize(item.total) }}</span> |
|
|
|
<span class="input-help">{{ computeSize(item.used) }} / {{ computeSize(item.total) }}</span> |
|
|
|
</el-col> |
|
|
|
</el-col> |
|
|
|
</template> |
|
|
|
</template> |
|
|
|
|
|
|
|
<template v-for="(item, index) of currentInfo.gpuData" :key="index"> |
|
|
|
|
|
|
|
<el-col |
|
|
|
|
|
|
|
:xs="12" |
|
|
|
|
|
|
|
:sm="12" |
|
|
|
|
|
|
|
:md="6" |
|
|
|
|
|
|
|
:lg="6" |
|
|
|
|
|
|
|
:xl="6" |
|
|
|
|
|
|
|
align="center" |
|
|
|
|
|
|
|
v-if="showMore || index < 4 - currentInfo.diskData.length" |
|
|
|
|
|
|
|
> |
|
|
|
|
|
|
|
<el-popover placement="bottom" :width="250" trigger="hover" v-if="chartsOption[`gpu${index}`]"> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag style="font-weight: 500">{{ $t('home.baseInfo') }}:</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag class="tagClass">{{ $t('monitor.gpuUtil') }}: {{ item.gpuUtil }}</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag class="tagClass"> |
|
|
|
|
|
|
|
{{ $t('monitor.temperature') }}: {{ item.temperature.replaceAll('C', '°C') }} |
|
|
|
|
|
|
|
</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag class="tagClass"> |
|
|
|
|
|
|
|
{{ $t('monitor.performanceState') }}: {{ item.performanceState }} |
|
|
|
|
|
|
|
</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag class="tagClass">{{ $t('monitor.powerUsage') }}: {{ item.powerUsage }}</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag class="tagClass">{{ $t('monitor.memoryUsage') }}: {{ item.memoryUsage }}</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<el-row :gutter="5"> |
|
|
|
|
|
|
|
<el-tag class="tagClass">{{ $t('monitor.fanSpeed') }}: {{ item.fanSpeed }}</el-tag> |
|
|
|
|
|
|
|
</el-row> |
|
|
|
|
|
|
|
<template #reference> |
|
|
|
|
|
|
|
<v-charts |
|
|
|
|
|
|
|
@click="goGPU()" |
|
|
|
|
|
|
|
height="160px" |
|
|
|
|
|
|
|
:id="`gpu${index}`" |
|
|
|
|
|
|
|
type="pie" |
|
|
|
|
|
|
|
:option="chartsOption[`gpu${index}`]" |
|
|
|
|
|
|
|
v-if="chartsOption[`gpu${index}`]" |
|
|
|
|
|
|
|
/> |
|
|
|
|
|
|
|
</template> |
|
|
|
|
|
|
|
</el-popover> |
|
|
|
|
|
|
|
<el-tooltip :content="item.productName" v-if="item.productName.length > 25"> |
|
|
|
|
|
|
|
<span class="input-help">{{ item.productName.substring(0, 22) }}...</span> |
|
|
|
|
|
|
|
</el-tooltip> |
|
|
|
|
|
|
|
<span class="input-help" v-else>{{ item.productName }}</span> |
|
|
|
|
|
|
|
</el-col> |
|
|
|
|
|
|
|
</template> |
|
|
|
<el-col :xs="12" :sm="12" :md="6" :lg="6" :xl="6" align="center"> |
|
|
|
<el-col :xs="12" :sm="12" :md="6" :lg="6" :xl="6" align="center"> |
|
|
|
<el-button v-if="!showMore" link type="primary" @click="showMore = true" class="buttonClass"> |
|
|
|
<el-button v-if="!showMore" link type="primary" @click="showMore = true" class="buttonClass"> |
|
|
|
{{ $t('tabs.more') }} |
|
|
|
{{ $t('tabs.more') }} |
|
|
@ -183,6 +236,7 @@ |
|
|
|
<script setup lang="ts"> |
|
|
|
<script setup lang="ts"> |
|
|
|
import { Dashboard } from '@/api/interface/dashboard'; |
|
|
|
import { Dashboard } from '@/api/interface/dashboard'; |
|
|
|
import { computeSize } from '@/utils/util'; |
|
|
|
import { computeSize } from '@/utils/util'; |
|
|
|
|
|
|
|
import router from '@/routers'; |
|
|
|
import i18n from '@/lang'; |
|
|
|
import i18n from '@/lang'; |
|
|
|
import { nextTick, ref } from 'vue'; |
|
|
|
import { nextTick, ref } from 'vue'; |
|
|
|
const showMore = ref(true); |
|
|
|
const showMore = ref(true); |
|
|
@ -238,6 +292,7 @@ const currentInfo = ref<Dashboard.CurrentInfo>({ |
|
|
|
ioWriteTime: 0, |
|
|
|
ioWriteTime: 0, |
|
|
|
|
|
|
|
|
|
|
|
diskData: [], |
|
|
|
diskData: [], |
|
|
|
|
|
|
|
gpuData: [], |
|
|
|
|
|
|
|
|
|
|
|
netBytesSent: 0, |
|
|
|
netBytesSent: 0, |
|
|
|
netBytesRecv: 0, |
|
|
|
netBytesRecv: 0, |
|
|
@ -271,7 +326,13 @@ const acceptParams = (current: Dashboard.CurrentInfo, base: Dashboard.BaseInfo, |
|
|
|
data: formatNumber(currentInfo.value.diskData[i].usedPercent), |
|
|
|
data: formatNumber(currentInfo.value.diskData[i].usedPercent), |
|
|
|
}; |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
if (currentInfo.value.diskData.length > 5) { |
|
|
|
for (let i = 0; i < currentInfo.value.gpuData.length; i++) { |
|
|
|
|
|
|
|
chartsOption.value['gpu' + i] = { |
|
|
|
|
|
|
|
title: 'GPU-' + currentInfo.value.gpuData[i].index, |
|
|
|
|
|
|
|
data: formatNumber(Number(currentInfo.value.gpuData[i].gpuUtil.replaceAll(' %', ''))), |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (currentInfo.value.diskData.length + currentInfo.value.gpuData.length > 5) { |
|
|
|
showMore.value = isInit ? false : showMore.value || false; |
|
|
|
showMore.value = isInit ? false : showMore.value || false; |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
@ -290,6 +351,10 @@ function loadStatus(val: number) { |
|
|
|
return i18n.global.t('home.runJam'); |
|
|
|
return i18n.global.t('home.runJam'); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const goGPU = () => { |
|
|
|
|
|
|
|
router.push({ name: 'GPU' }); |
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
function formatNumber(val: number) { |
|
|
|
function formatNumber(val: number) { |
|
|
|
return Number(val.toFixed(2)); |
|
|
|
return Number(val.toFixed(2)); |
|
|
|
} |
|
|
|
} |
|
|
|