From 49d76da34fa6b972719a53b40fe77a0f59a11ee8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=99=88=E5=8D=9A=E6=96=87?= <1179111926@qq.com>
Date: Fri, 8 Aug 2025 11:42:42 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=B2=BE=E5=BA=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../web/projects/vgpu/components/TabTop.vue | 25 ++++++---------
.../vgpu/views/monitor/overview/index.vue | 16 +++++-----
.../projects/vgpu/views/task/admin/top.vue | 32 +++++++++----------
packages/web/src/utils/index.js | 25 +++++++++++++++
4 files changed, 58 insertions(+), 40 deletions(-)
diff --git a/packages/web/projects/vgpu/components/TabTop.vue b/packages/web/projects/vgpu/components/TabTop.vue
index 8db38a7..ddbeac6 100644
--- a/packages/web/projects/vgpu/components/TabTop.vue
+++ b/packages/web/projects/vgpu/components/TabTop.vue
@@ -2,23 +2,14 @@
-
+
-
+
@@ -28,6 +19,7 @@ import { onMounted, ref } from 'vue';
import EchartsPlus from '@/components/Echarts-plus.vue';
import cardApi from '~/vgpu/api/card';
import { cloneDeep } from 'lodash';
+import { formatSmartPercentage } from '@/utils';
const props = defineProps({
title: String,
@@ -60,13 +52,14 @@ const getTopOptions = () => {
type: 'shadow',
},
formatter: function (params) {
- // console.log(params, 'params')
var res = params[0].name + '
';
for (var i = 0; i < params.length; i++) {
+ console.log(params[i].value, formatSmartPercentage(params[i].value), 'params')
+
res +=
params[i].marker +
params[i].seriesName +
- (+params[i].value).toFixed(0) +
+ formatSmartPercentage(params[i].value) +
`${config.unit || '%'}
`;
}
return res;
diff --git a/packages/web/projects/vgpu/views/monitor/overview/index.vue b/packages/web/projects/vgpu/views/monitor/overview/index.vue
index a5661ec..dc89dcc 100644
--- a/packages/web/projects/vgpu/views/monitor/overview/index.vue
+++ b/packages/web/projects/vgpu/views/monitor/overview/index.vue
@@ -481,14 +481,14 @@ const fetchRangeData = () => {
}
- cardApi
- .getRangeVector({
- ...params,
- query: `sum({__name__=~"alert:.*:count"})`,
- })
- .then((res) => {
- alarmData.value = res.data[0].values;
- });
+ // cardApi
+ // .getRangeVector({
+ // ...params,
+ // query: `sum({__name__=~"alert:.*:count"})`,
+ // })
+ // .then((res) => {
+ // alarmData.value = res.data[0].values;
+ // });
};
diff --git a/packages/web/projects/vgpu/views/task/admin/top.vue b/packages/web/projects/vgpu/views/task/admin/top.vue
index 4393d9e..0075770 100644
--- a/packages/web/projects/vgpu/views/task/admin/top.vue
+++ b/packages/web/projects/vgpu/views/task/admin/top.vue
@@ -63,22 +63,22 @@ const topConfig = [
title: '任务资源申请 Top5',
key: 'apply',
config: [
- {
- tab: 'CPU',
- key: 'cpu',
- data: [],
- nameKey: 'container_pod_uuid',
- unit: '核',
- query: 'topk(5, sum by(container_pod_uuid) (hami_container_vcore_allocated))',
- },
- {
- tab: '内存',
- key: 'internal',
- data: [],
- unit: 'GiB',
- nameKey: 'container_pod_uuid',
- query: 'topk(5, sum by(container_pod_uuid) (hami_container_vmemory_allocated))',
- },
+ // {
+ // tab: 'CPU',
+ // key: 'cpu',
+ // data: [],
+ // nameKey: 'container_pod_uuid',
+ // unit: '核',
+ // query: 'topk(5, sum by(container_pod_uuid) (hami_container_vcore_allocated))',
+ // },
+ // {
+ // tab: '内存',
+ // key: 'internal',
+ // data: [],
+ // unit: 'GiB',
+ // nameKey: 'container_pod_uuid',
+ // query: 'topk(5, sum by(container_pod_uuid) (hami_container_vmemory_allocated))',
+ // },
{
tab: '算力',
key: 'core',
diff --git a/packages/web/src/utils/index.js b/packages/web/src/utils/index.js
index b4d4806..b0d8e5d 100644
--- a/packages/web/src/utils/index.js
+++ b/packages/web/src/utils/index.js
@@ -588,3 +588,28 @@ export function parseUrl(url) {
return { pathname, query };
}
+
+export function formatSmartPercentage(value) {
+ if (value === 0) return '0';
+
+ // 整数直接返回
+ if (Number.isInteger(value)) return value.toString();
+
+ const str = value.toString();
+ const decimal = str.split('.')[1] || '';
+
+ // 统计前导0的个数
+ let leadingZeros = 0;
+ for (const char of decimal) {
+ if (char === '0') {
+ leadingZeros++;
+ } else {
+ break;
+ }
+ }
+
+ const keep = leadingZeros + 2; // 0 的个数 + 1 位有效数字 + 1 位补充位
+ const rounded = value.toFixed(keep);
+
+ return parseFloat(rounded).toString(); // 去除多余的 0 和小数点
+}