From 43e1dd0b0e0f5a58c52d534a7af0c5354bedc8d5 Mon Sep 17 00:00:00 2001 From: jialin Date: Thu, 24 Jul 2025 17:31:47 +0800 Subject: [PATCH] feat: clusters group --- config/routes.ts | 60 ++++++++++++++++---- src/components/icon-font/index.tsx | 4 +- src/locales/en-US/menu.ts | 6 +- src/locales/ja-JP/menu.ts | 10 +++- src/locales/ru-RU/menu.ts | 18 +++++- src/locales/zh-CN/menu.ts | 6 +- src/pages/cluster-management/clusters.tsx | 25 ++++++++ src/pages/cluster-management/credentials.tsx | 24 ++++++++ src/pages/llmodels/user-models.tsx | 24 ++++++++ 9 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 src/pages/cluster-management/clusters.tsx create mode 100644 src/pages/cluster-management/credentials.tsx create mode 100644 src/pages/llmodels/user-models.tsx diff --git a/config/routes.ts b/config/routes.ts index 7222e75e..ed5a225a 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -54,16 +54,16 @@ export default [ defaultIcon: 'icon-reranker', component: './playground/rerank' }, - { - name: 'text2images', - title: 'Text2Images', - path: keepAliveRoutes.text2images, - key: 'text2images', - icon: 'icon-image1', - selectedIcon: 'icon-image-filled', - defaultIcon: 'icon-image1', - component: './playground/images' - }, + // { + // name: 'text2images', + // title: 'Text2Images', + // path: keepAliveRoutes.text2images, + // key: 'text2images', + // icon: 'icon-image1', + // selectedIcon: 'icon-image-filled', + // defaultIcon: 'icon-image1', + // component: './playground/images' + // }, { name: 'speech', title: 'Speech', @@ -105,6 +105,16 @@ export default [ defaultIcon: 'icon-rocket-launch1', access: 'canSeeAdmin', component: './llmodels/index' + }, + { + name: 'userModels', + path: '/models/user-models', + key: 'userModels', + icon: 'icon-models', + selectedIcon: 'icon-models-filled', + defaultIcon: 'icon-models', + access: 'canSeeAdmin', + component: './llmodels/user-models' } ] }, @@ -147,6 +157,36 @@ export default [ } ] }, + { + name: 'clusterManagement', + path: '/cluster-management', + key: 'clusterManagement', + access: 'canSeeAdmin', + routes: [ + { + path: '/cluster-management', + redirect: '/cluster-management/clusters' + }, + { + name: 'clusters', + path: '/cluster-management/clusters', + key: 'clusters', + icon: 'icon-k8s-outline', + selectedIcon: 'icon-k8s-filled', + defaultIcon: 'icon-k8s-outline', + component: './cluster-management/clusters' + }, + { + name: 'credentials', + path: '/cluster-management/credentials', + key: 'credentials', + icon: 'icon-credential-outline', + selectedIcon: 'icon-credential-filled', + defaultIcon: 'icon-credential-outline', + component: './cluster-management/credentials' + } + ] + }, { name: 'accessControl', path: '/access-control', diff --git a/src/components/icon-font/index.tsx b/src/components/icon-font/index.tsx index 2c4fbc7b..1ff34042 100644 --- a/src/components/icon-font/index.tsx +++ b/src/components/icon-font/index.tsx @@ -1,8 +1,8 @@ import { createFromIconfontCN } from '@ant-design/icons'; -import './iconfont/iconfont.js'; +// import './iconfont/iconfont.js'; const IconFont = createFromIconfontCN({ - scriptUrl: '' + scriptUrl: '//at.alicdn.com/t/c/font_4613488_oxxxb51iqbp.js' }); export default IconFont; diff --git a/src/locales/en-US/menu.ts b/src/locales/en-US/menu.ts index 8d605f41..d222387f 100644 --- a/src/locales/en-US/menu.ts +++ b/src/locales/en-US/menu.ts @@ -12,6 +12,7 @@ export default { 'menu.models.modelCatalog': 'Catalog', 'menu.models.catalog': 'Model Catalog', 'menu.models.deployment': 'Deployments', + 'menu.models.userModels': 'My Models', 'menu.modelCatalog': 'Catalog', 'menu.resources': 'Resources', 'menu.apikeys': 'API Keys', @@ -25,5 +26,8 @@ export default { 'menu.profile': 'Profile', 'menu.login': 'Login', 'menu.usage': 'Usage', - 'menu.404': '404' + 'menu.404': '404', + 'menu.clusterManagement': 'Cluster Management', + 'menu.clusterManagement.clusters': 'Clusters', + 'menu.clusterManagement.credentials': 'Credentials' }; diff --git a/src/locales/ja-JP/menu.ts b/src/locales/ja-JP/menu.ts index a585fcaf..44316958 100644 --- a/src/locales/ja-JP/menu.ts +++ b/src/locales/ja-JP/menu.ts @@ -25,7 +25,11 @@ export default { 'menu.resources.modelfiles': 'Model Files', 'menu.accessControl': 'Access Control', 'menu.accessControl.apikeys': 'API Keys', - 'menu.accessControl.users': 'Users' + 'menu.accessControl.users': 'Users', + 'menu.clusterManagement': 'Cluster Management', + 'menu.clusterManagement.clusters': 'Clusters', + 'menu.clusterManagement.credentials': 'Credentials', + 'menu.models.userModels': 'My Models' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== @@ -36,4 +40,8 @@ export default { // 5. 'menu.accessControl': 'Access Control', // 6. 'menu.accessControl.apikeys': 'API Keys', // 7. 'menu.accessControl.users': 'Users', +// 8. 'menu.clusterManagement': 'Cluster Management', +// 9. 'menu.clusterManagement.clusters': 'Clusters', +// 10. 'menu.clusterManagement.credentials': 'Credentials', +// 11. 'menu.models.userModels': 'My Models' // ========== End of To-Do List ========== diff --git a/src/locales/ru-RU/menu.ts b/src/locales/ru-RU/menu.ts index 4269bf9d..c7ef1cde 100644 --- a/src/locales/ru-RU/menu.ts +++ b/src/locales/ru-RU/menu.ts @@ -25,9 +25,23 @@ export default { 'menu.resources.modelfiles': 'Файлы модлей', 'menu.accessControl': 'Управление доступом', 'menu.accessControl.apikeys': 'API Ключи', - 'menu.accessControl.users': 'Пользователи' + 'menu.accessControl.users': 'Пользователи', + 'menu.clusterManagement': 'Cluster Management', + 'menu.clusterManagement.clusters': 'Clusters', + 'menu.clusterManagement.credentials': 'Credentials', + 'menu.models.userModels': 'My Models' }; // ========== To-Do: Translate Keys (Remove After Translation) ========== - +// 1. 'menu.models.deployment': 'Deployment', +// 2. 'menu.resources.workers': 'Workers', +// 3. 'menu.resources.gpus': 'GPUs', +// 4. 'menu.resources.modelfiles': 'Model Files', +// 5. 'menu.accessControl': 'Access Control', +// 6. 'menu.accessControl.apikeys': 'API Keys', +// 7. 'menu.accessControl.users': 'Users', +// 8. 'menu.clusterManagement': 'Cluster Management', +// 9. 'menu.clusterManagement.clusters': 'Clusters', +// 10. 'menu.clusterManagement.credentials': 'Credentials', +// 11. 'menu.models.userModels': 'My Models' // ========== End of To-Do List ========== diff --git a/src/locales/zh-CN/menu.ts b/src/locales/zh-CN/menu.ts index 85b7be69..7d3c8c62 100644 --- a/src/locales/zh-CN/menu.ts +++ b/src/locales/zh-CN/menu.ts @@ -11,6 +11,7 @@ export default { 'menu.models.modelList': '部署与管理', 'menu.models.modelCatalog': '模型库', 'menu.models.deployment': '部署', + 'menu.models.userModels': '我的模型', 'menu.modelCatalog': '模型库', 'menu.models.catalog': '模型库', 'menu.resources': '资源', @@ -25,5 +26,8 @@ export default { 'menu.resources.modelfiles': '模型文件', 'menu.accessControl': '访问控制', 'menu.accessControl.apikeys': 'API 密钥', - 'menu.accessControl.users': '用户' + 'menu.accessControl.users': '用户', + 'menu.clusterManagement': '集群管理', + 'menu.clusterManagement.clusters': '集群', + 'menu.clusterManagement.credentials': '凭据' }; diff --git a/src/pages/cluster-management/clusters.tsx b/src/pages/cluster-management/clusters.tsx new file mode 100644 index 00000000..a7712a23 --- /dev/null +++ b/src/pages/cluster-management/clusters.tsx @@ -0,0 +1,25 @@ +import { PageContainer } from '@ant-design/pro-components'; +import { useIntl } from '@umijs/max'; +import React from 'react'; + +const Cluster: React.FC = () => { + const intl = useIntl(); + + return ( + + {intl.formatMessage({ id: 'menu.clusterManagement.clusters' })} + + ); +}; + +export default Cluster; diff --git a/src/pages/cluster-management/credentials.tsx b/src/pages/cluster-management/credentials.tsx new file mode 100644 index 00000000..ca59c65c --- /dev/null +++ b/src/pages/cluster-management/credentials.tsx @@ -0,0 +1,24 @@ +import { PageContainer } from '@ant-design/pro-components'; +import { useIntl } from '@umijs/max'; +import React from 'react'; + +const Credential: React.FC = () => { + const intl = useIntl(); + return ( + + {intl.formatMessage({ id: 'menu.clusterManagement.credentials' })} + + ); +}; + +export default Credential; diff --git a/src/pages/llmodels/user-models.tsx b/src/pages/llmodels/user-models.tsx new file mode 100644 index 00000000..a009ef51 --- /dev/null +++ b/src/pages/llmodels/user-models.tsx @@ -0,0 +1,24 @@ +import { PageContainer } from '@ant-design/pro-components'; +import { useIntl } from '@umijs/max'; +import React from 'react'; + +const UserModels: React.FC = () => { + const intl = useIntl(); + return ( + + {intl.formatMessage({ id: 'menu.models.userModels' })} + + ); +}; + +export default UserModels;