diff --git a/packages/web/projects/vgpu/api/node.js b/packages/web/projects/vgpu/api/node.js
index a814103..e90c9a8 100644
--- a/packages/web/projects/vgpu/api/node.js
+++ b/packages/web/projects/vgpu/api/node.js
@@ -6,7 +6,7 @@ const apiPrefix = '/api/vgpu';
class nodeApi {
getNodeList(data) {
return {
- url: apiPrefix + '/v1/nodes',
+ url: apiPrefix + '/v1/nodes',
method: 'POST',
data,
};
@@ -14,7 +14,7 @@ class nodeApi {
getNodes(data) {
return request({
- url: apiPrefix + '/v1/nodes',
+ url: apiPrefix + '/v1/nodes',
method: 'POST',
data,
});
@@ -22,7 +22,7 @@ class nodeApi {
getNodeDetail(params) {
return request({
- url: apiPrefix + '/v1/node',
+ url: apiPrefix + '/v1/node',
method: 'GET',
params,
});
@@ -31,6 +31,21 @@ class nodeApi {
getNodeListReq(data) {
return request(this.getNodeList(data));
}
+
+ discoveredNodes(data) {
+ return request({
+ url: apiPrefix + '/v1/node/discovered',
+ method: 'POST',
+ data,
+ });
+ }
+ joinNodes(data) {
+ return request({
+ url: apiPrefix + '/v1/node/join',
+ method: 'POST',
+ data,
+ });
+ }
}
export default new nodeApi();
diff --git a/packages/web/projects/vgpu/views/node/admin/index.vue b/packages/web/projects/vgpu/views/node/admin/index.vue
index 760994b..83f1bbb 100644
--- a/packages/web/projects/vgpu/views/node/admin/index.vue
+++ b/packages/web/projects/vgpu/views/node/admin/index.vue
@@ -1,22 +1,35 @@
-
-
-
-
-
-
+
+
+ 发现节点
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ nodeIp }}
+
+
+
+
+
+
+
+
+
+ 取消
+ 确认
+
+
@@ -26,16 +39,25 @@ import searchSchema from '~/vgpu/views/node/admin/searchSchema';
import { useRouter } from 'vue-router';
import PreviewBar from '~/vgpu/components/previewBar.vue';
import { roundToDecimal } from '@/utils';
-import {ElMessage, ElMessageBox} from 'element-plus';
+import { ElMessage, ElMessageBox } from 'element-plus';
import { ref } from 'vue';
const router = useRouter();
const table = ref();
+// 节点选择相关
+const dialogVisible = ref(false)
+const nodeList = ref([])
+const nodeSelect = ref([])
+const loading = ref(true)
+const btnLoading = ref(false)
+
+
+
const handleClick = async (params) => {
const name = params.data.name;
- const {list} = await nodeApi.getNodes({filters:{}})
+ const { list } = await nodeApi.getNodes({ filters: {} })
const node = list.find(node => node.name === name);
if (node) {
const uuid = node.uid;
@@ -45,6 +67,49 @@ const handleClick = async (params) => {
}
};
+// 确认操作
+const handleOk = async () => {
+ if (!nodeSelect.value.length) {
+ ElMessage({
+ message: '请选择节点',
+ type: 'warning',
+ })
+ return;
+ }
+ btnLoading.value = true;
+ try {
+ const node_names = nodeList.value.filter(e => nodeSelect.value.includes(e.nodeIp)).map(e => e.nodeName)
+ const res = await nodeApi.joinNodes({
+ node_names
+ })
+ if (res?.code === 200) {
+ getList();
+ dialogVisible.value = false;
+ }
+ } finally {
+ btnLoading.value = false;
+ }
+}
+
+// 复选框变化
+const handleCheckboxChange = (ip) => {
+ const index = nodeSelect.value.indexOf(ip);
+ if (index > -1) {
+ nodeSelect.value.splice(index, 1);
+ } else {
+ nodeSelect.value.push(ip);
+ }
+}
+
+// 添加节点
+const handleAdd = async () => {
+ dialogVisible.value = true
+ loading.value = true
+ const res = await nodeApi.discoveredNodes({})
+ nodeList.value = res?.list || []
+ loading.value = false
+}
+
const columns = [
{
title: '节点名称',
@@ -61,9 +126,9 @@ const columns = [
title: '节点状态',
dataIndex: 'isSchedulable',
render: ({ isSchedulable, isExternal }) => (
-
- {isExternal ? '未纳管' : (isSchedulable ? '可调度' : '禁止调度')}
-
+
+ {isExternal ? '未纳管' : (isSchedulable ? '可调度' : '禁止调度')}
+
)
// filters: [
// {
@@ -95,28 +160,28 @@ const columns = [
title: 'vGPU',
dataIndex: 'used',
render: ({ vgpuTotal, vgpuUsed, isExternal }) => (
-
- {isExternal ? '--' : vgpuUsed}/{isExternal ? '--' : vgpuTotal}
-
+
+ {isExternal ? '--' : vgpuUsed}/{isExternal ? '--' : vgpuTotal}
+
),
},
{
title: '算力(已分配/总量)',
dataIndex: 'used',
render: ({ coreTotal, coreUsed, isExternal }) => (
-
- {isExternal ? '--' : coreUsed}/{coreTotal}
-
+
+ {isExternal ? '--' : coreUsed}/{coreTotal}
+
),
},
{
title: '显存(已分配/总量)',
dataIndex: 'w',
render: ({ memoryTotal, memoryUsed, isExternal }) => (
-
- {isExternal ? '--' : roundToDecimal(memoryUsed / 1024, 1)}/
- {roundToDecimal(memoryTotal / 1024, 1)} GiB
-
+
+ {isExternal ? '--' : roundToDecimal(memoryUsed / 1024, 1)}/
+ {roundToDecimal(memoryTotal / 1024, 1)} GiB
+
),
},
];
diff --git a/packages/web/projects/vgpu/views/poll/admin/index.vue b/packages/web/projects/vgpu/views/poll/admin/index.vue
index 6b3af46..17c1e12 100644
--- a/packages/web/projects/vgpu/views/poll/admin/index.vue
+++ b/packages/web/projects/vgpu/views/poll/admin/index.vue
@@ -8,7 +8,7 @@
+ :key="poolId" style="margin: 15px 0 0 0;">
{{ poolName }}
@@ -36,7 +36,7 @@
-
@@ -90,10 +90,8 @@
-
+ 取消
+ 确认