diff --git a/react-ui/config/config.ts b/react-ui/config/config.ts index d0b27bd1..4ac775d9 100644 --- a/react-ui/config/config.ts +++ b/react-ui/config/config.ts @@ -6,8 +6,6 @@ import routes from './routes'; const { REACT_APP_ENV = 'dev' } = process.env; -const huoshiBaseUrl = 'https://192.168.20.156:30016'; - export default defineConfig({ /** * @name 开启 hash 模式 @@ -179,28 +177,22 @@ export default defineConfig({ apps: process.env.UMI_APP_HUO_SHI ? [ { - name: 'flint-data', // 数据服务微应用 + name: 'flint', // 数据服务微应用 + // entry: 'http://localhost:8083', // 开发环境地址 + entry: '/flint', // 生产环境地址 + activeRule: '/flint', // 激活规则 + }, + { + name: 'trainfer', // 服务管理 // entry: 'http://localhost:8081', // 开发环境地址 - entry: `${huoshiBaseUrl}/flint-data/`, // 生产环境地址 - activeRule: '/flint-data', // 激活规则 + entry: '/trainfer', // 生产环境地址 + activeRule: '/trainfer', // 激活规则 }, { - name: 'flint-bml', // 训练模块微应用 - // entry: 'http://localhost:8082', - entry: `${huoshiBaseUrl}/flint-bml/`, - activeRule: '/pipeline/flint-bml', - }, - { - name: 'flint-console', // 集群管理 - // entry: 'http://localhost:8083', - entry: `${huoshiBaseUrl}/flint-console/`, - activeRule: '/dataset/flint-console', - }, - { - name: 'flint-service', // 服务模块微应用 - // entry: 'http://localhost:8085', - entry: `${huoshiBaseUrl}/flint-service/`, - activeRule: '/dataset/flint-service', + name: 'portal', // 服务管理 + // entry: 'http://localhost:8082', // 开发环境地址 + entry: '/portal', // 生产环境地址 + activeRule: '/portal', // 激活规则 }, ] : [], diff --git a/react-ui/config/proxy.ts b/react-ui/config/proxy.ts index 8f793831..795a034e 100644 --- a/react-ui/config/proxy.ts +++ b/react-ui/config/proxy.ts @@ -18,6 +18,12 @@ export default { // 如果需要自定义本地开发服务器 请取消注释按需调整 dev: { // localhost:8000/api/** -> https://preview.pro.ant.design/api/** + '/proxyApi/': { + target: 'https://172.29.246.110:30016', + changeOrigin: true, + secure: false, + // target: 'http://172.31.164.103:30009/', + }, '/api/': { // 要代理的地址 target: 'http://172.20.32.121:31213/', // 开发环境 @@ -60,7 +66,7 @@ export default { }, '/huoshiProxyApi/': { // target: 'http:///218.77.58.19:31213', // 公网环境 - target: 'http://218.77.58.19:30009/', // 火石环境 + target: 'https://172.29.246.110:30016', // 火石环境 changeOrigin: true, pathRewrite: { '^/huoshiProxyApi': '' }, secure: false, @@ -75,10 +81,7 @@ export default { // target: 'http://172.31.164.103:30009/', changeOrigin: true, }, - '/proxyApi/': { - target: 'http://192.168.60.11:30009/', - // target: 'http://172.31.164.103:30009/', - }, + }, /** diff --git a/react-ui/config/routes.ts b/react-ui/config/routes.ts index 15d4201c..46e8682a 100644 --- a/react-ui/config/routes.ts +++ b/react-ui/config/routes.ts @@ -775,237 +775,255 @@ export default [ }, ...(process.env.UMI_APP_HUO_SHI ? [ + { + path: '/flint/*', + name: '数据管理', + microApp: 'flint', + layout: true, + }, + { + path: '/trainfer/*', + name: '火石服务', + microApp: 'trainfer', + layout: true, + }, + { + path: '/portal/*', + name: '火石服务', + microApp: 'portal', + layout: true, + }, // 数据标注页面 - 使用自定义组件包装微应用 - { - path: '/flint-data/mark/list', - name: '数据标注', - component: './DatasetPreparation/mark/index', - layout: true, - }, - // 数据服务子路径 - 直接路由到微应用(排除 mark/list) - { - path: '/flint-data/*', - name: '数据服务', - microApp: 'flint-data', - layout: true, - }, - { - path: '/training/flint-bml/*', - name: '训练模块', - microApp: 'flint-bml', - layout: true, - }, - { - path: '/flint-console/*', - name: '集群管理', - microApp: 'flint-console', - layout: true, - }, - { - path: '/dataset/flint-service/*', - name: '服务模块', - microApp: 'flint-service', - layout: true, - }, - { - path: '/training', - name: '模型训练', - routes: [ - { - name: '小模型训练', - path: 'pipeline', - routes: [ - { - path: '', - redirect: 'template', - }, - { - name: '流水线模板', - path: 'template', - routes: [ - { - name: '流水线模板', - path: '', - component: './Pipeline/index', - }, - { - name: '流水线详情', - path: 'info/:id', - component: './Pipeline/Info/index', - }, - ], - }, - { - name: '实验', - path: 'experiment', - routes: [ - { - name: '实验', - path: '', - component: './Experiment/index', - }, - { - name: '实验实例', - path: 'instance/:workflowId/:id', - component: './Experiment/Info/index', - }, - { - name: '实验对比', - path: 'compare', - routes: [ - { - name: '实验对比', - path: '', - component: './Experiment/Comparison/index', - }, - { - name: '可视化对比', - path: 'compare-visual', - component: './Experiment/Aim/index', - }, - ], - }, - { - name: '可视化', - path: 'visual', - component: './Experiment/Tensorboard/index', - }, - ], - }, - { - name: '自动机器学习', - path: 'automl', - routes: [ - { - name: '自动机器学习', - path: '', - component: './AutoML/List/index', - }, - { - name: '实验详情', - path: 'info/:id', - component: './AutoML/Info/index', - }, - { - name: '创建实验', - path: 'create', - component: './AutoML/Create/index', - }, - { - name: '编辑实验', - path: 'edit/:id', - component: './AutoML/Create/index', - }, - { - name: '复制实验', - path: 'copy/:id', - component: './AutoML/Create/index', - }, - { - name: '实验实例详情', - path: 'instance/:experimentId/:id', - component: './AutoML/Instance/index', - }, - ], - }, - { - name: '超参数自动寻优', - path: 'hyperparameter', - routes: [ - { - name: '超参数寻优', - path: '', - component: './HyperParameter/List/index', - }, - { - name: '实验详情', - path: 'info/:id', - component: './HyperParameter/Info/index', - }, - { - name: '创建实验', - path: 'create', - component: './HyperParameter/Create/index', - }, - { - name: '编辑实验', - path: 'edit/:id', - component: './HyperParameter/Create/index', - }, - { - name: '复制实验', - path: 'copy/:id', - component: './HyperParameter/Create/index', - }, - { - name: '实验实例详情', - path: 'instance/:experimentId/:id', - routes: [ - { - name: '实验实例详情', - path: '', - component: './HyperParameter/Instance/index', - }, - { - name: '可视化对比', - path: 'compare-visual', - component: './Experiment/Aim/index', - }, - ], - }, - ], - }, - { - name: '主动学习', - path: 'active-learn', - routes: [ - { - name: '主动学习', - path: '', - component: './ActiveLearn/List/index', - }, - { - name: '实验详情', - path: 'info/:id', - component: './ActiveLearn/Info/index', - }, - { - name: '创建实验', - path: 'create', - component: './ActiveLearn/Create/index', - }, - { - name: '编辑实验', - path: 'edit/:id', - component: './ActiveLearn/Create/index', - }, - { - name: '复制实验', - path: 'copy/:id', - component: './ActiveLearn/Create/index', - }, - { - name: '实验实例详情', - path: 'instance/:experimentId/:id', - routes: [ - { - name: '实验实例详情', - path: '', - component: './ActiveLearn/Instance/index', - }, - { - name: '数据标注', - path: 'label', - component: './ActiveLearn/Label/index', - }, - ], - }, - ], - }, - ], - }, - ], - }, + // { + // path: '/flint-data/mark/list', + // name: '数据标注', + // component: './DatasetPreparation/mark/index', + // layout: true, + // }, + // // 数据服务子路径 - 直接路由到微应用(排除 mark/list) + // { + // path: '/flint-data/*', + // name: '数据服务', + // microApp: 'flint-data', + // layout: true, + // }, + // { + // path: '/training/flint-bml/*', + // name: '训练模块', + // microApp: 'flint-bml', + // layout: true, + // }, + // { + // path: '/flint-console/*', + // name: '集群管理', + // microApp: 'flint-console', + // layout: true, + // }, + // { + // path: '/dataset/flint-service/*', + // name: '服务模块', + // microApp: 'flint-service', + // layout: true, + // }, + // { + // path: '/training', + // name: '模型训练', + // routes: [ + // { + // name: '小模型训练', + // path: 'pipeline', + // routes: [ + // { + // path: '', + // redirect: 'template', + // }, + // { + // name: '流水线模板', + // path: 'template', + // routes: [ + // { + // name: '流水线模板', + // path: '', + // component: './Pipeline/index', + // }, + // { + // name: '流水线详情', + // path: 'info/:id', + // component: './Pipeline/Info/index', + // }, + // ], + // }, + // { + // name: '实验', + // path: 'experiment', + // routes: [ + // { + // name: '实验', + // path: '', + // component: './Experiment/index', + // }, + // { + // name: '实验实例', + // path: 'instance/:workflowId/:id', + // component: './Experiment/Info/index', + // }, + // { + // name: '实验对比', + // path: 'compare', + // routes: [ + // { + // name: '实验对比', + // path: '', + // component: './Experiment/Comparison/index', + // }, + // { + // name: '可视化对比', + // path: 'compare-visual', + // component: './Experiment/Aim/index', + // }, + // ], + // }, + // { + // name: '可视化', + // path: 'visual', + // component: './Experiment/Tensorboard/index', + // }, + // ], + // }, + // { + // name: '自动机器学习', + // path: 'automl', + // routes: [ + // { + // name: '自动机器学习', + // path: '', + // component: './AutoML/List/index', + // }, + // { + // name: '实验详情', + // path: 'info/:id', + // component: './AutoML/Info/index', + // }, + // { + // name: '创建实验', + // path: 'create', + // component: './AutoML/Create/index', + // }, + // { + // name: '编辑实验', + // path: 'edit/:id', + // component: './AutoML/Create/index', + // }, + // { + // name: '复制实验', + // path: 'copy/:id', + // component: './AutoML/Create/index', + // }, + // { + // name: '实验实例详情', + // path: 'instance/:experimentId/:id', + // component: './AutoML/Instance/index', + // }, + // ], + // }, + // { + // name: '超参数自动寻优', + // path: 'hyperparameter', + // routes: [ + // { + // name: '超参数寻优', + // path: '', + // component: './HyperParameter/List/index', + // }, + // { + // name: '实验详情', + // path: 'info/:id', + // component: './HyperParameter/Info/index', + // }, + // { + // name: '创建实验', + // path: 'create', + // component: './HyperParameter/Create/index', + // }, + // { + // name: '编辑实验', + // path: 'edit/:id', + // component: './HyperParameter/Create/index', + // }, + // { + // name: '复制实验', + // path: 'copy/:id', + // component: './HyperParameter/Create/index', + // }, + // { + // name: '实验实例详情', + // path: 'instance/:experimentId/:id', + // routes: [ + // { + // name: '实验实例详情', + // path: '', + // component: './HyperParameter/Instance/index', + // }, + // { + // name: '可视化对比', + // path: 'compare-visual', + // component: './Experiment/Aim/index', + // }, + // ], + // }, + // ], + // }, + // { + // name: '主动学习', + // path: 'active-learn', + // routes: [ + // { + // name: '主动学习', + // path: '', + // component: './ActiveLearn/List/index', + // }, + // { + // name: '实验详情', + // path: 'info/:id', + // component: './ActiveLearn/Info/index', + // }, + // { + // name: '创建实验', + // path: 'create', + // component: './ActiveLearn/Create/index', + // }, + // { + // name: '编辑实验', + // path: 'edit/:id', + // component: './ActiveLearn/Create/index', + // }, + // { + // name: '复制实验', + // path: 'copy/:id', + // component: './ActiveLearn/Create/index', + // }, + // { + // name: '实验实例详情', + // path: 'instance/:experimentId/:id', + // routes: [ + // { + // name: '实验实例详情', + // path: '', + // component: './ActiveLearn/Instance/index', + // }, + // { + // name: '数据标注', + // path: 'label', + // component: './ActiveLearn/Label/index', + // }, + // ], + // }, + // ], + // }, + // ], + // }, + // ], + // }, ] : []), { diff --git a/react-ui/package.json b/react-ui/package.json index 9affe214..68bc89bd 100644 --- a/react-ui/package.json +++ b/react-ui/package.json @@ -9,8 +9,8 @@ "build-with-huoshi": "cross-env UMI_APP_HUO_SHI=true max build", "deploy": "npm run build && npm run gh-pages", "dev": "npm run start:dev", - "dev-no-sso": "cross-env NO_SSO=true npm run start:mock", - "dev-with-huoshi": "cross-env NO_SSO=true UMI_APP_HUO_SHI=true npm run start:mock", + "dev-no-sso": "cross-env NO_SSO=true npm run start:dev", + "dev-with-huoshi": "cross-env NO_SSO=true UMI_APP_HUO_SHI=true npm run start:dev", "docker-hub:build": "docker build -f Dockerfile.hub -t ant-design-pro ./", "docker-prod:build": "docker-compose -f ./docker/docker-compose.yml build", "docker-prod:dev": "docker-compose -f ./docker/docker-compose.yml up", @@ -50,7 +50,7 @@ "test:coverage": "npm run jest -- --coverage", "test:update": "npm run jest -- -u", "tsc": "tsc --noEmit", - "git-merge": "node ./scripts/git-merge.js" + "pr": "node ./scripts/git-merge.js" }, "lint-staged": { "**/*.{js,jsx,ts,tsx}": "npm run lint-staged:js", diff --git a/react-ui/src/app.tsx b/react-ui/src/app.tsx index c82321c9..5b96c542 100644 --- a/react-ui/src/app.tsx +++ b/react-ui/src/app.tsx @@ -28,6 +28,7 @@ import { addAlpha } from './utils/color'; import { HomeUrl } from './utils/constant'; import { closeAllModals } from './utils/modal'; import { gotoHomePage } from './utils/ui'; +import '@/huoshi.less' export { requestConfig as request } from './requestConfig'; /** diff --git a/react-ui/src/components/ResourceSelectorModal/config.tsx b/react-ui/src/components/ResourceSelectorModal/config.tsx index aea33419..34e0d69f 100644 --- a/react-ui/src/components/ResourceSelectorModal/config.tsx +++ b/react-ui/src/components/ResourceSelectorModal/config.tsx @@ -54,7 +54,7 @@ const convertResourceVersionToTreeData = ( list: ResourceVersionData[], ): TreeDataNode[] => { return list.map((item: ResourceVersionData) => ({ - ...pick(info, ['id', 'name', 'owner', 'identifier', 'is_public']), + ...pick(info, ['id', 'name', 'owner', 'identifier', 'is_public', 'git_id']), key: `${parentId}-${item.name}`, title: item.name, version: item.name, @@ -130,7 +130,15 @@ export class DatasetSelector implements SelectorTypeInfo { } async getFiles(_parentKey: string, parentNode: ResourceData & ResourceVersionData) { - const params = pick(parentNode, ['owner', 'identifier', 'id', 'name', 'version', 'is_public']); + const params = pick(parentNode, [ + 'owner', + 'identifier', + 'id', + 'name', + 'version', + 'is_public', + 'git_id', + ]); const res = await getDatasetInfo(params); if (res && res.data) { const dataset = res.data as DatasetData; @@ -192,7 +200,15 @@ export class ModelSelector implements SelectorTypeInfo { } async getFiles(_parentKey: string, parentNode: ResourceData & ResourceVersionData) { - const params = pick(parentNode, ['owner', 'identifier', 'id', 'name', 'version', 'is_public']); + const params = pick(parentNode, [ + 'owner', + 'identifier', + 'id', + 'name', + 'version', + 'is_public', + 'git_id', + ]); const res = await getModelInfo(params); if (res && res.data) { const model = res.data as ModelData; diff --git a/react-ui/src/components/ResourceSelectorModal/index.tsx b/react-ui/src/components/ResourceSelectorModal/index.tsx index b16bf71f..e17422e9 100644 --- a/react-ui/src/components/ResourceSelectorModal/index.tsx +++ b/react-ui/src/components/ResourceSelectorModal/index.tsx @@ -22,6 +22,7 @@ export { ResourceSelectorType, selectorTypeConfig }; export type ResourceSelectorResponse = { activeTab: CommonTabKeys; // 是我的还是公开的 id: string; // 数据集\模型 id + git_id: number; // 数据集\模型 git id name: string; // 数据集\模型 name identifier: string; // 数据集\模型 identifier owner: string; // 数据集\模型 owner @@ -243,6 +244,7 @@ function ResourceSelectorModal({ const name = (treeNode?.title ?? '') as string; const identifier = (treeNode?.identifier ?? '') as string; const owner = (treeNode?.owner ?? '') as string; + const gitId = (treeNode?.git_id ?? '') as number; const childNode = treeNode.children.filter((v: TreeDataNode) => v.key === last)[0]; const res = type === ResourceSelectorType.Mirror @@ -258,6 +260,7 @@ function ResourceSelectorModal({ version, identifier, owner, + git_id: gitId, }; onOk?.(res); } else { diff --git a/react-ui/src/components/UploadBlock/index.less b/react-ui/src/components/UploadBlock/index.less index 2f800bac..7ab5e205 100644 --- a/react-ui/src/components/UploadBlock/index.less +++ b/react-ui/src/components/UploadBlock/index.less @@ -8,6 +8,10 @@ border: 1px dashed rgba(81, 76, 249, 0.5); border-radius: 6px; + &--error { + border: 1px dashed @error-color !important; + } + &__img { width: 24px; } diff --git a/react-ui/src/components/UploadBlock/index.tsx b/react-ui/src/components/UploadBlock/index.tsx index 839d517a..124fe504 100644 --- a/react-ui/src/components/UploadBlock/index.tsx +++ b/react-ui/src/components/UploadBlock/index.tsx @@ -4,6 +4,7 @@ * @Description: 上传组件的提示信息 */ +import { Form } from 'antd'; import classNames from 'classnames'; import './index.less'; @@ -22,8 +23,18 @@ type UploadBlockProps = { * 上传组件的提示信息 */ function UploadBlock({ desc, image, className, style }: UploadBlockProps) { + const { status } = Form.Item.useStatus(); return ( -
+
.handle-span { + padding: 0 8px; + font-size: 12px; + color: var(--el-color-primary); + cursor: pointer; + &.is-disabled { + color: var(--el-color-primary-light-5); + } + } + & > .el-dropdown { + font-size: 12px; + } + } + } + } + } + } + .el-pagination.is-background { + position: relative; + justify-content: flex-end; + .el-pager { + li { + &.is-active { + background-color: var(--el-color-primary) !important; + } + } + } + } + +} + +// 解决el-tabs__headers排列在l-tabs__content下面的问题 +.el-tabs { + &.el-tabs--top { + flex-direction: column !important; + } + .el-tabs__header { + order: 1; + } + .el-tabs__content { + order: 2; + } +} + + +// 覆盖aicc-theme样式 +.aicc-theme .el-checkbox__inner::after { + left: 0 !important; + right: 0 !important; + margin: auto !important; +} + +.aicc-theme .el-radio__inner::after { + width: 6px !important; + height: 6px !important; +} + +.qiankun-micro-app-container{ + padding: 70px 24px 24px; +} \ No newline at end of file diff --git a/react-ui/src/pages/Application/Execute/index.tsx b/react-ui/src/pages/Application/Execute/index.tsx index e524ad10..07c539f7 100644 --- a/react-ui/src/pages/Application/Execute/index.tsx +++ b/react-ui/src/pages/Application/Execute/index.tsx @@ -130,6 +130,7 @@ function AppExecute() { const [searchParams] = useSearchParams(); const isView = searchParams.get('from') === 'view'; // 查看任务详情 const taskId = searchParams.get('id'); // 任务详情 + const source = searchParams.get('source'); // 来源 const [inputParameters, setInputParameters] = useState>(); const [taskName, setTaskName] = useState(); const [activeTab, setActiveTab] = useState(TaskTabKey.Result); diff --git a/react-ui/src/pages/Application/Info/components/PublishModal/index.tsx b/react-ui/src/pages/Application/Info/components/PublishModal/index.tsx index 13372a81..7bea7e30 100644 --- a/react-ui/src/pages/Application/Info/components/PublishModal/index.tsx +++ b/react-ui/src/pages/Application/Info/components/PublishModal/index.tsx @@ -1,20 +1,21 @@ import KFDefaultEmpty from '@/components/KFDefaultEmpty'; import KFModal from '@/components/KFModal'; import { ServiceRunStatus } from '@/enums'; +import { ApplicationSource, ServiceVersionData } from '@/pages/Application/types'; import { getServiceVersionsReq } from '@/services/modelDeployment'; import { to } from '@/utils/promise'; import { Flex, type ModalProps } from 'antd'; import classNames from 'classnames'; import { useCallback, useEffect, useState } from 'react'; -import { ServiceVersionData } from '../../../types'; import styles from './index.less'; interface PublishModalProps extends Omit { serviceId: number; + serviceSource: ApplicationSource; // 应用来源 onOk?: (id: number) => void; } -function PublishModal({ serviceId, onOk, ...rest }: PublishModalProps) { +function PublishModal({ serviceId, serviceSource, onOk, ...rest }: PublishModalProps) { const [versions, setVersions] = useState([]); const [selectedVersion, setSelectedVersion] = useState(); @@ -24,13 +25,14 @@ function PublishModal({ serviceId, onOk, ...rest }: PublishModalProps) { size: 100, run_state: ServiceRunStatus.Running, service_id: serviceId, + source: serviceSource, }; const [res] = await to(getServiceVersionsReq(params)); if (res && res.data) { const { content = [] } = res.data; setVersions(content); } - }, [serviceId]); + }, [serviceId, serviceSource]); useEffect(() => { getVersions(); diff --git a/react-ui/src/pages/Application/Info/components/TaskList/index.tsx b/react-ui/src/pages/Application/Info/components/TaskList/index.tsx index 3f2e69f9..7918aa87 100644 --- a/react-ui/src/pages/Application/Info/components/TaskList/index.tsx +++ b/react-ui/src/pages/Application/Info/components/TaskList/index.tsx @@ -6,7 +6,7 @@ import KFIcon from '@/components/KFIcon'; import { AppRunStatus, appStatusOptions } from '@/enums'; -import { ServiceTaskData } from '@/pages/Application/types'; +import { ApplicationSource, ServiceTaskData } from '@/pages/Application/types'; import { deleteTaskInfoReq, getTaskListReq } from '@/services/modelDeployment'; import { elapsedTime } from '@/utils/date'; import { to } from '@/utils/promise'; @@ -33,10 +33,11 @@ const allServiceStatusOptions = [{ label: '全部', value: '' }, ...appStatusOpt type VersionListProps = { isMine: boolean; serviceId: number; + serviceSource: ApplicationSource; // 应用来源 onNavigate: (url: string) => void; }; -function VersionList({ isMine, serviceId, onNavigate }: VersionListProps) { +function VersionList({ isMine, serviceId, serviceSource, onNavigate }: VersionListProps) { const { message } = App.useApp(); const [searchstatus, setSearchStatus] = useState(); // 查询状态 const [searchTaskName, setSearchTaskName] = useState(); // 查询版本 @@ -56,6 +57,7 @@ function VersionList({ isMine, serviceId, onNavigate }: VersionListProps) { task_name: searchTaskName || undefined, status: searchstatus || undefined, service_id: serviceId, + source: serviceSource, }; const [res] = await to(getTaskListReq(params)); if (res && res.data) { @@ -63,7 +65,7 @@ function VersionList({ isMine, serviceId, onNavigate }: VersionListProps) { setTableData(content); setTotal(totalElements); } - }, [pagination, searchstatus, searchTaskName, serviceId]); + }, [pagination, searchstatus, searchTaskName, serviceId, serviceSource]); useEffect(() => { getTaskList(); @@ -119,9 +121,11 @@ function VersionList({ isMine, serviceId, onNavigate }: VersionListProps) { }); }; - // 查看详情 + // 查看任务详情 const toDetail = (record: ServiceTaskData) => { - onNavigate(`execute/${record.service_version_id}?id=${record.id}&from=view`); + onNavigate( + `execute/${record.service_version_id}?source=${serviceSource}id=${record.id}&from=view`, + ); }; // 分页切换 diff --git a/react-ui/src/pages/Application/Info/components/VersionList/index.tsx b/react-ui/src/pages/Application/Info/components/VersionList/index.tsx index 59dffa8f..ccfc13fe 100644 --- a/react-ui/src/pages/Application/Info/components/VersionList/index.tsx +++ b/react-ui/src/pages/Application/Info/components/VersionList/index.tsx @@ -121,6 +121,7 @@ function VersionList({ version: searchVersion || undefined, run_state: searchStatus || undefined, service_id: serviceId, + source: serviceSource, }; const [res] = await to(getServiceVersionsReq(params)); if (res && res.data) { @@ -133,7 +134,7 @@ function VersionList({ setTableData(content); setTotal(totalElements); } - }, [pagination, searchStatus, searchVersion, serviceId]); + }, [pagination, searchStatus, searchVersion, serviceId, serviceSource]); useEffect(() => { getServiceVersions(); @@ -141,7 +142,7 @@ function VersionList({ // 删除模型部署 const deleteServiceVersion = async (record: ServiceVersionData) => { - const [res] = await to(deleteServiceVersionReq(record.id)); + const [res] = await to(deleteServiceVersionReq(serviceSource, record.id)); if (res) { message.success('删除成功'); // 如果是一页的唯一数据,删除后,请求第一页的数据 @@ -157,7 +158,7 @@ function VersionList({ // 停止模型部署 const stopServiceVersion = async (record: ServiceVersionData) => { - const [res] = await to(stopServiceVersionReq(record.id)); + const [res] = await to(stopServiceVersionReq(serviceSource, record.id)); if (res) { message.success('操作成功'); getServiceVersions(); @@ -229,12 +230,12 @@ function VersionList({ // 查看详情 const toDetail = (record: ServiceVersionData) => { - onNavigate(`versionInfo/${record.id}`); + onNavigate(`versionInfo/${record.id}?source=${serviceSource}`); }; // 测试运行 const toRun = (record: ServiceVersionData) => { - onNavigate(`execute/${record.id}`); + onNavigate(`execute/${record.id}?source=${serviceSource}`); }; // 分页切换 @@ -259,6 +260,7 @@ function VersionList({ openAntdModal(VersionCompareModal, { version1: selectedRowKeys[0] as string, version2: selectedRowKeys[1] as string, + serviceSource: serviceSource, }); }; @@ -273,7 +275,7 @@ function VersionList({ }, }; - // 去模型 + // 去模型页 const gotoModel = (record: ServiceVersionData, e: React.MouseEvent) => { e.stopPropagation(); @@ -448,7 +450,7 @@ function VersionList({ dataIndex: 'template', key: 'template', width: '20%', - render: tableCellRender(true), + render: () =>
{}
, }, { title: '应用描述', diff --git a/react-ui/src/pages/Application/Info/index.tsx b/react-ui/src/pages/Application/Info/index.tsx index 23d5d2f1..480db3a1 100644 --- a/react-ui/src/pages/Application/Info/index.tsx +++ b/react-ui/src/pages/Application/Info/index.tsx @@ -7,7 +7,7 @@ import KFIcon from '@/components/KFIcon'; import KFMdEditor from '@/components/KFMdEditor'; import { useCacheState } from '@/hooks/useCacheState'; -import { ApplicationSource, appSourceOptions } from '@/pages/Application/types'; +import { ApplicationSource, appSourceOptions, ServiceData } from '@/pages/Application/types'; import { cancelFavoriteServiceReq, deleteServiceReq, @@ -161,6 +161,7 @@ function AppInfo() { if (is_public) { const { close } = openAntdModal(PublishModal, { serviceId: serviceId, + serviceSource: serviceInfo!.source, onOk: (publishVersion) => { close(); updateService({ diff --git a/react-ui/src/pages/Application/VersionInfo/index.tsx b/react-ui/src/pages/Application/VersionInfo/index.tsx index 448e2a97..d814eb7d 100644 --- a/react-ui/src/pages/Application/VersionInfo/index.tsx +++ b/react-ui/src/pages/Application/VersionInfo/index.tsx @@ -6,7 +6,7 @@ import VersionBasicInfo from '@/pages/Application/components/VersionBasicInfo'; import { getServiceVersionInfoReq } from '@/services/modelDeployment'; import { to } from '@/utils/promise'; -import { useParams } from '@umijs/max'; +import { useParams, useSearchParams } from '@umijs/max'; import { useEffect, useState } from 'react'; import { ServiceVersionData } from '../types'; import styles from './index.less'; @@ -15,11 +15,13 @@ function ServiceVersionInfo() { const [versionInfo, setVersionInfo] = useState(undefined); const params = useParams(); const id = params.versionId; + const [searchParams] = useSearchParams(); + const source = searchParams.get('source'); useEffect(() => { // 获取服务版本详情 const getServiceVersionInfo = async () => { - const [res] = await to(getServiceVersionInfoReq(id)); + const [res] = await to(getServiceVersionInfoReq(Number(source), id!)); if (res && res.data) { setVersionInfo(res.data); } @@ -28,7 +30,7 @@ function ServiceVersionInfo() { if (id) { getServiceVersionInfo(); } - }, [id]); + }, [id, source]); return (
diff --git a/react-ui/src/pages/Application/components/CreateAppModal/index.tsx b/react-ui/src/pages/Application/components/CreateAppModal/index.tsx index 13fd38d1..fbd587d9 100644 --- a/react-ui/src/pages/Application/components/CreateAppModal/index.tsx +++ b/react-ui/src/pages/Application/components/CreateAppModal/index.tsx @@ -209,7 +209,7 @@ function CreateAppModal({ serviceId, onOk, ...rest }: CreateAppModalModalProps) source === ApplicationSource.SuperCompute && ( { if (versionInfo) { - let model, envVariables; - // 模型 - if (versionInfo.model && typeof versionInfo.model === 'object') { - model = changePropertyName(versionInfo.model, { show_value: 'showValue' }); - // 接口返回是数据没有 value 值,但是 form 需要 value - // model.value = model.showValue; - } + let envVariables; // 环境变量 if (versionInfo.env_variables && typeof versionInfo.env_variables === 'object') { envVariables = Object.entries(versionInfo.env_variables).map(([key, value]) => ({ @@ -81,8 +74,7 @@ function CreateAppVersionModal({ })); } const formData = { - ...omit(versionInfo, 'model', 'env_variables'), - model: model, + ...omit(versionInfo, 'env_variables'), env_variables: envVariables, service_name: serviceName, }; @@ -101,9 +93,13 @@ function CreateAppVersionModal({ // 根据后台要求,修改表单数据 const object = { ...omit(formData, ['replicas', 'env_variables']), - replicas: Number(formData.replicas), + replicas: + formData.replicas !== undefined && formData.replicas !== null + ? Number(formData.replicas) + : undefined, env_variables: envVariables, service_id: serviceId, + source: serviceSource, }; const params = diff --git a/react-ui/src/pages/Application/components/VersionCompareModal/index.tsx b/react-ui/src/pages/Application/components/VersionCompareModal/index.tsx index 09615048..21389d9b 100644 --- a/react-ui/src/pages/Application/components/VersionCompareModal/index.tsx +++ b/react-ui/src/pages/Application/components/VersionCompareModal/index.tsx @@ -1,7 +1,7 @@ import KFModal from '@/components/KFModal'; import { ServiceRunStatus } from '@/enums'; import { useSystemResource } from '@/hooks/useComputingResource'; -import { type ServiceVersionData } from '@/pages/Application/types'; +import { ApplicationSource, type ServiceVersionData } from '@/pages/Application/types'; import { getServiceVersionCompareReq } from '@/services/modelDeployment'; import { isEmpty } from '@/utils'; import { to } from '@/utils/promise'; @@ -28,6 +28,7 @@ type FiledType = { interface VersionCompareModalProps extends Omit { version1: string; version2: string; + serviceSource: ApplicationSource; // 应用来源 } // 格式化环境变量 @@ -40,7 +41,12 @@ const formatEnvText = (env: Record) => { .join(','); }; -function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModalProps) { +function VersionCompareModal({ + version1, + version2, + serviceSource, + ...rest +}: VersionCompareModalProps) { const [compareData, setCompareData] = useState(undefined); const getResourceDescription = useSystemResource(); @@ -61,21 +67,21 @@ function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModa key: 'image', text: '镜像', format: (data: any) => { - return data?.path; - }, - }, - { - key: 'code_config', - text: '代码配置', - format: (data: any) => { - return data?.show_value; + return data?.showValue; }, }, + // { + // key: 'code_config', + // text: '代码配置', + // format: (data: any) => { + // return data?.showValue; + // }, + // }, { key: 'model', text: '模型', format: (data: any) => { - return data?.show_value; + return data?.showValue; }, }, { @@ -114,6 +120,7 @@ function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModa const params = { id1: version1, id2: version2, + source: serviceSource, }; const [res] = await to(getServiceVersionCompareReq(params)); if (res && res.data) { @@ -122,7 +129,7 @@ function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModa }; getServiceVersionCompare(); - }, [version1, version2]); + }, [version1, version2, serviceSource]); const { version1: v1 = {} as ServiceVersionData, diff --git a/react-ui/src/pages/Application/types.ts b/react-ui/src/pages/Application/types.ts index 2542557e..6760fca3 100644 --- a/react-ui/src/pages/Application/types.ts +++ b/react-ui/src/pages/Application/types.ts @@ -21,7 +21,7 @@ export type ServiceData = { public_version_id?: number; // 发布的版本id tag?: string; comment_count: number; - source?: ApplicationSource; // 来源 + source: ApplicationSource; // 来源 }; // 服务版本数据类型 diff --git a/react-ui/src/pages/Application/useSourceContext.tsx b/react-ui/src/pages/Application/useSourceContext.tsx new file mode 100644 index 00000000..c58e62cd --- /dev/null +++ b/react-ui/src/pages/Application/useSourceContext.tsx @@ -0,0 +1,46 @@ +// src/contexts/SourceContext.tsx +import { createContext, ReactNode, useContext, useState } from 'react'; +import { ApplicationSource } from './types'; + +// 1. 定义 Context 值的类型 +interface SourceContextType { + source: T | null; + setSource: (value: T | null) => void; +} + +// 2. 创建 Context,指定默认值为 undefined(更好的类型安全) +const SourceContext = createContext(undefined); + +// 3. 定义 Provider 组件的 Props 类型 +interface SourceProviderProps { + children: ReactNode; + initialValue?: T | null; +} + +// 4. 创建泛型 Provider 组件 +export function SourceProvider({ children, initialValue = null }: SourceProviderProps) { + const [source, setSource] = useState(initialValue as T | null); + + // 优化性能 + const contextValue = { + source, + setSource, + }; + + return {children}; +} + +// 5. 创建自定义 Hook(支持泛型) +export function useSourceContext(): SourceContextType { + const context = useContext(SourceContext); + + if (context === undefined) { + throw new Error('useSourceContext must be used within a SourceProvider'); + } + + return context as SourceContextType; +} + +export function useTypedSourceContext() { + return useSourceContext(); +} diff --git a/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx b/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx index b3cc7fe8..6785ca92 100644 --- a/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx +++ b/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx @@ -3,7 +3,7 @@ import KFModal from '@/components/KFModal'; import { ModelType } from '@/enums'; import { useTags } from '@/hooks/useTags'; import { CategoryData, DataSource, UniResourceData } from '@/pages/Dataset/config'; -import { createBigDatasetReq, getBigDatasetAllLabelReq } from '@/services/bigModel'; +import { getBigDatasetAllLabelReq } from '@/services/bigModel'; import { addDataset, editDatasetReq, getAssetIcon } from '@/services/dataset/index.js'; import { to } from '@/utils/promise'; import { @@ -22,7 +22,7 @@ import styles from './index.less'; interface FormData { name: string; type: ModelType; - labelId?: string; + label_id?: string; data_type: string[]; data_tag: string[]; preview_url: string; @@ -86,6 +86,13 @@ function AddDatasetModal({ info, onOk, ...rest }: AddDatasetModalProps) { const [res] = await to(getBigDatasetAllLabelReq()); if (res && res.data) { setSceneOptions(res.data); + } else { + setSceneOptions([ + { + id: 1, + name: 'test', + }, + ]); } }; @@ -95,29 +102,19 @@ function AddDatasetModal({ info, onOk, ...rest }: AddDatasetModalProps) { const isBigDataset = type === ModelType.Big; const data_type = dataTypes?.join(','); const data_tag = dataTags?.join(','); - const reqParams = isBigDataset - ? { - name: rest.name, - description: rest.description, - previewUrl: rest.preview_url, - labelId: rest.labelId, - dataType: data_type, - dataTag: data_tag, - source: DataSource.Create, - public: false, - } - : { - ...rest, - dataset_source: DataSource.Create, - data_type, - data_tag, - is_public: false, - }; + const reqParams = { + ...rest, + dataset_source: DataSource.Create, + data_type, + data_tag, + is_public: false, + is_hot_stone: isBigDataset, + }; const reqBody = info - ? { ...info, ...omit(reqParams, ['dataset_source', 'is_public', 'source', 'public']) } + ? { ...info, ...omit(reqParams, ['dataset_source', 'is_public', 'is_hot_stone']) } : reqParams; - const request = isBigDataset ? createBigDatasetReq : info ? editDatasetReq : addDataset; + const request = info ? editDatasetReq : addDataset; const [res] = await to(request(reqBody)); if (res) { onOk?.(isBigDataset, res.data); @@ -193,7 +190,7 @@ function AddDatasetModal({ info, onOk, ...rest }: AddDatasetModalProps) { return ( + + + + {({ getFieldValue }) => { const type = getFieldValue('type'); @@ -294,21 +304,7 @@ function AddDatasetModal({ info, onOk, ...rest }: AddDatasetModalProps) { allowClear /> - ) : ( - - - - ); + ) : null; }} diff --git a/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx b/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx index 42b434fd..139ea0ed 100644 --- a/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx +++ b/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx @@ -3,7 +3,6 @@ import KFModal from '@/components/KFModal'; import { ModelType } from '@/enums'; import { useTags } from '@/hooks/useTags'; import { CategoryData, DataSource, UniResourceData } from '@/pages/Dataset/config'; -import { createBigModelReq } from '@/services/bigModel'; import { addModel, editModelReq, getAssetIcon } from '@/services/dataset/index.js'; import { to } from '@/utils/promise'; import { Form, Input, Radio, Select, TreeSelect, type ModalProps } from 'antd'; @@ -71,28 +70,18 @@ function AddModelModal({ info, onOk, ...rest }: AddModelModalProps) { const isBigModel = type === ModelType.Big; const model_type = modelTypes?.join(','); const model_tag = modelTags?.join(','); - const reqParams = isBigModel - ? { - name: rest.name, - description: rest.description, - // previewUrl: rest.preview_url, - modelType: model_type, - modelTag: model_tag, - source: '第三方模型', - sourceMmp: DataSource.Create, - isPublic: false, - } - : { - ...rest, - model_type, - model_tag, - model_source: DataSource.Create, - is_public: false, - }; + const reqParams = { + ...rest, + model_type, + model_tag, + model_source: DataSource.Create, + is_public: false, + is_hot_stone: isBigModel, + }; const reqBody = info - ? { ...info, ...omit(reqParams, ['model_source', 'is_public', 'source', 'isPublic']) } + ? { ...info, ...omit(reqParams, ['model_source', 'is_public', 'is_hot_stone']) } : reqParams; - const request = isBigModel ? createBigModelReq : info ? editModelReq : addModel; + const request = info ? editModelReq : addModel; const [res] = await to(request(reqBody)); if (res) { onOk?.(isBigModel, res.data); diff --git a/react-ui/src/pages/Dataset/components/AddVersionModal/index.tsx b/react-ui/src/pages/Dataset/components/AddVersionModal/index.tsx index 6754c766..7d90c0c1 100644 --- a/react-ui/src/pages/Dataset/components/AddVersionModal/index.tsx +++ b/react-ui/src/pages/Dataset/components/AddVersionModal/index.tsx @@ -12,6 +12,7 @@ import { useEffect, useState } from 'react'; interface AddVersionModalProps extends Omit { resourceType: ResourceType; resourceId: number; + gitId: number; resoureName: string; owner: string; identifier: string; @@ -22,6 +23,7 @@ interface AddVersionModalProps extends Omit { function AddVersionModal({ resourceType, resourceId, + gitId, resoureName, owner, identifier, @@ -85,6 +87,7 @@ function AddVersionModal({ }; }); const params = { + git_id: gitId, id: resourceId, identifier, is_public, diff --git a/react-ui/src/pages/Dataset/components/ResourceInfo/index.tsx b/react-ui/src/pages/Dataset/components/ResourceInfo/index.tsx index 777f2275..02bbe317 100644 --- a/react-ui/src/pages/Dataset/components/ResourceInfo/index.tsx +++ b/react-ui/src/pages/Dataset/components/ResourceInfo/index.tsx @@ -16,7 +16,6 @@ import { import GraphLegend from '@/pages/Model/components/GraphLegend'; import ModelEvolution from '@/pages/Model/components/ModelEvolution'; import ModelMetrics from '@/pages/Model/components/ModelMetrics'; -import { praiseResourceReq, unpraiseResourceReq } from '@/services/dataset'; import { changePropertyName } from '@/utils'; import { ResourceCreatedMessage, VersionChangedMessage } from '@/utils/constant'; import { openAntdModal } from '@/utils/modal'; @@ -52,8 +51,9 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { const [versionInfo, setVersionInfo] = useState({} as ResourceData); // 版本详情 const locationParams = useParams(); const [searchParams] = useSearchParams(); - const resourceIdStr = locationParams.id ?? ''; // 大模型是字符串 - const resourceId = Number(resourceIdStr); // 小模型是整型 + const resourceId = Number(locationParams.id ?? ''); // 数据库 id + const gitId = Number(searchParams.get('gitId')); // git id + const hotStoneId = searchParams.get('hotStoneId') ?? ''; // 火石 id // 模型演化传入的 tab const defaultTab = searchParams.get('tab') || ResourceInfoTabKeys.Introduction; // 模型演化传入的版本 @@ -84,7 +84,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { const getResourceDetail = useCallback( async (version?: string) => { const params = { - id: resourceId, + git_id: gitId, owner, name, identifier, @@ -101,13 +101,13 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { } } }, - [config, resourceId, owner, name, identifier, is_public], + [config, gitId, owner, name, identifier, is_public], ); // 获取大模型详情 const getBigModelResourceDetail = useCallback(async () => { const request = config.getBigInfo; - const [res] = await to(request(resourceIdStr)); + const [res] = await to(request(hotStoneId)); if (res && res.data) { if (resourceType === ResourceType.Dataset) { const data = changePropertyName(res.data.content[0], { @@ -131,7 +131,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { setResourceInfo(data as UniResourceData); } } - }, [config, resourceType, resourceIdStr]); + }, [config, resourceType, hotStoneId]); // 获取大模型版本详情 const getBigModelResourceVersionDetail = useCallback( @@ -165,7 +165,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { if (isBigModel) { const request = config.getBigVersions; - const [res] = await to(request(resourceIdStr)); + const [res] = await to(request(hotStoneId)); if (res && res.data) { const content = resourceType === ResourceType.Dataset ? res.data : res.data.flintModelRepoDTOList; @@ -207,7 +207,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { } } }, - [isBigModel, resourceIdStr, config, owner, identifier, versionParam, resourceType], + [isBigModel, hotStoneId, config, owner, identifier, versionParam, resourceType], ); // 获取详情 @@ -249,7 +249,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { if (resourceType === ResourceType.Dataset) { const { close } = openAntdModal(AddBigDatasetVersionModal, { resourceType: resourceType, - resourceId: resourceIdStr, + resourceId: hotStoneId, resoureName: name, onOk: () => { getVersionList(true); @@ -262,7 +262,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { tenantId: tenantId ?? resourceInfo.tenantId ?? '', username: currentUser?.userName ?? '', resourceType: resourceType, - resourceId: resourceIdStr, + resourceId: hotStoneId, resoureName: name, onOk: () => { getVersionList(true); @@ -275,6 +275,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { const { close } = openAntdModal(AddVersionModal, { resourceType: resourceType, resourceId: resourceId, + gitId: gitId, resoureName: name, owner: owner, identifier: identifier, @@ -291,7 +292,8 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { isBigModel, resourceType, resourceId, - resourceIdStr, + hotStoneId, + gitId, owner, identifier, is_public, @@ -332,7 +334,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { openAntdModal(VersionCompareModal, { versions: versionList!.map((v) => v.name), resourceType: resourceType, - repo_id: resourceId, + repo_id: gitId, owner, identifier, is_public: is_public, @@ -358,7 +360,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { } else { const request = config.deleteVersion; const params = { - id: resourceId, + git_id: gitId, owner, identifier, relative_paths: versionInfo.relative_paths, @@ -396,15 +398,8 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { return; } - const request = - resourceInfo.praised === true - ? isBigModel - ? config.unpraiseBigModel - : unpraiseResourceReq - : isBigModel - ? config.praiseBigModel - : praiseResourceReq; - const [res] = await to(request(resourceInfo.id)); + const request = resourceInfo.praised === true ? config.unpraiseReq : config.praiseReq; + const [res] = await to(request(resourceId)); if (res) { message.success('操作成功'); setResourceInfo((prev) => ({ @@ -450,11 +445,8 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { const publishResource = async () => { const request = config.publish; const params = { - id: isBigModel ? resourceIdStr : resourceId, - owner, + id: resourceId, name, - identifier, - is_hot_stone: isBigModel ? ModelType.Big : ModelType.Small, }; const [res] = await to(request(params)); if (res) { @@ -471,13 +463,13 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { }; // 编辑简介 - const handleEditIntro = async (id: number, identifier: string, description: string) => { + const handleEditIntro = async (gitId: number, identifier: string, description: string) => { if (isBigModel) { return; } else { const request = config.editIntro; const params = { - id, + git_id: gitId, identifier, description, }; @@ -500,7 +492,7 @@ const ResourceInfo = ({ resourceType }: ResourceInfoProps) => { { label: `指标参数`, children: ( { children: ( { function ResourceIntro({ resourceType, info, - resourceId, + gitId, identifier, // name, description, @@ -321,7 +321,7 @@ function ResourceIntro({ noDataTitle={isMine ? `请编辑${config.name}介绍` : `暂无${config.name}介绍`} placeholder="请输入" editBtnTitle="编辑简介" - onChange={(value) => onEditIntro?.(resourceId, identifier, value)} + onChange={(value) => onEditIntro?.(gitId, identifier, value)} > )}
diff --git a/react-ui/src/pages/Dataset/components/ResourceList/index.tsx b/react-ui/src/pages/Dataset/components/ResourceList/index.tsx index e28d288c..0919026f 100644 --- a/react-ui/src/pages/Dataset/components/ResourceList/index.tsx +++ b/react-ui/src/pages/Dataset/components/ResourceList/index.tsx @@ -8,7 +8,6 @@ import { to } from '@/utils/promise'; import { modalConfirm } from '@/utils/ui'; import { useNavigate } from '@umijs/max'; import { App, Button, Pagination, PaginationProps } from 'antd'; -import { pick } from 'lodash'; import { Ref, forwardRef, useCallback, useEffect, useImperativeHandle, useState } from 'react'; import { ResourceData, ResourceType, resourceConfig } from '../../config'; import AddDatasetModal from '../AddDatasetModal'; @@ -105,17 +104,9 @@ function ResourceList( ); // 删除请求 - const deleteRecord = async (params: { - owner: string; - identifier: string; - id: number | string; - is_public: boolean; - is_hot_stone: number; - }) => { - const { is_hot_stone, ...rest } = params; - const isBigModel = is_hot_stone; - const request = is_hot_stone ? config.deleteBigModel : config.deleteRecord; - const [res] = await to(request(isBigModel ? rest.id : rest)); + const deleteRecord = async (id: number) => { + const request = config.deleteRecord; + const [res] = await to(request(id)); if (res) { message.success('删除成功'); // 如果是一页的唯一数据,删除后,请求第一页的数据 @@ -146,7 +137,7 @@ function ResourceList( title: config.deleteModalTitle, content: '删除后将不可恢复,请谨慎操作!', onOk: () => { - deleteRecord(pick(record, ['owner', 'identifier', 'id', 'is_public', 'is_hot_stone'])); + deleteRecord(record.id); }, }); }; @@ -162,10 +153,12 @@ function ResourceList( const prefix = config.prefix; if (!record.is_hot_stone) { navigate( - `/dataset/${prefix}/info/${record.id}?name=${record.name}&owner=${record.owner}&identifier=${record.identifier}&is_public=${record.is_public}&source=${ModelType.Small}`, + `/dataset/${prefix}/info/${record.id}?gitId=${record.git_id}&name=${record.name}&owner=${record.owner}&identifier=${record.identifier}&is_public=${record.is_public}&source=${ModelType.Small}`, ); } else { - navigate(`/dataset/${prefix}/info/${record.id}?name=${record.name}&source=${ModelType.Big}`); + navigate( + `/dataset/${prefix}/info/${record.id}?hotStoneId=${record.hot_stone_id}&name=${record.name}&source=${ModelType.Big}`, + ); } }; @@ -192,11 +185,11 @@ function ResourceList( const prefix = config.prefix; if (!isBig) { navigate( - `/dataset/${prefix}/info/${record.id}?name=${record.name}&owner=${record.owner}&identifier=${record.identifier}&is_public=false&source=${ModelType.Small}`, + `/dataset/${prefix}/info/${record.id}?gitId=${record.git_id}&name=${record.name}&owner=${record.owner}&identifier=${record.identifier}&is_public=false&source=${ModelType.Small}`, ); } else { navigate( - `/dataset/${prefix}/info/${record.id}?name=${record.name}&source=${ModelType.Big}`, + `/dataset/${prefix}/info/${record.id}?hotStoneId=${record.hot_stone_id}&name=${record.name}&source=${ModelType.Big}`, ); } setTimeout(() => { diff --git a/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx b/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx index 8386ac3c..68cd7094 100644 --- a/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx +++ b/react-ui/src/pages/Dataset/components/ResourceVersion/index.tsx @@ -79,7 +79,7 @@ function ResourceVersion({ resourceType, info, isBig }: ResourceVersionProps) { const url = config.downloadAllAction; downLoadZip(url, { name: info.name, - id: info.id, + git_id: info.git_id, version: info.version, identifier: info.identifier, owner: info.owner, diff --git a/react-ui/src/pages/Dataset/config.tsx b/react-ui/src/pages/Dataset/config.tsx index d0ed6aa8..2b982289 100644 --- a/react-ui/src/pages/Dataset/config.tsx +++ b/react-ui/src/pages/Dataset/config.tsx @@ -13,9 +13,9 @@ import { getBigModelListReq, getBigModelVersionInfoReq, getBigModelVersionsReq, - praiseBigDatesetReq, + praiseBigDatasetReq, praiseBigModelReq, - unpraiseBigDatesetReq, + unpraiseBigDatasetReq, unpraiseBigModelReq, } from '@/services/bigModel'; import { @@ -41,8 +41,12 @@ import { getModelList, getModelNextVersionReq, getModelVersionList, + praiseDatasetReq, + praiseModelReq, publishDatasetReq, publishModelReq, + unpraiseDatasetReq, + unpraiseModelReq, } from '@/services/dataset/index.js'; import { Response } from '@/types'; import { formatDate } from '@/utils/date'; @@ -71,6 +75,8 @@ type ResourceTypeInfo = { getInfo: (params: any) => Promise; // 获取详情 compareVersion: (params: any) => Promise; // 版本对比 getNextVersion: (params: any) => Promise; // 获取下一个版本 + praiseReq: (params: any) => Promise; // 点赞 + unpraiseReq: (params: any) => Promise; // 取消点赞 getBigList: (params: any) => Promise; // 获取大模型列表 getBigInfo: (params: any) => Promise; // 获取大模型详情 getBigVersions: (params: any) => Promise; // 获取大模型版本列表 @@ -112,14 +118,16 @@ export const resourceConfig: Record = { getInfo: getDatasetInfo, compareVersion: compareDatasetVersion, getNextVersion: getDatasetNextVersionReq, + praiseReq: praiseDatasetReq, + unpraiseReq: unpraiseDatasetReq, getBigList: getBigDatasetListReq, getBigInfo: getBigDatasetInfoReq, getBigVersions: getBigDatasetVersionsReq, getBigVersionInfo: getBigDatasetVersionInfoReq, deleteBigVersion: deleteBigDatasetVersionReq, deleteBigModel: deleteBigDatasetReq, - praiseBigModel: praiseBigDatesetReq, - unpraiseBigModel: unpraiseBigDatesetReq, + praiseBigModel: praiseBigDatasetReq, + unpraiseBigModel: unpraiseBigDatasetReq, publish: publishDatasetReq, getFileUrl: getDatasetFileUrlReq, editIntro: editDatasetIntroReq, @@ -162,6 +170,8 @@ export const resourceConfig: Record = { getInfo: getModelInfo, compareVersion: compareModelVersion, getNextVersion: getModelNextVersionReq, + praiseReq: praiseModelReq, + unpraiseReq: unpraiseModelReq, getBigList: getBigModelListReq, getBigInfo: getBigModelInfoReq, getBigVersions: getBigModelVersionsReq, @@ -219,7 +229,9 @@ export interface CategoryData { // 数据集、模型列表数据 export interface ResourceData { resourceType: ResourceType.Dataset | ResourceType.Model; // 用于 ts 类型判断 - id: number | string; + id: number; + git_id: number; + hot_stone_id: string; name: string; identifier: string; owner: string; diff --git a/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx b/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx index 966549a2..858ca325 100644 --- a/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx +++ b/react-ui/src/pages/Experiment/components/ExportModelModal/index.tsx @@ -105,6 +105,7 @@ function ExportModelModal({ const resource = getSelectedResource(id); const params = { ...formData, + git_id: resource?.git_id, identifier: resource?.identifier, owner: resource?.owner, is_public: resource?.is_public, diff --git a/react-ui/src/pages/Model/components/ModelEvolution/index.tsx b/react-ui/src/pages/Model/components/ModelEvolution/index.tsx index 0e549ff8..442e4357 100644 --- a/react-ui/src/pages/Model/components/ModelEvolution/index.tsx +++ b/react-ui/src/pages/Model/components/ModelEvolution/index.tsx @@ -25,6 +25,7 @@ import { type modeModelEvolutionProps = { resourceId: number; + gitId: number; identifier: string; version?: string; isActive: boolean; @@ -34,6 +35,7 @@ type modeModelEvolutionProps = { let graph: Graph; function ModelEvolution({ resourceId, + gitId, identifier, version, isActive, @@ -90,6 +92,7 @@ function ModelEvolution({ const params = { id: resourceId, + git_id: gitId, identifier, version, }; @@ -108,7 +111,7 @@ function ModelEvolution({ } else { clearGraphData(); } - }, [resourceId, identifier, version]); + }, [resourceId, gitId, identifier, version]); useEffectWhen(getModelAtlas, isActive, [resourceId, identifier, version]); diff --git a/react-ui/src/pages/Model/components/ModelMetrics/index.tsx b/react-ui/src/pages/Model/components/ModelMetrics/index.tsx index 5e299c68..d301f2f1 100644 --- a/react-ui/src/pages/Model/components/ModelMetrics/index.tsx +++ b/react-ui/src/pages/Model/components/ModelMetrics/index.tsx @@ -26,13 +26,13 @@ type TableData = { }; type ModelMetricsProps = { - resourceId: number; + gitId: number; identifier: string; owner: string; version: string; // 当前版本 }; -function ModelMetrics({ resourceId, identifier, owner, version }: ModelMetricsProps) { +function ModelMetrics({ gitId, identifier, owner, version }: ModelMetricsProps) { const [pagination, setPagination] = useState({ current: 1, pageSize: 10, @@ -134,7 +134,7 @@ function ModelMetrics({ resourceId, identifier, owner, version }: ModelMetricsPr metrics: selectedMetrics, type: MetricsType.Train, identifier: identifier, - repo_id: resourceId, + repo_id: gitId, }; const [res] = await to(getModelVersionsMetricsReq(params)); if (res && res.data) { @@ -147,7 +147,7 @@ function ModelMetrics({ resourceId, identifier, owner, version }: ModelMetricsPr } else { setChartData(undefined); } - }, [selectedMetrics, selectedRowKeys, identifier, resourceId]); + }, [selectedMetrics, selectedRowKeys, identifier, gitId]); // 分页切换 const handleTableChange: TableProps['onChange'] = ( diff --git a/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx b/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx index a76d67da..84e9b735 100644 --- a/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx +++ b/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx @@ -11,6 +11,7 @@ import ResourceSelect, { type ParameterInputObject, } from '@/components/ResourceSelect'; import SubAreaTitle from '@/components/SubAreaTitle'; +import { ApplicationSource } from '@/pages/Application/types'; import { createServiceVersionReq, getServiceInfoReq, @@ -128,6 +129,7 @@ function CreateServiceVersion() { replicas: Number(formData.replicas), env_variables: envVariables, service_id: serviceId, + source: ApplicationSource.Platform, }; const params = diff --git a/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx b/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx index 91489f8e..972ad20c 100644 --- a/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx +++ b/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx @@ -10,6 +10,7 @@ import SubAreaTitle from '@/components/SubAreaTitle'; import { ServiceRunStatus, serviceStatusOptions } from '@/enums'; import { useCacheState } from '@/hooks/useCacheState'; import { useSystemResource } from '@/hooks/useComputingResource'; +import { ApplicationSource } from '@/pages/Application/types'; import { ModelData } from '@/pages/Dataset/config'; import { deleteServiceVersionReq, @@ -107,6 +108,7 @@ function ServiceInfo() { version: searchText || undefined, run_state: serviceStatus, service_id: serviceId, + source: ApplicationSource.Platform, }; const [res] = await to(getServiceVersionsReq(params)); if (res && res.data) { @@ -131,7 +133,7 @@ function ServiceInfo() { // 删除模型部署 const deleteServiceVersion = async (record: ServiceVersionData) => { - const [res] = await to(deleteServiceVersionReq(record.id)); + const [res] = await to(deleteServiceVersionReq(ApplicationSource.Platform, record.id)); if (res) { message.success('删除成功'); // 如果是一页的唯一数据,删除后,请求第一页的数据 @@ -148,7 +150,7 @@ function ServiceInfo() { // 停止模型部署 const stopServiceVersion = async (record: ServiceVersionData) => { - const [res] = await to(stopServiceVersionReq(record.id)); + const [res] = await to(stopServiceVersionReq(ApplicationSource.Platform, record.id)); if (res) { message.success('操作成功'); getServiceVersions(); diff --git a/react-ui/src/pages/ModelDeployment/VersionInfo/index.tsx b/react-ui/src/pages/ModelDeployment/VersionInfo/index.tsx index 23d836f5..172be7fa 100644 --- a/react-ui/src/pages/ModelDeployment/VersionInfo/index.tsx +++ b/react-ui/src/pages/ModelDeployment/VersionInfo/index.tsx @@ -7,6 +7,7 @@ import IframePage from '@/components/IFramePage'; import KFIcon from '@/components/KFIcon'; import PageTitle from '@/components/PageTitle'; import { ServiceRunStatus } from '@/enums'; +import { ApplicationSource } from '@/pages/Application/types'; import { getServiceVersionInfoReq } from '@/services/modelDeployment'; import { to } from '@/utils/promise'; import { useParams } from '@umijs/max'; @@ -32,7 +33,7 @@ function ServiceVersionInfo() { useEffect(() => { // 获取服务版本详情 const getServiceVersionInfo = async () => { - const [res] = await to(getServiceVersionInfoReq(id)); + const [res] = await to(getServiceVersionInfoReq(ApplicationSource.Platform, id!)); if (res && res.data) { setVersionInfo(res.data); } diff --git a/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx b/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx index 40665ef0..ce6d1042 100644 --- a/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx +++ b/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx @@ -1,3 +1,4 @@ +import { ApplicationSource } from '@/pages/Application/types'; import { ServiceVersionData } from '@/pages/ModelDeployment/types'; import { getServiceVersionLogReq } from '@/services/modelDeployment'; import { to } from '@/utils/promise'; @@ -62,6 +63,7 @@ function ServerLog({ info }: ServerLogProps) { start_time: logTime[0], end_time: logTime[1], id: info.id, + source: ApplicationSource.Platform, }; const [res] = await to(getServiceVersionLogReq(params)); if (res && res.data) { diff --git a/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx b/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx index 49eca067..a693c271 100644 --- a/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx +++ b/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx @@ -1,3 +1,4 @@ +import { ApplicationSource } from '@/pages/Application/types'; import { ServiceVersionData } from '@/pages/ModelDeployment/types'; import { getServiceVersionDocsReq } from '@/services/modelDeployment'; import { to } from '@/utils/promise'; @@ -15,7 +16,7 @@ function UserGuide({ info }: UserGuideProps) { // 获取服务文档 const getModelDeploymentDocs = async () => { if (info) { - const [res] = await to(getServiceVersionDocsReq(info.id)); + const [res] = await to(getServiceVersionDocsReq(ApplicationSource.Platform, info.id)); if (res && res.data && res.data.docs) { setDocs(JSON.stringify(res.data.docs, null, 2)); } diff --git a/react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx b/react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx index f65e13d9..3ed96542 100644 --- a/react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx +++ b/react-ui/src/pages/ModelDeployment/components/VersionCompareModal/index.tsx @@ -1,6 +1,7 @@ import KFModal from '@/components/KFModal'; import { ServiceRunStatus } from '@/enums'; import { useSystemResource } from '@/hooks/useComputingResource'; +import { ApplicationSource } from '@/pages/Application/types'; import { type ServiceVersionData } from '@/pages/ModelDeployment/types'; import { getServiceVersionCompareReq } from '@/services/modelDeployment'; import { isEmpty } from '@/utils'; @@ -61,21 +62,21 @@ function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModa key: 'image', text: '镜像', format: (data: any) => { - return data?.path; - }, - }, - { - key: 'code_config', - text: '代码配置', - format: (data: any) => { - return data?.show_value; + return data?.showValue; }, }, + // { + // key: 'code_config', + // text: '代码配置', + // format: (data: any) => { + // return data?.show_value; + // }, + // }, { key: 'model', text: '模型', format: (data: any) => { - return data?.show_value; + return data?.showValue; }, }, { @@ -114,6 +115,7 @@ function VersionCompareModal({ version1, version2, ...rest }: VersionCompareModa const params = { id1: version1, id2: version2, + source: ApplicationSource.Platform, }; const [res] = await to(getServiceVersionCompareReq(params)); if (res && res.data) { diff --git a/react-ui/src/pages/Pipeline/Info/index.jsx b/react-ui/src/pages/Pipeline/Info/index.jsx index 8af67999..e5a3dc98 100644 --- a/react-ui/src/pages/Pipeline/Info/index.jsx +++ b/react-ui/src/pages/Pipeline/Info/index.jsx @@ -384,7 +384,6 @@ const EditPipeline = () => { // ...dag, // nodes: newNodes, // }); - } } }; diff --git a/react-ui/src/services/bigModel/index.ts b/react-ui/src/services/bigModel/index.ts index 43f2faaf..00dd60de 100644 --- a/react-ui/src/services/bigModel/index.ts +++ b/react-ui/src/services/bigModel/index.ts @@ -127,15 +127,6 @@ export function getBigDatasetVersionFilesReq(datasetId: any) { }); } -// 下载数据集版本单个文件 -export function downloadBigDatasetFile(params: any) { - return request(`${DatasetAPIPrefix}/flintDataset/download`, { - method: 'GET', - params, - skipValidating: false, - }); -} - // 上传小数据集文件 export function uploadDatasetSmallFile(data: any, onUploadProgress: (progressEvent: any) => void) { return request(`${DatasetAPIPrefix}/file/upload`, { @@ -200,14 +191,14 @@ export const getPromptTemplateUrl = (dataType: BigDataType, isMarked: number) => }; // 点赞 -export function praiseBigDatesetReq(id: any) { +export function praiseBigDatasetReq(id: any) { return request(`${DatasetAPIPrefix}/flintDatasetGroupLike/praise/${id}`, { method: 'POST', }); } // 取消点赞 -export function unpraiseBigDatesetReq(id: any) { +export function unpraiseBigDatasetReq(id: any) { return request(`${DatasetAPIPrefix}/flintDatasetGroupLike/cancelPraise/${id}`, { method: 'POST', }); diff --git a/react-ui/src/services/dataset/index.js b/react-ui/src/services/dataset/index.js index 63bf7c91..c82610ab 100644 --- a/react-ui/src/services/dataset/index.js +++ b/react-ui/src/services/dataset/index.js @@ -28,17 +28,16 @@ export function getDatasetInfo(params) { // 新增数据集 export function addDataset(data) { - return request(`/api/mmp/newdataset/addDatasetAndVersion`, { + return request(`/api/mmp/newdataset/addDataset`, { method: 'POST', data, }); } // 删除数据集 -export function deleteDataset(params) { - return request(`/api/mmp/newdataset/deleteDataset`, { +export function deleteDataset(id) { + return request(`/api/mmp/newdataset/deleteDataset/${id}`, { method: 'DELETE', - params, }); } @@ -130,6 +129,20 @@ export function editDatasetReq(data) { }); } +// 点赞 +export function praiseDatasetReq(id) { + return request(`/api/mmp/newdataset/praise/${id}`, { + method: 'PUT', + }); +} + +// 取消点赞 +export function unpraiseDatasetReq(id) { + return request(`/api/mmp/newdataset/unpraise/${id}`, { + method: 'PUT', + }); +} + // ----------------------------模型--------------------------------- // 分页查询模型列表 @@ -149,10 +162,9 @@ export function addModel(data) { } // 删除模型 -export function deleteModel(params) { - return request(`/api/mmp/newmodel/delete`, { - method: 'DELETE', - params, +export function deleteModel(id) { + return request(`/api/mmp/newmodel/delete/${id}`, { + method: 'DELETE' }); } @@ -214,12 +226,12 @@ export function getModelAtlasReq(params) { } // 实验结果导出到模型 -export function exportModelReq(data) { - return request(`/api/mmp/models/exportModel`, { - method: 'POST', - data, - }); -} +// export function exportModelReq(data) { +// return request(`/api/mmp/models/exportModel`, { +// method: 'POST', +// data, +// }); +// } // 分页查询模型所有版本,带有参数和指标数据 export function getModelPageVersionsReq(params) { @@ -245,25 +257,17 @@ export function compareModelVersion(data) { }); } -// 删除上传的文件 -export function deleteUploadFileReq(params) { - return request(`/api/mmp/newdataset/deleteFile`, { - method: 'DELETE', - params, - }); -} - // 点赞 -export function praiseResourceReq(id) { +export function praiseModelReq(id) { return request(`/api/mmp/newmodel/praise/${id}`, { - method: 'POST', + method: 'PUT', }); } // 取消点赞 -export function unpraiseResourceReq(id) { +export function unpraiseModelReq(id) { return request(`/api/mmp/newmodel/unpraise/${id}`, { - method: 'DELETE', + method: 'PUT', }); } @@ -341,3 +345,11 @@ export function getUploadFileListReq(params) { skipLoading: true, }); } + +// 删除上传的文件 +export function deleteUploadFileReq(params) { + return request(`/api/mmp/newdataset/deleteFile`, { + method: 'DELETE', + params, + }); +} \ No newline at end of file diff --git a/react-ui/src/services/external/index.ts b/react-ui/src/services/external/index.ts index 4b798afb..04edb7af 100644 --- a/react-ui/src/services/external/index.ts +++ b/react-ui/src/services/external/index.ts @@ -78,7 +78,7 @@ export function jccGetResourcesReq(token: string, cardType: string) { type: cardType, }, resourceType: 'Train', //Inference - clusterIDs: [], + clusterIDs: ['1865927992266461184'], }, headers: { authorization: `${token}`, diff --git a/react-ui/src/services/huoshi.ts b/react-ui/src/services/huoshi.ts index f2ce212b..043dc824 100644 --- a/react-ui/src/services/huoshi.ts +++ b/react-ui/src/services/huoshi.ts @@ -69,11 +69,20 @@ export const getHuoshiRoutes = async () => { user: { appList:menuInfo.data.appList, userInfo: userInfo.data, - tenantInfoList: tenantInfo.data, - configInfo:configInfo.data, + tenant: tenantInfo.data, + gConfig:configInfo.data, navList, consoleList }, }), ); + sessionStorage.setItem('globalState',JSON.stringify({ + gConfig:configInfo.data, + userInfo:userInfo.data, + sysType:1 + })) + localStorage.setItem('generate_subMenus','dataDistillation,dataEnhance,dataReflux,qaExtraction') + localStorage.setItem('getCurrentZoneFun','function(e){const t=e.url.split("/")[1];let r=[];const n=sessionStorage.getItem("currentZone");let o=[null,void 0,"null","undefined"].includes(n)?"default":n;if(localStorage.serviceList&&(r=JSON.parse(localStorage.serviceList)),r.length&&t){const e=r.find(e=>e.name===t);if(e?.zones){const t=e.zones.split(",");t.includes(o)||(o=t[0])}}return o}') + localStorage.setItem('processing_subMenus','dataClean,dataFormat,dataAnalysis') + localStorage.setItem('currentLanguage','zh_CN') }; diff --git a/react-ui/src/services/modelDeployment/index.ts b/react-ui/src/services/modelDeployment/index.ts index 27864d1a..31892aa9 100644 --- a/react-ui/src/services/modelDeployment/index.ts +++ b/react-ui/src/services/modelDeployment/index.ts @@ -75,7 +75,7 @@ export function cancelFavoriteServiceReq(id: any) { // 获取服务版本列表 export function getServiceVersionsReq(data: any) { - return request(`/api/mmp/service/serviceVersion`, { + return request(`/api/mmp/service/version/list`, { method: 'GET', params: data, }); @@ -83,7 +83,7 @@ export function getServiceVersionsReq(data: any) { // 创建服务版本 export function createServiceVersionReq(data: any) { - return request(`/api/mmp/service/serviceVersion`, { + return request(`/api/mmp/service/version`, { method: 'POST', data, }); @@ -91,43 +91,43 @@ export function createServiceVersionReq(data: any) { // 更新服务版本 export function updateServiceVersionReq(data: any) { - return request(`/api/mmp/service/serviceVersion`, { + return request(`/api/mmp/service/version`, { method: 'PUT', data, }); } // 删除服务版本 -export function deleteServiceVersionReq(id: any) { - return request(`/api/mmp/service/serviceVersion/${id}`, { +export function deleteServiceVersionReq(source: number, id: number | string) { + return request(`/api/mmp/service/version/${source}/${id}`, { method: 'DELETE', }); } // 获取服务版本详情 -export function getServiceVersionInfoReq(id: any) { - return request(`/api/mmp/service/serviceVersionDetail/${id}`, { +export function getServiceVersionInfoReq(source: number, id: number | string) { + return request(`/api/mmp/service/version/${source}/${id}`, { method: 'GET', }); } // 停止服务版本 -export function stopServiceVersionReq(id: any) { - return request(`/api/mmp/service/stopServiceVersion/${id}`, { +export function stopServiceVersionReq(source: number, id: number | string) { + return request(`/api/mmp/service/version/stop/${source}/${id}`, { method: 'DELETE', }); } // 获取服务版本操作指南 -export function getServiceVersionDocsReq(id: any) { - return request(`/api/mmp/service/getServiceVersionDocs/${id}`, { +export function getServiceVersionDocsReq(source: number, id: number | string) { + return request(`/api/mmp/service/version/getDocs/${source}/${id}`, { method: 'GET', }); } // 获取服务版本日志 export function getServiceVersionLogReq(params: any) { - return request(`/api/mmp/service/getServiceVersionLog`, { + return request(`/api/mmp/service/version/getLog`, { method: 'GET', params, }); @@ -135,7 +135,7 @@ export function getServiceVersionLogReq(params: any) { // 获取服务版本对比 export function getServiceVersionCompareReq(params: any) { - return request(`/api/mmp/service/serviceVersionCompare`, { + return request(`/api/mmp/service/version/compare`, { method: 'GET', params, }); @@ -167,7 +167,7 @@ export function getTaskListReq(data: any) { }); } -// 获取应用任务列表 +// 获取应用任务详情 export function getTaskInfoReq(id: number | string) { return request(`/api/mmp/trainingTask/${id}`, { method: 'GET', diff --git a/react-ui/src/state/jcdResource.ts b/react-ui/src/state/jcdResource.ts index 0eb513e9..73316166 100644 --- a/react-ui/src/state/jcdResource.ts +++ b/react-ui/src/state/jcdResource.ts @@ -1,5 +1,4 @@ import { - jccGetClusterListReq, jccGetImagesReq, jccGetResourcesReq, jccGetResourceTypesReq, @@ -165,15 +164,15 @@ export const getResourceTypes = async () => { value: v.type, })); } - const [clusterRes] = await to(jccGetClusterListReq(state.token)); - if ( - clusterRes && - clusterRes.code === 200 && - clusterRes.data && - Array.isArray(clusterRes.data.list) - ) { - state.clusters = clusterRes.data.list; - } + // const [clusterRes] = await to(jccGetClusterListReq(state.token)); + // if ( + // clusterRes && + // clusterRes.code === 200 && + // clusterRes.data && + // Array.isArray(clusterRes.data.list) + // ) { + // state.clusters = clusterRes.data.list; + // } }; export const setCurrentType = async (cardType: string | undefined | null) => { diff --git a/react-ui/火石前端部署.md b/react-ui/火石前端部署.md new file mode 100644 index 00000000..3194c06d --- /dev/null +++ b/react-ui/火石前端部署.md @@ -0,0 +1,58 @@ +### 大模型训练 & 数据管理 (已完成) +> 前端包路径 /home/ruoyi/projects/flint + nginx 修改 115 行 + ```nginx + location /flint { + add_header 'Access-Control-Allow-Private-Network' 'true' always; + add_header 'Access-Control-Allow-Origin' $cors_origin always; + alias /home/ruoyi/projects/flint; + try_files $uri $uri/ @fallback_flint; + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + add_header 'Access-Control-Allow-Origin' $cors_origin always; + expires 1y; + add_header Cache-Control "public, immutable"; + } + } + + location @fallback_flint { + root /home/ruoyi/projects; + try_files /ruoyi-ui/index.html =404; + add_header 'Access-Control-Allow-Origin' $cors_origin always; + } + ``` + +### 服务管理 (开发中) + +> 前端包路径 /home/ruoyi/projects/trainfer + nginx 修改 127 行 + ```nginx + location /trainfer { + add_header 'Access-Control-Allow-Private-Network' 'true' always; + add_header 'Access-Control-Allow-Origin' $cors_origin always; + alias /home/ruoyi/projects/trainfer; + try_files $uri $uri/ @fallback_flint; + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + add_header 'Access-Control-Allow-Origin' $cors_origin always; + expires 1y; + add_header Cache-Control "public, immutable"; + } + } + ``` + +### 集群管理 (开发中) + +> 前端包路径 /home/ruoyi/projects/portal + nginx 修改 139 行 + ```nginx + location /portal { + add_header 'Access-Control-Allow-Private-Network' 'true' always; + add_header 'Access-Control-Allow-Origin' $cors_origin always; + alias /home/ruoyi/projects/portal; + try_files $uri $uri/ @fallback_flint; + location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { + add_header 'Access-Control-Allow-Origin' $cors_origin always; + expires 1y; + add_header Cache-Control "public, immutable"; + } + } + ``` \ No newline at end of file diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/NewDatasetFromGitController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/NewDatasetFromGitController.java index 1d5b33b0..f0b2385a 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/NewDatasetFromGitController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/dataset/NewDatasetFromGitController.java @@ -241,28 +241,21 @@ public class NewDatasetFromGitController { @PostMapping("/publish") @ApiOperation(value = "发布") - @OperationNotification(value = "发布的数据集#{#datasetVo.name}需要审核,请查看",type = 2,receiver = "ADMIN",notificationUrl="/system/approval") + @OperationNotification(value = "发布的数据集#{#datasetVo.name}需要审核,请查看", type = 2, receiver = "ADMIN", notificationUrl = "/system/approval") public AjaxResult publish(@RequestBody NewDatasetVo datasetVo, HttpServletRequest request) throws Exception { LoginUser loginUser = SecurityUtils.getLoginUser(); return AjaxResult.success(newDatasetService.publish(datasetVo, loginUser, request)); } - @PostMapping("/privateToPublic") - @ApiOperation(value = "私有库变共有库") - public AjaxResult privateToPublic(@RequestBody NewDatasetVo datasetVo, HttpServletRequest request) throws Exception { - newDatasetService.privateToPublic(datasetVo, request); - return AjaxResult.success(); - } - - @PostMapping("/praise") + @PutMapping("/praise/{id}") @ApiOperation(value = "点赞一个项目") - public AjaxResult praise(@RequestBody NewDatasetVo datasetVo, HttpServletRequest request) throws Exception { - return AjaxResult.success(this.newDatasetService.praise(datasetVo, request)); + public AjaxResult praise(@PathVariable("id") Integer id, HttpServletRequest request) throws Exception { + return AjaxResult.success(this.newDatasetService.praise(id, request)); } - @PostMapping("/unpraise") + @PutMapping("/unpraise/{id}") @ApiOperation(value = "取消点赞一个项目") - public AjaxResult unpraise(@RequestBody NewDatasetVo datasetVo, HttpServletRequest request) throws Exception { - return AjaxResult.success(this.newDatasetService.unpraise(datasetVo, request)); + public AjaxResult unpraise(@PathVariable("id") Integer id, HttpServletRequest request) throws Exception { + return AjaxResult.success(this.newDatasetService.unpraise(id, request)); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/NewModelFromGitController.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/NewModelFromGitController.java index 6d8cc1d6..a9698d1c 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/NewModelFromGitController.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/controller/model/NewModelFromGitController.java @@ -167,8 +167,8 @@ public class NewModelFromGitController extends BaseController { @GetMapping("/getModelDependencyTree") @ApiOperation(value = "获取模型依赖关系树") - public AjaxResult getModelDependencyTree(@RequestParam("id") Integer id, @RequestParam("identifier") String identifier, @RequestParam("version") String version) throws Exception { - return AjaxResult.success(this.modelsService.getModelDependencyTree(id, identifier, version)); + public AjaxResult getModelDependencyTree(@RequestParam("git_id") Integer gitId, @RequestParam("identifier") String identifier, @RequestParam("version") String version) throws Exception { + return AjaxResult.success(this.modelsService.getModelDependencyTree(gitId, identifier, version)); } @DeleteMapping("/delete/{id}") @@ -200,16 +200,16 @@ public class NewModelFromGitController extends BaseController { return AjaxResult.success(this.modelsService.getVersionsCompare(queryModelMetricsVo)); } - @PostMapping("/praise") + @PutMapping("/praise/{id}") @ApiOperation(value = "点赞一个项目") - public AjaxResult praise(@RequestBody NewModel newModel, HttpServletRequest request) throws Exception { - return AjaxResult.success(this.modelsService.praise(newModel, request)); + public AjaxResult praise(@PathVariable("id") Integer id, HttpServletRequest request) throws Exception { + return AjaxResult.success(this.modelsService.praise(id, request)); } - @PostMapping("/unpraise") + @PutMapping("/unpraise/{id}") @ApiOperation(value = "取消点赞一个项目") - public AjaxResult unpraise(@RequestBody NewModel newModel, HttpServletRequest request) throws Exception { - return AjaxResult.success(this.modelsService.unpraise(newModel, request)); + public AjaxResult unpraise(@PathVariable("id") Integer id, HttpServletRequest request) throws Exception { + return AjaxResult.success(this.modelsService.unpraise(id, request)); } @PostMapping("/publish") @@ -219,11 +219,4 @@ public class NewModelFromGitController extends BaseController { LoginUser loginUser = SecurityUtils.getLoginUser(); return AjaxResult.success(modelsService.publish(modelsVo, loginUser, request)); } - - @PostMapping("/privateToPublic") - @ApiOperation(value = "私有库变共有库") - public AjaxResult privateToPublic(@RequestBody ModelsVo modelsVo, HttpServletRequest request) throws Exception { - modelsService.privateToPublic(modelsVo, request); - return AjaxResult.success(); - } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DvcService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DvcService.java deleted file mode 100644 index 34c5ab25..00000000 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/DvcService.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.ruoyi.platform.service; - -public interface DvcService { - - //使用dvc初始化,跟踪,push到远程仓库的接口 - public void initaddpushDvc(String localPath) throws Exception ; - -} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java index 1ad06a73..6e1f0375 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/ModelsService.java @@ -64,15 +64,15 @@ public interface ModelsService { Map getVersionsCompare(QueryModelMetricsVo queryModelMetricsVo) throws Exception; - String praise(NewModel newModel, HttpServletRequest request) throws Exception; + String praise(Integer id, HttpServletRequest request) throws Exception; - String unpraise(NewModel newModel, HttpServletRequest request) throws Exception; + String unpraise(Integer id, HttpServletRequest request) throws Exception; String getNextVersion(ModelsVersion modelsVersion) throws Exception; - void privateToPublic(ModelsVo modelsVo,HttpServletRequest request) throws Exception; + void privateToPublic(NewModel model, HttpServletRequest request) throws Exception; - String publish(ModelsVo modelsVo, LoginUser loginUser,HttpServletRequest request) throws Exception; + String publish(ModelsVo modelsVo, LoginUser loginUser, HttpServletRequest request) throws Exception; void updateDesc(ModelsVo modelsVo) throws Exception; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/NewDatasetService.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/NewDatasetService.java index 8250dee9..f2b9e4f4 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/NewDatasetService.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/NewDatasetService.java @@ -56,11 +56,11 @@ public interface NewDatasetService { String publish(NewDatasetVo datasetVo, LoginUser loginUser, HttpServletRequest request) throws Exception; - void privateToPublic(NewDatasetVo newDatasetVo, HttpServletRequest request) throws Exception; + void privateToPublic(NewDataset newDataset, HttpServletRequest request) throws Exception; void updateDesc(NewDatasetVo datasetVo) throws Exception; - String praise(NewDatasetVo datasetVo, HttpServletRequest request) throws Exception; + String praise(Integer id, HttpServletRequest request) throws Exception; - String unpraise(NewDatasetVo datasetVo, HttpServletRequest request) throws Exception; + String unpraise(Integer id, HttpServletRequest request) throws Exception; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ApprovalServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ApprovalServiceImpl.java index 5b635193..d7d06fef 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ApprovalServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ApprovalServiceImpl.java @@ -141,12 +141,12 @@ public class ApprovalServiceImpl implements ApprovalService { String content = approvalRequest.getContent(); switch (approvalRequest.getType()) { case "DATASET": - NewDatasetVo dataset = JSONUtil.toBean(content, NewDatasetVo.class); + NewDataset dataset = JSONUtil.toBean(content, NewDataset.class); newDatasetService.privateToPublic(dataset,request); break; case "MODEL": - ModelsVo models = JSONUtil.toBean(content, ModelsVo.class); - modelsService.privateToPublic(models,request); + NewModel model = JSONUtil.toBean(content, NewModel.class); + modelsService.privateToPublic(model,request); break; } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DvcServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DvcServiceImpl.java deleted file mode 100644 index 192dfe7c..00000000 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/DvcServiceImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.ruoyi.platform.service.impl; - -import com.ruoyi.common.security.utils.SecurityUtils; -import com.ruoyi.platform.service.DvcService; -import com.ruoyi.platform.utils.DVCUtils; -import com.ruoyi.system.api.model.LoginUser; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -@Service -public class DvcServiceImpl implements DvcService { - @Value("${minio.accessKey}") - String accessKeyId; - @Value("${minio.secretKey}") - String secretAccessKey; - @Value("${minio.endpoint}") - String endpoint; - @Resource - private DVCUtils dvcUtils; - @Override - public void initaddpushDvc(String localPath) throws Exception { - LoginUser loginUser = SecurityUtils.getLoginUser(); - // dvc init 初始化 - dvcUtils.dvcInit(localPath); - // 配置远程S3地址 - dvcUtils.dvcRemoteAdd(localPath,""); -// dvcUtils.dvcConfigS3Credentials(localPath,endpoint, accessKeyId, secretAccessKey); - // dvc 跟踪 - dvcUtils.dvcAdd(localPath , "data"); - // git commit - dvcUtils.gitCommit(localPath, "commit from ci4s with "+loginUser.getUsername()); - // dvc push 到远程S3 - dvcUtils.dvcPush(localPath); - } - -} diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java index 6f98d3e4..e122a0b6 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ExperimentServiceImpl.java @@ -512,7 +512,7 @@ public class ExperimentServiceImpl implements ExperimentService { List> modelsList = (List>) modelTrainMap.get("models"); if (modelsList != null) { Map parentModelMap = modelsList.get(0); - Integer id = (Integer) parentModelMap.get("model_id"); + Integer id = (Integer) parentModelMap.get("git_id"); String identifier = (String) parentModelMap.get("model_identifier"); String version = (String) parentModelMap.get("model_version"); @@ -561,7 +561,7 @@ public class ExperimentServiceImpl implements ExperimentService { for (int j = 0; j < modelTargetList.size(); j++) { Map targetModel = modelTargetList.get(i); - modelMetaVo.setId((Integer) targetModel.get("model_id")); + modelMetaVo.setId((Integer) targetModel.get("git_id")); modelMetaVo.setIdentifier((String) targetModel.get("model_identifier")); modelMetaVo.setName((String) targetModel.get("model_name")); modelMetaVo.setVersion(queryNextModelVersion((String) targetModel.get("model_identifier"), (String) targetModel.get("model_owner"))); @@ -583,7 +583,7 @@ public class ExperimentServiceImpl implements ExperimentService { // modelMetaVo.setModelVersionVos(versionVos); modelDependency.setMeta(JSON.toJSONString(modelMetaVo)); - modelDependency.setRepoId((Integer) targetModel.get("model_id")); + modelDependency.setRepoId((Integer) targetModel.get("git_id")); modelDependency.setModelName((String) targetModel.get("model_name")); modelDependency.setIdentifier((String) targetModel.get("model_identifier")); modelDependency.setVersion(queryNextModelVersion((String) targetModel.get("model_identifier"), (String) targetModel.get("owner"))); diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java index b7474946..6936069d 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/ModelsServiceImpl.java @@ -149,7 +149,8 @@ public class ModelsServiceImpl implements ModelsService { //modelsVo复制信息到newModel BeanUtils.copyProperties(modelsVo, newModel); ConvertUtil.setCommonFields(newModel, true); - newModelService.save(newModel); + newModelDao.save(newModel); + modelsVo.setId(newModel.getId()); return modelsVo; } @@ -182,23 +183,23 @@ public class ModelsServiceImpl implements ModelsService { // 创建项目 Map project = gitService.createProject(token, gitProjectVo); - Integer gitlinIid = (Integer) project.get("id"); - if (gitlinIid == null) { + Integer gitlinkIid = (Integer) project.get("id"); + if (gitlinkIid == null) { throw new RuntimeException("创建模型失败:" + project.get("message")); } // 定义标签 标签1:model 标签2:ModelTag 标签3:ModelType - gitService.createTopic(token, gitlinIid, Constant.Topic_Model, null); + gitService.createTopic(token, gitlinkIid, Constant.Topic_Model, null); if (StringUtils.isNotEmpty(modelsVo.getModelTag())) { - gitService.createTopic(token, gitlinIid, modelsVo.getModelTag(), "modeltag-"); + gitService.createTopic(token, gitlinkIid, modelsVo.getModelTag(), "modeltag-"); } if (StringUtils.isNotEmpty(modelsVo.getModelType())) { - gitService.createTopic(token, gitlinIid, modelsVo.getModelType(), "modeltype-"); + gitService.createTopic(token, gitlinkIid, modelsVo.getModelType(), "modeltype-"); } String owner = (String) userInfo.get("login"); String projectUrl = gitCloneEndpoint + "/" + owner + "/" + repositoryName + ".git"; - String relationPath = ci4sUsername + "/model/" + gitlinIid + "/" + repositoryName + "/origin"; + String relationPath = ci4sUsername + "/model/" + gitlinkIid + "/" + repositoryName + "/origin"; String rootPath = localPath + relationPath; String modelPath = rootPath + "/model"; String metaPath = rootPath + "/metadata"; @@ -221,7 +222,7 @@ public class ModelsServiceImpl implements ModelsService { long folderSize = FileUtil.getFolderSize(folder); modelMetaVo.setModelSize(FileUtil.formatFileSize(folderSize)); BeanUtils.copyProperties(modelMetaVo, modelsVo); - modelsVo.setGitId(gitlinIid); + modelsVo.setGitId(gitlinkIid); Map metaMap = JSON.parseObject(JSON.toJSONString(modelMetaVo), Map.class); YamlUtils.generateYamlFile(metaMap, metaPath, "metadata"); @@ -229,7 +230,7 @@ public class ModelsServiceImpl implements ModelsService { String meta = JSON.toJSONString(modelMetaVo); //保存模型依赖 - modelDependency.setRepoId(gitlinIid); + modelDependency.setRepoId(gitlinkIid); modelDependency.setIdentifier(repositoryName); modelDependency.setModelName(modelsVo.getName()); modelDependency.setVersion("origin"); @@ -319,7 +320,7 @@ public class ModelsServiceImpl implements ModelsService { } String repositoryName = modelsVo.getIdentifier() == null ? ci4sUsername + "_model_" + DateUtils.dateTimeNow() : modelsVo.getIdentifier(); ModelDependency1 modelDependency = new ModelDependency1(); - List oldModelDependencys = modelDependency1Dao.queryModelDependency(modelsVo.getName(), (int) modelsVo.getId(), gitLinkUsername); + List oldModelDependencys = modelDependency1Dao.queryModelDependency(modelsVo.getName(), modelsVo.getGitId(), gitLinkUsername); if (oldModelDependencys != null && !oldModelDependencys.isEmpty()) { if (oldModelDependencys.stream().anyMatch(oldModelDependency -> oldModelDependency.getVersion().equals(modelsVo.getVersion()))) { throw new Exception("模型版本已存在,请勿重复创建"); @@ -371,7 +372,7 @@ public class ModelsServiceImpl implements ModelsService { buildingModel = modelDependency1Dao.queryByTrainTask(JSON.toJSONString(map)); } else if (Constant.Source_Auto_Export.equals(modelsVo.getModelSource())) { dvcUtils.moveFiles(sourcePath, modelPath); - buildingModel = modelDependency1Dao.getBuildingModel((int) modelsVo.getId(), modelsVo.getIdentifier()); + buildingModel = modelDependency1Dao.getBuildingModel(modelsVo.getGitId(), modelsVo.getIdentifier()); } else { for (VersionVo modelVersionVo : modelsVo.getModelVersionVos()) { dvcUtils.copyFile(modelVersionVo.getUrl(), modelPath); @@ -436,17 +437,17 @@ public class ModelsServiceImpl implements ModelsService { modelDependency.setState(Constant.State_valid); modelDependency.setModelName(modelsVo.getName()); modelDependency.setVersion(modelsVo.getVersion()); - modelDependency.setRepoId((int) modelsVo.getId()); + modelDependency.setRepoId(modelsVo.getGitId()); modelDependency.setIdentifier(repositoryName); modelDependency.setMeta(meta); modelDependency1Dao.insert(modelDependency); } else { //更新模型依赖 - modelDependency1Dao.updateState((int) modelsVo.getId(), modelsVo.getIdentifier(), buildingModel.getVersion(), modelsVo.getVersion(), meta, Constant.State_valid); + modelDependency1Dao.updateState(modelsVo.getGitId(), modelsVo.getIdentifier(), buildingModel.getVersion(), modelsVo.getVersion(), meta, Constant.State_valid); } } else { //保存模型依赖 - modelDependency.setRepoId((int) modelsVo.getId()); + modelDependency.setRepoId(modelsVo.getGitId()); modelDependency.setIdentifier(repositoryName); modelDependency.setModelName(modelsVo.getName()); modelDependency.setVersion(modelsVo.getVersion()); @@ -787,6 +788,7 @@ public class ModelsServiceImpl implements ModelsService { modelsVo.setPraised((Boolean) reqMap.get("praised")); NewModel modelByIdentifier = newModelDao.getModelByIdentifier(identifier); modelsVo.setId(modelByIdentifier.getId()); + modelsVo.setGitId(gitId); return modelsVo; } @@ -864,7 +866,7 @@ public class ModelsServiceImpl implements ModelsService { modelDependency1Dao.deleteModelDependency(parentModel); String ci4sUsername = SecurityUtils.getLoginUser().getUsername(); - dvcUtils.deleteDirectory(localPath + "/" + ci4sUsername + "/model/" + repoId + "/" + identifier); + dvcUtils.deleteDirectory(localPath + "/" + ci4sUsername + "/model/" + repoId); } @Override @@ -939,29 +941,30 @@ public class ModelsServiceImpl implements ModelsService { } @Override - public String praise(NewModel newModel, HttpServletRequest request) throws Exception { - if (newModel.getIsHotStone()) { - hotStoneService.praiseHotStoneModel(newModel.getHotStoneId(), request); + public String praise(Integer id, HttpServletRequest request) throws Exception { + NewModel model = newModelDao.getModelById(id); + if (model.getIsHotStone()) { + hotStoneService.praiseHotStoneModel(model.getHotStoneId(), request); } else { - gitService.praiseProject(newModel.getGitId(), newModel.getIdentifier()); + gitService.praiseProject(model.getGitId(), model.getIdentifier()); } //落表 - newModel.setPraisesCount(newModel.getPraisesCount() + 1); - newModelService.edit(newModel); + model.setPraisesCount(model.getPraisesCount() + 1); + newModelService.edit(model); return "点赞成功"; } @Override - public String unpraise(NewModel newModel, HttpServletRequest request) throws Exception { - if (newModel.getIsHotStone()) { - hotStoneService.unpraiseHotStoneModel(newModel.getHotStoneId(), request); + public String unpraise(Integer id, HttpServletRequest request) throws Exception { + NewModel model = newModelDao.getModelById(id); + if (model.getIsHotStone()) { + hotStoneService.unpraiseHotStoneModel(model.getHotStoneId(), request); } else { - gitService.unpraiseProject(newModel.getGitId(), newModel.getIdentifier()); + gitService.unpraiseProject(model.getGitId(), model.getIdentifier()); } - //落表 - newModel.setPraisesCount(newModel.getPraisesCount() - 1); - newModelService.edit(newModel); + model.setPraisesCount(model.getPraisesCount() - 1); + newModelService.edit(model); return "取消点赞成功"; } @@ -1036,55 +1039,54 @@ public class ModelsServiceImpl implements ModelsService { } @Override - public void privateToPublic(ModelsVo modelsVo, HttpServletRequest request) throws Exception { - if (modelsVo.getIsHotStone()) { - hotStoneService.publicHotStoneModel(modelsVo.getHotStoneId(), request); + public void privateToPublic(NewModel model, HttpServletRequest request) throws Exception { + if (model.getIsHotStone()) { + hotStoneService.publicHotStoneModel(model.getHotStoneId(), request); } else { - toPublic(modelsVo); + toPublic(model); } + newModelDao.edit(model.setIsPublic(true)); } - private void toPublic(ModelsVo modelsVo) throws Exception { + private void toPublic(NewModel model) throws Exception { //获取版本列表信息,每一个版本的配置文件都要更改 String token = gitService.checkoutToken(); - List> brancheList = gitService.getBrancheList(token, modelsVo.getOwner(), modelsVo.getIdentifier()); + List> brancheList = gitService.getBrancheList(token, model.getOwner(), model.getIdentifier()); for (Map branch : brancheList) { if (branch.get("name").equals("master")) { continue; } //获取每个版本的配置信息 - Map branchConfig = YamlUtils.loadYamlFile(localPath + modelsVo.getOwner() + "/model/" + modelsVo.getGitId() + "/" + modelsVo.getIdentifier() + "/" + branch.get("name") + "/metadata/metadata.yaml"); + Map branchConfig = YamlUtils.loadYamlFile(localPath + model.getOwner() + "/model/" + model.getGitId() + "/" + model.getIdentifier() + "/" + branch.get("name") + "/metadata/metadata.yaml"); branchConfig.put("isPublic", true); //更新每个版本的配置信息 - String repositoryName = modelsVo.getIdentifier(); + String repositoryName = model.getIdentifier(); String branchName = StrUtil.toString(branch.get("name")); - String relatePath = modelsVo.getOwner() + "/model/" + modelsVo.getGitId() + "/" + repositoryName + "/" + branchName; + String relatePath = model.getOwner() + "/model/" + model.getGitId() + "/" + repositoryName + "/" + branchName; String rootPath = localPath + relatePath; String metaPath = rootPath + "/metadata"; YamlUtils.generateYamlFile(JsonUtils.objectToMap(branchConfig), metaPath, "metadata"); } - Map projectDetail = gitService.getProjectDetail(modelsVo.getOwner(), modelsVo.getIdentifier(), token); + Map projectDetail = gitService.getProjectDetail(model.getOwner(), model.getIdentifier(), token); Map param = new HashMap<>(); param.put("private", false); param.put("name", projectDetail.get("name")); param.put("project_name", projectDetail.get("name")); - param.put("project_identifier", modelsVo.getIdentifier()); - param.put("identifier", modelsVo.getIdentifier()); - gitService.updateProjectDetail(param, modelsVo.getOwner(), modelsVo.getIdentifier(), token); - NewModel modelByIdentifier = newModelService.getModelByIdentifier(modelsVo.getIdentifier()); - newModelService.edit(modelByIdentifier.setIsPublic(true)); + param.put("project_identifier", model.getIdentifier()); + param.put("identifier", model.getIdentifier()); + gitService.updateProjectDetail(param, model.getOwner(), model.getIdentifier(), token); } @Override public String publish(ModelsVo modelsVo, LoginUser loginUser, HttpServletRequest request) throws Exception { + NewModel model = newModelDao.getModelById((Integer) modelsVo.getId()); Set roles = loginUser.getRoles(); if (roles.contains("admin")) { //无需审批,直接通过 - privateToPublic(modelsVo, request); + privateToPublic(model, request); return "发布成功"; } - ModelsVo modelsVotDesc = getModelDetail((int) modelsVo.getId(), modelsVo.getIdentifier(), modelsVo.getOwner(), modelsVo.getVersion(), false); String username = loginUser.getUsername(); Long userid = loginUser.getUserid(); ApprovalRequest approvalRequest = new ApprovalRequest(); @@ -1097,12 +1099,12 @@ public class ModelsServiceImpl implements ModelsService { String titleTemplate = "{}发布的模型\"{}\"需要审核,请查看"; String urlTemplate = "/dataset/model/info/{}?name={}&owner={}&identifier={}&is_public={}"; - String titleFormat = StrUtil.format(titleTemplate, username, modelsVotDesc.getName()); - String urlFormat = StrUtil.format(urlTemplate, modelsVotDesc.getId(), modelsVotDesc.getName(), modelsVotDesc.getOwner(), modelsVotDesc.getIdentifier(), modelsVotDesc.getIsPublic()); + String titleFormat = StrUtil.format(titleTemplate, username, model.getName()); + String urlFormat = StrUtil.format(urlTemplate, model.getId(), model.getName(), model.getOwner(), model.getIdentifier(), model.getIsPublic()); approvalRequest.setTitle(titleFormat); approvalRequest.setUrl(urlFormat); - approvalRequest.setContent(JSON.toJSONString(modelsVotDesc)); + approvalRequest.setContent(JSON.toJSONString(model)); approvalInfoMapper.insertApproval(approvalRequest); return "发布成功,待管理员审核"; } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl.java index 7da5b113..cc9329d1 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl.java @@ -137,8 +137,8 @@ public class NewDatasetServiceImpl implements NewDatasetService { //modelsVo复制信息到newModel BeanUtils.copyProperties(datasetVo, newDataset); ConvertUtil.setCommonFields(newDataset, true); - int id = newDatasetDao.save(newDataset); - datasetVo.setId(id); + newDatasetDao.save(newDataset); + datasetVo.setId(newDataset.getId()); return datasetVo; } @@ -265,9 +265,6 @@ public class NewDatasetServiceImpl implements NewDatasetService { datasetVo.setVersion(nextVersion); } -// NewDataset dataset = newDatasetDao.getDatasetById((Integer) datasetVo.getId()); -// datasetVo.setGitId(dataset.getGitId()); - String token = gitService.checkoutToken(); Jedis jedis = new Jedis(redisHost, redisPort); LoginUser loginUser = SecurityUtils.getLoginUser(); @@ -406,30 +403,28 @@ public class NewDatasetServiceImpl implements NewDatasetService { } @Override - public String praise(NewDatasetVo datasetVo, HttpServletRequest request) throws Exception { - if (datasetVo.getIsHotStone()) { - hotStoneService.praiseHotStoneDataset(datasetVo.getHotStoneId(), request); + public String praise(Integer id, HttpServletRequest request) throws Exception { + NewDataset dataset = newDatasetDao.getDatasetById(id); + if (dataset.getIsHotStone()) { + hotStoneService.praiseHotStoneDataset(dataset.getHotStoneId(), request); } else { - gitService.praiseProject(datasetVo.getGitId(), datasetVo.getIdentifier()); + gitService.praiseProject(dataset.getGitId(), dataset.getIdentifier()); } //落表 - NewDataset dataset = new NewDataset(); - BeanUtils.copyProperties(datasetVo, dataset); dataset.setPraisesCount(dataset.getPraisesCount() + 1); newDatasetService1.edit(dataset); return "点赞成功"; } @Override - public String unpraise(NewDatasetVo datasetVo, HttpServletRequest request) throws Exception { - if (datasetVo.getIsHotStone()) { - hotStoneService.unpraiseHotStoneDataset(datasetVo.getHotStoneId(), request); + public String unpraise(Integer id, HttpServletRequest request) throws Exception { + NewDataset dataset = newDatasetDao.getDatasetById(id); + if (dataset.getIsHotStone()) { + hotStoneService.unpraiseHotStoneDataset(dataset.getHotStoneId(), request); } else { - gitService.unpraiseProject(datasetVo.getGitId(), datasetVo.getIdentifier()); + gitService.unpraiseProject(dataset.getGitId(), dataset.getIdentifier()); } //落表 - NewDataset dataset = new NewDataset(); - BeanUtils.copyProperties(datasetVo, dataset); dataset.setPraisesCount(dataset.getPraisesCount() - 1); newDatasetService1.edit(dataset); return "取消点赞成功"; @@ -581,7 +576,7 @@ public class NewDatasetServiceImpl implements NewDatasetService { LoginUser loginUser = SecurityUtils.getLoginUser(); String ci4sUsername = loginUser.getUsername(); - dvcUtils.deleteDirectory(localPathlocal + "/" + ci4sUsername + "/datasets/" + repoId + "/" + repo); + dvcUtils.deleteDirectory(localPathlocal + "/" + ci4sUsername + "/datasets/" + repoId); } @Override @@ -652,7 +647,7 @@ public class NewDatasetServiceImpl implements NewDatasetService { InputStream inputStream = HttpUtils.getIntputStream(labellocalUrl + "/api/projects/" + labelDatasetVersionVo.getProjectId() + "/export?exportType=" + labelDatasetVersionVo.getExportType(), headers); // 2. 直接保存zip文件,不要重新打包 - String zipFileName = labelDatasetVersionVo.getName() + "_" + labelDatasetVersionVo.getVersion() + ".zip"; + String zipFileName = labelDatasetVersionVo.getName() + "_" + DateUtils.getTime() + ".zip"; // 将InputStream转换为byte数组 ByteArrayOutputStream baos = new ByteArrayOutputStream(); @@ -689,6 +684,7 @@ public class NewDatasetServiceImpl implements NewDatasetService { datasetVersionVos.add(versionVo); } newDatasetVo.setDatasetVersionVos(datasetVersionVos); + newDatasetVo.setGitId(newDatasetDao.getDatasetById((Integer) newDatasetVo.getId()).getGitId()); // 调用新增版本方法 return newCreateVersion(newDatasetVo); } @@ -863,14 +859,14 @@ public class NewDatasetServiceImpl implements NewDatasetService { @Override public String publish(NewDatasetVo datasetVo, LoginUser loginUser, HttpServletRequest request) throws Exception { + NewDataset dataset = newDatasetDao.getDatasetById((Integer) datasetVo.getId()); Set roles = loginUser.getRoles(); if (roles.contains("admin")) { //无需审批,直接通过 - privateToPublic(datasetVo, request); + privateToPublic(dataset, request); return "发布成功"; } - NewDatasetVo newDatasetDesc = getNewDatasetDesc((int) datasetVo.getId(), datasetVo.getName(), datasetVo.getIdentifier(), datasetVo.getOwner(), null, false); String username = loginUser.getUsername(); Long userid = loginUser.getUserid(); ApprovalRequest approvalRequest = new ApprovalRequest(); @@ -883,57 +879,57 @@ public class NewDatasetServiceImpl implements NewDatasetService { String titleTemplate = "{}发布的数据集\"{}\"需要审核,请查看"; String urlTemplate = "/dataset/dataset/info/{}?name={}&owner={}&identifier={}&is_public={}"; - String titleFormat = StrUtil.format(titleTemplate, username, newDatasetDesc.getName()); - String urlFormat = StrUtil.format(urlTemplate, newDatasetDesc.getId(), newDatasetDesc.getName(), newDatasetDesc.getOwner(), newDatasetDesc.getIdentifier(), newDatasetDesc.getIsPublic()); + String titleFormat = StrUtil.format(titleTemplate, username, dataset.getName()); + String urlFormat = StrUtil.format(urlTemplate, dataset.getId(), dataset.getName(), dataset.getOwner(), dataset.getIdentifier(), dataset.getIsPublic()); approvalRequest.setTitle(titleFormat); approvalRequest.setUrl(urlFormat); - approvalRequest.setContent(JSON.toJSONString(newDatasetDesc)); + approvalRequest.setContent(JSON.toJSONString(dataset)); approvalInfoMapper.insertApproval(approvalRequest); return "发布成功,待管理员审核"; } @Override - public void privateToPublic(NewDatasetVo newDatasetVo, HttpServletRequest request) throws Exception { - if (!newDatasetVo.getIsHotStone()) { - hotStoneService.publicHotStoneDataset((String) newDatasetVo.getId(), request); - newDatasetDao.updatePublicByHotStoneId((String) newDatasetVo.getId()); + public void privateToPublic(NewDataset dataset, HttpServletRequest request) throws Exception { + if (dataset.getIsHotStone()) { + hotStoneService.publicHotStoneDataset(dataset.getHotStoneId(), request); } else { - toPublic(newDatasetVo); + toPublic(dataset); } + newDatasetDao.edit(dataset.setIsPublic(true)); } - private void toPublic(NewDatasetVo newDatasetVo) { + private void toPublic(NewDataset newDataset) { try { //获取版本列表信息,每一个版本的配置文件都要更改 String token = gitService.checkoutToken(); - List> brancheList = gitService.getBrancheList(token, newDatasetVo.getOwner(), newDatasetVo.getIdentifier()); + List> brancheList = gitService.getBrancheList(token, newDataset.getOwner(), newDataset.getIdentifier()); for (Map branch : brancheList) { if (branch.get("name").equals("master")) { continue; } //获取每个版本的配置信息 - Map branchConfig = YamlUtils.loadYamlFile(localPathlocal + newDatasetVo.getOwner() + "/datasets/" + newDatasetVo.getId() + "/" + newDatasetVo.getIdentifier() + "/" + branch.get("name") + "/dataset.yaml"); + Map branchConfig = YamlUtils.loadYamlFile(localPathlocal + newDataset.getOwner() + "/datasets/" + newDataset.getGitId() + "/" + newDataset.getIdentifier() + "/" + branch.get("name") + "/dataset.yaml"); branchConfig.put("is_public", true); //更新每个版本的配置信息 - String repositoryName = newDatasetVo.getIdentifier(); + String repositoryName = newDataset.getIdentifier(); String branchName = StrUtil.toString(branch.get("name")); - String relatePath = newDatasetVo.getOwner() + "/datasets/" + newDatasetVo.getId() + "/" + repositoryName + "/" + branchName; + String relatePath = newDataset.getOwner() + "/datasets/" + newDataset.getGitId() + "/" + repositoryName + "/" + branchName; String localPath = localPathlocal + relatePath; YamlUtils.generateYamlFile(JsonUtils.objectToMap(branchConfig), localPath, "dataset"); } - Map projectDetail = gitService.getProjectDetail(newDatasetVo.getOwner(), newDatasetVo.getIdentifier(), token); + Map projectDetail = gitService.getProjectDetail(newDataset.getOwner(), newDataset.getIdentifier(), token); Map param = new HashMap<>(); param.put("private", false); param.put("name", projectDetail.get("name")); param.put("project_name", projectDetail.get("name")); - param.put("project_identifier", newDatasetVo.getIdentifier()); - param.put("identifier", newDatasetVo.getIdentifier()); - gitService.updateProjectDetail(param, newDatasetVo.getOwner(), newDatasetVo.getIdentifier(), token); + param.put("project_identifier", newDataset.getIdentifier()); + param.put("identifier", newDataset.getIdentifier()); + gitService.updateProjectDetail(param, newDataset.getOwner(), newDataset.getIdentifier(), token); } catch (Exception e) { - logger.error("toPublic failed,e={},newDatasetVo={}", e.getMessage(), newDatasetVo); + logger.error("toPublic failed,e={},newDataset={}", e.getMessage(), newDataset); } } diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl1.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl1.java index a35cc1c6..b006878e 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl1.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewDatasetServiceImpl1.java @@ -164,6 +164,7 @@ public class NewDatasetServiceImpl1 implements NewDatasetService1 { NewDataset newDataset = new NewDataset(); //modelsVo复制信息到newModel BeanUtils.copyProperties(datasetVo, newDataset); + newDataset.setId((Integer) datasetVo.getId()); setCommonFields(newDataset,false); edit(newDataset); taskExecutor.execute(() -> { diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewModelServiceImpl.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewModelServiceImpl.java index ca0dc1a9..2e706f30 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewModelServiceImpl.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/service/impl/NewModelServiceImpl.java @@ -178,6 +178,7 @@ public class NewModelServiceImpl implements NewModelService { NewModel newModel = new NewModel(); //modelsVo复制信息到newModel BeanUtils.copyProperties(modelsVo, newModel); + newModel.setId((Integer) modelsVo.getId()); setCommonFields(newModel,false); edit(newModel); taskExecutor.execute(() -> { diff --git a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/FileUtil.java b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/FileUtil.java index 2a4961fd..35fdd6c3 100644 --- a/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/FileUtil.java +++ b/ruoyi-modules/management-platform/src/main/java/com/ruoyi/platform/utils/FileUtil.java @@ -59,7 +59,6 @@ public class FileUtil { return directory.exists() && directory.isDirectory(); } - public static long getFolderSize(File folder) { long size = 0; File[] files = folder.listFiles(); // 获取文件夹下所有文件和子目录 diff --git a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/NewDatasetDaoMapper.xml b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/NewDatasetDaoMapper.xml index 0aa4ab7b..4720af53 100644 --- a/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/NewDatasetDaoMapper.xml +++ b/ruoyi-modules/management-platform/src/main/resources/mapper/managementPlatform/NewDatasetDaoMapper.xml @@ -50,6 +50,9 @@ update_by = #{dataset.updateBy}, + + praises_count = #{dataset.praisesCount}, + state = #{dataset.state}, @@ -95,7 +98,7 @@ select * from new_model - order by create_time desc + order by praises_count desc, update_time desc limit #{pageable.offset}, #{pageable.pageSize}