From 22f3d1bb8f282f7deaee7ba30b0f5528dcd406a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E5=8D=9A=E6=96=87?= <1179111926@qq.com> Date: Thu, 7 Aug 2025 19:10:17 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/projects/vgpu/views/card/admin/Detail.vue | 1 + packages/web/projects/vgpu/views/card/admin/index.vue | 4 ++++ packages/web/projects/vgpu/views/node/admin/Detail.vue | 1 + packages/web/projects/vgpu/views/node/admin/index.vue | 2 ++ packages/web/projects/vgpu/views/poll/admin/Detail.vue | 1 + packages/web/projects/vgpu/views/task/admin/index.vue | 8 +++++++- 6 files changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/web/projects/vgpu/views/card/admin/Detail.vue b/packages/web/projects/vgpu/views/card/admin/Detail.vue index 1f9ee21..e05fa0e 100644 --- a/packages/web/projects/vgpu/views/card/admin/Detail.vue +++ b/packages/web/projects/vgpu/views/card/admin/Detail.vue @@ -198,6 +198,7 @@ const columns = [ }, { label: '使用模式', + width: 120, value: 'mode', render: ({ mode, type }) => ( diff --git a/packages/web/projects/vgpu/views/card/admin/index.vue b/packages/web/projects/vgpu/views/card/admin/index.vue index 7d09183..3536425 100644 --- a/packages/web/projects/vgpu/views/card/admin/index.vue +++ b/packages/web/projects/vgpu/views/card/admin/index.vue @@ -66,6 +66,7 @@ const columns = [ }, { title: '使用模式', + width: 120, dataIndex: 'mode', render: ({ mode, type }) => ( @@ -79,6 +80,7 @@ const columns = [ }, { title: '所属资源池', + width: 100, dataIndex: 'resourcePools', render: ({ resourcePools }) => `${resourcePools.join('、')}`, }, @@ -97,6 +99,7 @@ const columns = [ }, { title: '算力(已分配/总量)', + width: 120, dataIndex: 'used', render: ({ coreTotal, coreUsed, isExternal }) => ( @@ -107,6 +110,7 @@ const columns = [ { title: '显存(已分配/总量)', dataIndex: 'w', + width: 120, render: ({ memoryTotal, memoryUsed, isExternal }) => ( {isExternal ? '--' : roundToDecimal(memoryUsed / 1024, 1)}/ diff --git a/packages/web/projects/vgpu/views/node/admin/Detail.vue b/packages/web/projects/vgpu/views/node/admin/Detail.vue index 6a617cd..82df738 100644 --- a/packages/web/projects/vgpu/views/node/admin/Detail.vue +++ b/packages/web/projects/vgpu/views/node/admin/Detail.vue @@ -264,6 +264,7 @@ const detailColumns = [ { label: '节点状态', value: 'status', + width: 100, render: ({ isSchedulable, isExternal }) => { if (detail.value && detail.value.isSchedulable !== undefined) { return ( diff --git a/packages/web/projects/vgpu/views/node/admin/index.vue b/packages/web/projects/vgpu/views/node/admin/index.vue index 5992769..89cf6ab 100644 --- a/packages/web/projects/vgpu/views/node/admin/index.vue +++ b/packages/web/projects/vgpu/views/node/admin/index.vue @@ -128,6 +128,7 @@ const columns = [ }, { title: '节点状态', + width: 100, dataIndex: 'isSchedulable', render: ({ isSchedulable, isExternal }) => ( @@ -173,6 +174,7 @@ const columns = [ }, { title: '所属资源池', + width: 100, dataIndex: 'resourcePools', render: ({ resourcePools }) => `${resourcePools.join('、')}`, }, diff --git a/packages/web/projects/vgpu/views/poll/admin/Detail.vue b/packages/web/projects/vgpu/views/poll/admin/Detail.vue index 04abb37..b28996f 100644 --- a/packages/web/projects/vgpu/views/poll/admin/Detail.vue +++ b/packages/web/projects/vgpu/views/poll/admin/Detail.vue @@ -68,6 +68,7 @@ const columns = [ }, { title: '节点状态', + width: 100, dataIndex: 'isSchedulable', render: ({ isSchedulable, isExternal }) => ( diff --git a/packages/web/projects/vgpu/views/task/admin/index.vue b/packages/web/projects/vgpu/views/task/admin/index.vue index 860e977..90cd28a 100644 --- a/packages/web/projects/vgpu/views/task/admin/index.vue +++ b/packages/web/projects/vgpu/views/task/admin/index.vue @@ -58,6 +58,7 @@ const columns = [ title: '任务状态', dataIndex: 'status', render: ({ status, deviceIds }) => { + if (!status) return '/'; const enums = { closed: { text: '已完成', color: '#999' }, success: { text: '运行中', color: '#2563eb' }, @@ -119,12 +120,15 @@ const columns = [ }, { title: '所属资源池', + width: 100, dataIndex: 'resourcePools', - render: ({ resourcePools }) => `${resourcePools.join('、')}`, + render: ({ resourcePools }) => `${resourcePools?.length ? resourcePools.join('、') : '/'}`, }, { title: '所属节点', dataIndex: 'nodeName', + render: ({ nodeName }) => nodeName || '/', + }, { title: 'CPU', @@ -138,6 +142,7 @@ const columns = [ }, { title: '分配 vGPU', + width: 100, dataIndex: 'deviceIds', render: ({ deviceIds }) => { return ( @@ -178,6 +183,7 @@ const columns = [ { title: '任务创建时间', + width: 140, dataIndex: 'createTime', render: ({ createTime }) => timeParse(createTime), }, From 7436647b00ff417be92e9d85846d49c40b1c52f9 Mon Sep 17 00:00:00 2001 From: chenbowen <1179111926@qq.com> Date: Thu, 7 Aug 2025 21:26:08 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E5=9B=9E=E9=80=80=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=BA=93=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/package.json | 2 +- .../vgpu/views/monitor/overview/index.vue | 2 +- packages/web/src/components/TimePicker.vue | 136 ++++++++++++------ 3 files changed, 94 insertions(+), 46 deletions(-) diff --git a/packages/web/package.json b/packages/web/package.json index ba80ebc..80894bd 100644 --- a/packages/web/package.json +++ b/packages/web/package.json @@ -26,7 +26,7 @@ "core-js": "^3.8.3", "crypto-browserify": "^3.12.0", "echarts": "5.4.3", - "element-plus": "^2.4.1", + "element-plus": "2.10.4", "generate-avatar": "1.4.10", "js-cookie": "3.0.5", "lodash": "^4.17.21", diff --git a/packages/web/projects/vgpu/views/monitor/overview/index.vue b/packages/web/projects/vgpu/views/monitor/overview/index.vue index e41d2ea..a5661ec 100644 --- a/packages/web/projects/vgpu/views/monitor/overview/index.vue +++ b/packages/web/projects/vgpu/views/monitor/overview/index.vue @@ -44,7 +44,7 @@ diff --git a/packages/web/src/components/TimePicker.vue b/packages/web/src/components/TimePicker.vue index 71fafaf..4a16171 100644 --- a/packages/web/src/components/TimePicker.vue +++ b/packages/web/src/components/TimePicker.vue @@ -1,6 +1,5 @@ - 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 05/11] =?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 和小数点 +} From b01f60e89b12e723949b7758b4c6f37e126125b4 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 14:14:27 +0800 Subject: [PATCH 06/11] =?UTF-8?q?=E5=8A=A0=E7=A9=BA=E9=9A=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/web/src/layout/index.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/web/src/layout/index.vue b/packages/web/src/layout/index.vue index 028cbeb..f970ed1 100644 --- a/packages/web/src/layout/index.vue +++ b/packages/web/src/layout/index.vue @@ -1,6 +1,7 @@