From 126e0cb7a5eeeb502154437b748c3da1f7c77bdc Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Thu, 10 Oct 2024 14:59:08 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=88=9B=E5=BB=BA=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E4=B9=8B=E5=90=8E=E6=8F=90=E7=A4=BA=E5=8E=BB=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/src/assets/img/comfirm-icon.png | Bin 0 -> 22272 bytes .../src/components/KFConfirmModal/index.less | 7 +++ .../src/components/KFConfirmModal/index.tsx | 37 +++++++++++++ react-ui/src/enums/index.ts | 2 +- .../ModelDeployment/CreateService/index.tsx | 7 ++- .../ModelDeployment/CreateVersion/index.tsx | 26 ++++++++-- .../src/pages/ModelDeployment/List/index.tsx | 49 +++++++++++++++++- .../ModelDeployment/ServiceInfo/index.tsx | 10 +++- .../ModelDeployStatusCell/index.tsx | 2 +- .../components/ServerLog/index.tsx | 2 +- .../components/UserGuide/index.tsx | 2 +- react-ui/src/pages/ModelDeployment/types.ts | 9 ++++ react-ui/src/utils/ui.tsx | 26 ++++++++-- 13 files changed, 159 insertions(+), 20 deletions(-) create mode 100644 react-ui/src/assets/img/comfirm-icon.png create mode 100644 react-ui/src/components/KFConfirmModal/index.less create mode 100644 react-ui/src/components/KFConfirmModal/index.tsx diff --git a/react-ui/src/assets/img/comfirm-icon.png b/react-ui/src/assets/img/comfirm-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b0eebfe8f1f5644a05a6ec52784d322281aed567 GIT binary patch literal 22272 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 p)kh?D#&}gV$*R{YWR +
{content}
+ + ); +} + +export default KFConfirmModal; diff --git a/react-ui/src/enums/index.ts b/react-ui/src/enums/index.ts index 4b3ded7b..e489515c 100644 --- a/react-ui/src/enums/index.ts +++ b/react-ui/src/enums/index.ts @@ -80,7 +80,7 @@ export enum ServiceType { export const serviceTypeOptions = [ { label: '视频', value: ServiceType.Video }, - { label: '图像', value: ServiceType.Image }, + { label: '图片', value: ServiceType.Image }, { label: '音频', value: ServiceType.Audio }, { label: '文本', value: ServiceType.Text }, ]; diff --git a/react-ui/src/pages/ModelDeployment/CreateService/index.tsx b/react-ui/src/pages/ModelDeployment/CreateService/index.tsx index a827828f..62e26412 100644 --- a/react-ui/src/pages/ModelDeployment/CreateService/index.tsx +++ b/react-ui/src/pages/ModelDeployment/CreateService/index.tsx @@ -18,7 +18,7 @@ import { useNavigate } from '@umijs/max'; import { App, Button, Col, Form, Input, Row, Select } from 'antd'; import { pick } from 'lodash'; import { useEffect, useState } from 'react'; -import { ServiceData, ServiceOperationType } from '../types'; +import { ServiceData, ServiceOperationType, createServiceVersionMessage } from '../types'; import styles from './index.less'; // 表单数据 @@ -59,9 +59,12 @@ function CreateService() { ...formData, }; const [res] = await to(request(params)); - if (res) { + if (res && res.data) { message.success('操作成功'); navigate(-1); + setTimeout(() => { + window.postMessage({ type: createServiceVersionMessage, payload: res.data.id }); + }, 500); } }; diff --git a/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx b/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx index 39013390..92ea62bd 100644 --- a/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx +++ b/react-ui/src/pages/ModelDeployment/CreateVersion/index.tsx @@ -31,7 +31,12 @@ import { useNavigate, useParams } from '@umijs/max'; import { App, Button, Col, Flex, Form, Input, Row, Select } from 'antd'; import { omit, pick } from 'lodash'; import { useEffect, useState } from 'react'; -import { ServiceData, ServiceOperationType, ServiceVersionData } from '../types'; +import { + CreateServiceVersionFrom, + ServiceData, + ServiceOperationType, + ServiceVersionData, +} from '../types'; import styles from './index.less'; // 表单数据 @@ -53,6 +58,7 @@ function CreateServiceVersion() { const [form] = Form.useForm(); const [resourceStandardList, filterResourceStandard] = useComputingResource(); const [operationType, setOperationType] = useState(ServiceOperationType.Create); + const [lastPage, setLastPage] = useState(CreateServiceVersionFrom.ServiceInfo); const { message } = App.useApp(); const [serviceInfo, setServiceInfo] = useState(undefined); const [versionInfo, setVersionInfo] = useState(undefined); @@ -60,10 +66,15 @@ function CreateServiceVersion() { const id = params.id; useEffect(() => { - const res: (ServiceVersionData & { operationType: ServiceOperationType }) | undefined = - getSessionStorageItem(serviceVersionInfoKey, true); + const res: + | (ServiceVersionData & { + operationType: ServiceOperationType; + lastPage: CreateServiceVersionFrom; + }) + | undefined = getSessionStorageItem(serviceVersionInfoKey, true); if (res) { setOperationType(res.operationType); + setLastPage(res.lastPage); setVersionInfo(res); let model, codeConfig, envVariables; if (res.model && typeof res.model === 'object') { @@ -156,7 +167,11 @@ function CreateServiceVersion() { const [res] = await to(request(params)); if (res) { message.success('操作成功'); - navigate(-1); + if (lastPage === CreateServiceVersionFrom.ServiceInfo) { + navigate(-1); + } else { + navigate(`/modelDeployment/serviceInfo/${serviceInfo?.id}`, { replace: true }); + } } }; @@ -401,7 +416,8 @@ function CreateServiceVersion() { }, { pattern: /^\/[a-zA-Z0-9._/-]+$/, - message: '请输入正确的挂载绝对路径', + message: + '请输入正确的挂载路径,以 / 开头,只支持字母、数字、点、下划线、横杠、斜杠', }, ]} > diff --git a/react-ui/src/pages/ModelDeployment/List/index.tsx b/react-ui/src/pages/ModelDeployment/List/index.tsx index f0e4cb70..238e4b40 100644 --- a/react-ui/src/pages/ModelDeployment/List/index.tsx +++ b/react-ui/src/pages/ModelDeployment/List/index.tsx @@ -12,7 +12,11 @@ import { useCacheState } from '@/hooks/pageCacheState'; import { deleteServiceReq, getServiceListReq } from '@/services/modelDeployment'; import themes from '@/styles/theme.less'; import { to } from '@/utils/promise'; -import { serviceInfoKey, setSessionStorageItem } from '@/utils/sessionStorage'; +import { + serviceInfoKey, + serviceVersionInfoKey, + setSessionStorageItem, +} from '@/utils/sessionStorage'; import { modalConfirm } from '@/utils/ui'; import { useNavigate } from '@umijs/max'; import { @@ -28,7 +32,12 @@ import { import { type SearchProps } from 'antd/es/input'; import classNames from 'classnames'; import { useEffect, useState } from 'react'; -import { ServiceData, ServiceOperationType } from '../types'; +import { + CreateServiceVersionFrom, + ServiceData, + ServiceOperationType, + createServiceVersionMessage, +} from '../types'; import styles from './index.less'; const allServiceTypeOptions = [{ label: '全部', value: '' }, ...serviceTypeOptions]; @@ -49,6 +58,13 @@ function ModelDeployment() { }, ); + useEffect(() => { + window.addEventListener('message', handleMessage); + return () => { + window.removeEventListener('message', handleMessage); + }; + }, []); + useEffect(() => { getServiceList(); }, [pagination, searchText, serviceType]); @@ -137,6 +153,35 @@ function ModelDeployment() { navigate(`/modelDeployment/serviceInfo/${record.id}`); }; + const handleMessage = (e: MessageEvent) => { + const { type, payload } = e.data; + if (type === createServiceVersionMessage) { + modalConfirm({ + title: '创建服务成功', + content: '是否创建服务版本?', + isDelete: false, + cancelText: '稍后创建', + onOk: () => { + gotoCreateServiceVersion(payload); + }, + }); + } + }; + + // 去创建服务版本 + const gotoCreateServiceVersion = (serviceId: number) => { + setSessionStorageItem( + serviceVersionInfoKey, + { + operationType: ServiceOperationType.Create, + lastPage: CreateServiceVersionFrom.CreateService, + }, + true, + ); + + navigate(`/modelDeployment/addVersion/${serviceId}`); + }; + // 分页切换 const handleTableChange: TableProps['onChange'] = (pagination, _filters, _sorter, { action }) => { if (action === 'paginate') { diff --git a/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx b/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx index 21091b5a..771a1c4f 100644 --- a/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx +++ b/react-ui/src/pages/ModelDeployment/ServiceInfo/index.tsx @@ -38,7 +38,12 @@ import { type SearchProps } from 'antd/es/input'; import classNames from 'classnames'; import { useEffect, useState } from 'react'; import ServiceRunStatusCell from '../components/ModelDeployStatusCell'; -import { ServiceData, ServiceOperationType, ServiceVersionData } from '../types'; +import { + CreateServiceVersionFrom, + ServiceData, + ServiceOperationType, + ServiceVersionData, +} from '../types'; import styles from './index.less'; const allServiceStatusOptions = [{ label: '全部', value: '' }, ...serviceStatusOptions]; @@ -171,13 +176,14 @@ function ServiceInfo() { }); }; - // 创建、更新、重启模型部署 + // 创建、更新、重启服务版本 const createServiceVersion = (type: ServiceOperationType, record?: ServiceVersionData) => { setSessionStorageItem( serviceVersionInfoKey, { ...record, operationType: type, + lastPage: CreateServiceVersionFrom.ServiceInfo, }, true, ); diff --git a/react-ui/src/pages/ModelDeployment/components/ModelDeployStatusCell/index.tsx b/react-ui/src/pages/ModelDeployment/components/ModelDeployStatusCell/index.tsx index 7029c8fd..e11f8e43 100644 --- a/react-ui/src/pages/ModelDeployment/components/ModelDeployStatusCell/index.tsx +++ b/react-ui/src/pages/ModelDeployment/components/ModelDeployStatusCell/index.tsx @@ -1,7 +1,7 @@ /* * @Author: 赵伟 * @Date: 2024-04-18 18:35:41 - * @Description: 模型部署状态 + * @Description: 服务运行状态 */ import { ServiceRunStatus } from '@/enums'; import styles from './index.less'; diff --git a/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx b/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx index ad74986f..2f6d0368 100644 --- a/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx +++ b/react-ui/src/pages/ModelDeployment/components/ServerLog/index.tsx @@ -57,7 +57,7 @@ function ServerLog({ info }: ServerLogProps) { getModelDeploymentLog(); }, [info, logTime]); - // 获取模型部署日志 + // 获取服务日志 const getModelDeploymentLog = async () => { if (info && logTime && logTime.length === 2) { const params = { diff --git a/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx b/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx index c2b73d47..8abd15be 100644 --- a/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx +++ b/react-ui/src/pages/ModelDeployment/components/UserGuide/index.tsx @@ -14,7 +14,7 @@ function UserGuide({ info }: UserGuideProps) { getModelDeploymentDocs(); }, [info]); - // 获取模型部署文档 + // 获取服务文档 const getModelDeploymentDocs = async () => { if (info) { const [res] = await to(getServiceVersionDocsReq(info.id)); diff --git a/react-ui/src/pages/ModelDeployment/types.ts b/react-ui/src/pages/ModelDeployment/types.ts index d53655b2..a932b71c 100644 --- a/react-ui/src/pages/ModelDeployment/types.ts +++ b/react-ui/src/pages/ModelDeployment/types.ts @@ -57,3 +57,12 @@ export enum ServiceOperationType { Update = 'Update', // 更新 Restart = 'Restart', // 重启 } + +// 操作类型 +export enum CreateServiceVersionFrom { + CreateService = 'CreateService', // 来自创建服务 + ServiceInfo = 'ServiceInfo', // 来自服务详情 +} + +// 去创建服务版本消息 +export const createServiceVersionMessage = 'createServiceVersion'; diff --git a/react-ui/src/utils/ui.tsx b/react-ui/src/utils/ui.tsx index 7625a771..9034a67b 100644 --- a/react-ui/src/utils/ui.tsx +++ b/react-ui/src/utils/ui.tsx @@ -10,8 +10,20 @@ import { history } from '@umijs/max'; import { Modal, message, type ModalFuncProps, type UploadFile } from 'antd'; import { closeAllModals } from './modal'; -// 自定义 Confirm 弹框 -export function modalConfirm({ title, content, onOk, ...rest }: ModalFuncProps) { +type ModalConfirmProps = ModalFuncProps & { + isDelete?: boolean; +}; + +// 自定义删除 Confirm 弹框 +export function modalConfirm({ + title, + content, + okText = '确认', + cancelText = '取消', + isDelete = true, + onOk, + ...rest +}: ModalConfirmProps) { Modal.confirm({ ...rest, width: 600, @@ -19,7 +31,11 @@ export function modalConfirm({ title, content, onOk, ...rest }: ModalFuncProps) title: (
), content: content &&
{content}
, - okText: '确认', - cancelText: '取消', + okText: okText, + cancelText: cancelText, onOk: onOk, }); }