From b7d81b000b647b1e2264fd32bded367b5ecf4ccc Mon Sep 17 00:00:00 2001 From: cp3hnu Date: Fri, 13 Sep 2024 08:32:39 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=8C=E6=88=90=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E6=94=B9=E9=80=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- react-ui/src/components/BasicInfo/index.less | 51 ++++++---- react-ui/src/components/BasicInfo/index.tsx | 64 +++++++++++-- .../src/components/ErrorBoundary/index.less | 0 .../src/components/ErrorBoundary/index.tsx | 0 react-ui/src/components/KFEmpty/index.less | 3 +- react-ui/src/components/KFEmpty/index.tsx | 12 +-- .../src/components/ParameterSelect/config.tsx | 2 +- react-ui/src/pages/404.tsx | 4 +- react-ui/src/pages/CodeConfig/List/index.tsx | 3 + .../components/AddDatasetModal/index.tsx | 16 +++- .../components/AddModelModal/index.tsx | 80 ++++++++++------ .../components/AddVersionModal/index.tsx | 6 +- .../Dataset/components/ResourceInfo/index.tsx | 18 ++-- .../components/ResourceIntro/index.tsx | 96 ++++++++++++++++++- .../Dataset/components/ResourceItem/index.tsx | 2 +- .../Dataset/components/ResourceList/index.tsx | 13 ++- .../components/ResourceVersion/index.tsx | 5 +- react-ui/src/pages/Dataset/config.tsx | 69 ++++++------- .../components/ExportModelModal/index.tsx | 8 +- .../Model/components/ModelEvolution/index.tsx | 20 +--- react-ui/src/pages/Model/intro.tsx | 8 +- .../ResourceSelectorModal/config.tsx | 31 +++--- .../ResourceSelectorModal/index.less | 10 +- .../ResourceSelectorModal/index.tsx | 17 ++-- react-ui/src/pages/missingPage.jsx | 4 +- react-ui/src/requestConfig.ts | 1 + react-ui/src/services/dataset/index.js | 69 +++++-------- react-ui/src/utils/index.ts | 10 ++ 28 files changed, 383 insertions(+), 239 deletions(-) create mode 100644 react-ui/src/components/ErrorBoundary/index.less create mode 100644 react-ui/src/components/ErrorBoundary/index.tsx diff --git a/react-ui/src/components/BasicInfo/index.less b/react-ui/src/components/BasicInfo/index.less index 0a07e4aa..dd4d1ab1 100644 --- a/react-ui/src/components/BasicInfo/index.less +++ b/react-ui/src/components/BasicInfo/index.less @@ -5,31 +5,40 @@ gap: 20px 40px; align-items: flex-start; width: 80%; +} - &__item { - display: flex; - align-items: flex-start; - width: calc(50% - 20px); - font-size: 16px; - line-height: 1.6; +.kf-basic-info-item { + display: flex; + align-items: flex-start; + width: calc(50% - 20px); + font-size: 16px; + line-height: 1.6; - &__label { - width: 100px; - color: @text-color-secondary; - text-align: justify; - text-align-last: justify; + &__label { + position: relative; + color: @text-color-secondary; + text-align: justify; + text-align-last: justify; + + &::after { + position: absolute; + content: ':'; } + } - &__value { - display: flex; - flex: 1; - color: @text-color; - word-break: break-all; + &__value { + flex: 1; + margin-left: 16px; + white-space: pre-line; + word-break: break-all; + } - &::before { - margin-right: 16px; - content: ':'; - } - } + &__text { + color: @text-color; + } + + &__link:hover { + text-decoration: underline @underline-color; + text-underline-offset: 3px; } } diff --git a/react-ui/src/components/BasicInfo/index.tsx b/react-ui/src/components/BasicInfo/index.tsx index d0253dd8..8cfee0ae 100644 --- a/react-ui/src/components/BasicInfo/index.tsx +++ b/react-ui/src/components/BasicInfo/index.tsx @@ -1,27 +1,73 @@ +import { isEmptyString } from '@/utils'; +import { Link } from '@umijs/max'; +import classNames from 'classnames'; import './index.less'; + export type BasicInfoData = { label: string; value?: any; - format?: (_value: any) => string; + link?: string; + externalLink?: string; + format?: (_value?: any) => string | undefined; }; type BasicInfoProps = { datas: BasicInfoData[]; + className?: string; + style?: React.CSSProperties; + labelWidth?: number; }; -function BasicInfo({ datas }: BasicInfoProps) { +function BasicInfo({ datas, className, style, labelWidth = 100 }: BasicInfoProps) { return ( -
+
{datas.map((item) => ( -
-
{item.label}
-
- {item.format ? item.format(item.value) ?? '--' : item.value ?? '--'} -
-
+ ))}
); } +type BasicInfoItemProps = { + data: BasicInfoData; + labelWidth?: number; +}; +function BasicInfoItem({ data, labelWidth = 100 }: BasicInfoItemProps) { + const { label, value, externalLink, link, format } = data; + const showValue = format ? format(value) : value; + let valueComponent = undefined; + if (externalLink && showValue) { + valueComponent = ( + + {showValue} + + ); + } else if (link && showValue) { + valueComponent = ( + + {showValue} + + ); + } else { + valueComponent = ( +
+ {isEmptyString(showValue) ? '--' : showValue} +
+ ); + } + return ( +
+
+ {label} +
+ {valueComponent} +
+ ); +} + export default BasicInfo; diff --git a/react-ui/src/components/ErrorBoundary/index.less b/react-ui/src/components/ErrorBoundary/index.less new file mode 100644 index 00000000..e69de29b diff --git a/react-ui/src/components/ErrorBoundary/index.tsx b/react-ui/src/components/ErrorBoundary/index.tsx new file mode 100644 index 00000000..e69de29b diff --git a/react-ui/src/components/KFEmpty/index.less b/react-ui/src/components/KFEmpty/index.less index 9a9cc689..e62edff5 100644 --- a/react-ui/src/components/KFEmpty/index.less +++ b/react-ui/src/components/KFEmpty/index.less @@ -7,7 +7,6 @@ &__image { width: 475px; - height: 292px; } &__title { @@ -15,7 +14,6 @@ color: @text-color; font-weight: 500; font-size: 30px; - letter-spacing: 5px; text-align: center; } @@ -32,6 +30,7 @@ align-items: center; justify-content: center; margin-top: 20px; + margin-bottom: 30px; &__back-btn { height: 32px; diff --git a/react-ui/src/components/KFEmpty/index.tsx b/react-ui/src/components/KFEmpty/index.tsx index 492de75c..e9bc79e1 100644 --- a/react-ui/src/components/KFEmpty/index.tsx +++ b/react-ui/src/components/KFEmpty/index.tsx @@ -16,8 +16,8 @@ type EmptyProps = { content?: string; hasFooter?: boolean; footer?: () => React.ReactNode; - backTitle?: string; - onBack?: () => void; + buttonTitle?: string; + onRefresh?: () => void; }; function getEmptyImage(type: EmptyType) { @@ -39,8 +39,8 @@ function KFEmpty({ content, hasFooter = false, footer, - backTitle = '返回', - onBack, + buttonTitle = '刷新', + onRefresh, }: EmptyProps) { const image = getEmptyImage(type); @@ -54,8 +54,8 @@ function KFEmpty({ {footer ? ( footer() ) : ( - )}
diff --git a/react-ui/src/components/ParameterSelect/config.tsx b/react-ui/src/components/ParameterSelect/config.tsx index eae63ec2..689f618d 100644 --- a/react-ui/src/components/ParameterSelect/config.tsx +++ b/react-ui/src/components/ParameterSelect/config.tsx @@ -14,7 +14,7 @@ const filterResourceStandard: SelectProps['filterOpti }; // id 从 number 转换为 string -const convertId = (item: any) => ({ ...item, id: String(item.id) }); +const convertId = (item: any) => ({ ...item, id: `${item.id}-${item.identifier}` }); export type SelectPropsConfig = { getOptions: () => Promise; // 获取下拉数据 diff --git a/react-ui/src/pages/404.tsx b/react-ui/src/pages/404.tsx index 23242d56..dbacba53 100644 --- a/react-ui/src/pages/404.tsx +++ b/react-ui/src/pages/404.tsx @@ -11,8 +11,8 @@ const NoFoundPage = () => { title="404" content={'很抱歉,您访问的页面地址有误,\n或者该页面不存在。'} hasFooter={true} - backTitle="返回首页" - onBack={() => navigate('/')} + buttonTitle="返回首页" + onRefresh={() => navigate('/')} > ); }; diff --git a/react-ui/src/pages/CodeConfig/List/index.tsx b/react-ui/src/pages/CodeConfig/List/index.tsx index 1a307751..b61e9016 100644 --- a/react-ui/src/pages/CodeConfig/List/index.tsx +++ b/react-ui/src/pages/CodeConfig/List/index.tsx @@ -171,6 +171,9 @@ function CodeConfigList() { className={styles['code-config-list__empty']} type={EmptyType.NoData} title="暂无数据" + content={'很抱歉,没有搜索到您想要的内容\n建议刷新试试'} + hasFooter={true} + onRefresh={getDataList} /> )} diff --git a/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx b/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx index bf3dc0d1..1d825896 100644 --- a/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx +++ b/react-ui/src/pages/Dataset/components/AddDatasetModal/index.tsx @@ -1,7 +1,8 @@ import { getAccessToken } from '@/access'; import KFIcon from '@/components/KFIcon'; import KFModal from '@/components/KFModal'; -import { addDateset } from '@/services/dataset/index.js'; +import { CategoryData, ResourceType, resourceConfig } from '@/pages/Dataset/config'; +import { addDataset } from '@/services/dataset/index.js'; import { to } from '@/utils/promise'; import { getFileListFromEvent, validateUploadFiles } from '@/utils/ui'; import { @@ -18,7 +19,6 @@ import { } from 'antd'; import { omit } from 'lodash'; import { useState } from 'react'; -import { CategoryData } from '../../config'; import styles from './index.less'; interface AddDatasetModalProps extends Omit { @@ -37,7 +37,7 @@ function AddDatasetModal({ typeList, tagList, onOk, ...rest }: AddDatasetModalPr // 上传组件参数 const uploadProps: UploadProps = { - action: '/api/mmp/newdataset/upload', + action: resourceConfig[ResourceType.Dataset].uploadAction, headers: { Authorization: getAccessToken() || '', }, @@ -54,7 +54,7 @@ function AddDatasetModal({ typeList, tagList, onOk, ...rest }: AddDatasetModalPr // 上传请求 const createDataset = async (params: any) => { - const [res] = await to(addDateset(params)); + const [res] = await to(addDataset(params)); if (res) { message.success('创建成功'); onOk?.(); @@ -120,6 +120,14 @@ function AddDatasetModal({ typeList, tagList, onOk, ...rest }: AddDatasetModalPr required: true, message: '请输入数据集版本', }, + { + validator: (_rule, value) => { + if (value === 'master') { + return Promise.reject(`版本不能为 master`); + } + return Promise.resolve(); + }, + }, ]} > diff --git a/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx b/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx index 7d7758e7..af08aadf 100644 --- a/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx +++ b/react-ui/src/pages/Dataset/components/AddModelModal/index.tsx @@ -1,7 +1,7 @@ import { getAccessToken } from '@/access'; import KFIcon from '@/components/KFIcon'; import KFModal from '@/components/KFModal'; -import { CategoryData } from '@/pages/Dataset/config'; +import { CategoryData, ResourceType, resourceConfig } from '@/pages/Dataset/config'; import { addModel } from '@/services/dataset/index.js'; import { to } from '@/utils/promise'; import { getFileListFromEvent, validateUploadFiles } from '@/utils/ui'; @@ -9,6 +9,7 @@ import { Button, Form, Input, + Radio, Select, Upload, UploadFile, @@ -31,7 +32,7 @@ function AddModelModal({ typeList, tagList, onOk, ...rest }: AddModelModalProps) // 上传组件参数 const uploadProps: UploadProps = { - action: '/api/mmp/models/upload', + action: resourceConfig[ResourceType.Model].uploadAction, headers: { Authorization: getAccessToken() || '', }, @@ -53,7 +54,7 @@ function AddModelModal({ typeList, tagList, onOk, ...rest }: AddModelModalProps) if (validateUploadFiles(fileList)) { const params = { ...omit(formData, ['fileList']), - models_version_vos: fileList.map((item) => { + model_version_vos: fileList.map((item) => { const data = item.response?.data?.[0] ?? {}; return { file_name: data.fileName, @@ -77,7 +78,13 @@ function AddModelModal({ typeList, tagList, onOk, ...rest }: AddModelModalProps) form: 'form', }} > -
+ - + - - - - { + if (value === 'master') { + return Promise.reject(`版本不能为 master`); + } + return Promise.resolve(); + }, }, ]} > - + - {/* - - 仅自己可见 - 工作空间可见 - - */}
diff --git a/react-ui/src/pages/Model/intro.tsx b/react-ui/src/pages/Model/intro.tsx index 6e62d53a..cc6e317a 100644 --- a/react-ui/src/pages/Model/intro.tsx +++ b/react-ui/src/pages/Model/intro.tsx @@ -1,8 +1,8 @@ -import ResourceIntro from '@/pages/Dataset/components/ResourceIntro'; +import ResourceInfo from '@/pages/Dataset/components/ResourceInfo'; import { ResourceType } from '@/pages/Dataset/config'; -function ModelIntro() { - return ; +function ModelInfo() { + return ; } -export default ModelIntro; +export default ModelInfo; diff --git a/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/config.tsx b/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/config.tsx index c1619ad0..d955d4ae 100644 --- a/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/config.tsx +++ b/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/config.tsx @@ -9,9 +9,9 @@ import { getDatasetInfo, getDatasetList, getDatasetVersionList, + getModelInfo, getModelList, - getModelVersionIdList, - getModelVersionsById, + getModelVersionList, } from '@/services/dataset/index.js'; import { getMirrorListReq, getMirrorVersionListReq } from '@/services/mirror'; import type { TabsProps, TreeDataNode } from 'antd'; @@ -121,7 +121,7 @@ const convertMirrorVersionToTreeData = ( // export const selectorTypeConfig: Record = { // [ResourceSelectorType.Model]: { // getList: getModelList, -// getVersions: getModelVersionsById, +// getVersions: getModelVersionList, // getFiles: getModelVersionIdList, // name: '模型', @@ -226,7 +226,6 @@ export class DatasetSelector implements SelectorTypeInfo { } } async getVersions(parentKey: string, parentNode: ResourceData) { - // const obj = parseDatasetVersionId(id); const res = await getDatasetVersionList(pick(parentNode, ['owner', 'identifier'])); if (res && res.data) { const list = res.data; @@ -237,7 +236,6 @@ export class DatasetSelector implements SelectorTypeInfo { } async getFiles(_parentKey: string, parentNode: ResourceData & ResourceVersionData) { - //const obj = parseDatasetVersionId(parentKey); const params = pick(parentNode, ['owner', 'identifier', 'id', 'name', 'version']); const res = await getDatasetInfo(params); if (res && res.data) { @@ -275,32 +273,31 @@ export class ModelSelector implements SelectorTypeInfo { const list = res.data.content || []; return convertDatasetToTreeData(list); } else { - return Promise.reject('获取数据集列表失败'); + return Promise.reject('获取模型列表失败'); } } async getVersions(key: string, parentNode: ResourceData) { - //const obj = parseDatasetVersionId(id); - const res = await getModelVersionIdList(pick(parentNode, ['owner', 'identifier'])); + const res = await getModelVersionList(pick(parentNode, ['owner', 'identifier'])); if (res && res.data) { - const list = res.data.content || []; + const list = res.data; return convertDatasetVersionToTreeData(key, parentNode, list); } else { - return Promise.reject('获取数据集版本列表失败'); + return Promise.reject('获取模型版本列表失败'); } } async getFiles(_parentKey: string, parentNode: ResourceData & ResourceVersionData) { - // const obj = parseDatasetVersionId(id); const params = pick(parentNode, ['owner', 'identifier', 'id', 'name', 'version']); - const res = await getModelVersionsById(params); + const res = await getModelInfo(params); if (res && res.data) { - const list = res.data.dataset_version_vos || []; + const path = res.data.relative_paths || ''; + const list = res.data.model_version_vos || []; return { - path: res.data.path || '', + path, content: list, }; } else { - return Promise.reject('获取数据集文件列表失败'); + return Promise.reject('获取模型文件列表失败'); } } } @@ -348,13 +345,13 @@ export class MirrorSelector implements SelectorTypeInfo { } } - async getFiles(parentKey: string, parentNode: MirrorVersionData) { + async getFiles(_parentKey: string, parentNode: MirrorVersionData) { const { url } = parentNode; return { path: url, content: [ { - id: parentKey, + url: url, file_name: `${url}`, }, ], diff --git a/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.less b/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.less index 64aaad64..e7c5ee8d 100644 --- a/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.less +++ b/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.less @@ -34,6 +34,11 @@ border-bottom: 1px solid @border-color-secondary; border-radius: 0; } + + &__tree-title { + display: inline-block; + .singleLine(); + } } &__right { @@ -67,8 +72,3 @@ } } } - -.kf-tree-title { - display: inline-block; - .singleLine(); -} diff --git a/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.tsx b/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.tsx index 4c7d33b9..c94db87f 100644 --- a/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.tsx +++ b/react-ui/src/pages/Pipeline/components/ResourceSelectorModal/index.tsx @@ -6,6 +6,7 @@ import KFModal from '@/components/KFModal'; import { CommonTabKeys } from '@/enums'; +import { ResourceFileData } from '@/pages/Dataset/config'; import { to } from '@/utils/promise'; import { Icon } from '@umijs/max'; import type { GetRef, ModalProps, TreeDataNode, TreeProps } from 'antd'; @@ -24,11 +25,6 @@ export type ResourceSelectorResponse = { activeTab: CommonTabKeys; // 是我的还是公开的 }; -type ResourceFile = { - id: number; // 文件 id - file_name: string; // 文件 name -}; - export interface ResourceSelectorModalProps extends Omit { type: ResourceSelectorType; // 数据集\模型\镜像 defaultExpandedKeys?: React.Key[]; @@ -76,7 +72,7 @@ function ResourceSelectorModal({ const [checkedKeys, setCheckedKeys] = useState([]); const [loadedKeys, setLoadedKeys] = useState([]); const [originTreeData, setOriginTreeData] = useState([]); - const [files, setFiles] = useState([]); + const [files, setFiles] = useState([]); const [versionPath, setVersionPath] = useState(''); const [searchText, setSearchText] = useState(''); const [firstLoadList, setFirstLoadList] = useState(false); @@ -175,6 +171,7 @@ function ResourceSelectorModal({ const lastNode = checkedNodes[checkedNodes.length - 1]; getFiles(last, lastNode); } else { + setVersionPath(''); setFiles([]); } }; @@ -278,26 +275,24 @@ function ResourceSelectorModal({ loadedKeys={loadedKeys} expandedKeys={expandedKeys} onExpand={onExpand} + checkable titleRender={(nodeData) => { - console.log(nodeData); - return ( {nodeData.title as string} ); }} - checkable />
{fileTitle}
{files.map((v) => ( -
+
{v.file_name}
))} diff --git a/react-ui/src/pages/missingPage.jsx b/react-ui/src/pages/missingPage.jsx index 89250f98..e8e034a4 100644 --- a/react-ui/src/pages/missingPage.jsx +++ b/react-ui/src/pages/missingPage.jsx @@ -11,8 +11,8 @@ const MissingPage = () => { title="敬请期待~" content={'很抱歉,您访问的正在开发中,\n请耐心等待。'} hasFooter={true} - backTitle="返回首页" - onBack={() => navigate('/')} + buttonTitle="返回首页" + onRefresh={() => navigate('/')} > ); }; diff --git a/react-ui/src/requestConfig.ts b/react-ui/src/requestConfig.ts index 5e02e678..df1c2bc6 100644 --- a/react-ui/src/requestConfig.ts +++ b/react-ui/src/requestConfig.ts @@ -26,6 +26,7 @@ const popupError = (error: string, skipErrorHandler: boolean | undefined = false * @doc https://umijs.org/docs/max/request#配置 */ export const requestConfig: RequestConfig = { + timeout: 120 * 1000, requestInterceptors: [ (url: string, options: AxiosRequestConfig) => { const headers = options.headers ?? {}; diff --git a/react-ui/src/services/dataset/index.js b/react-ui/src/services/dataset/index.js index dec43db8..12e8f5a2 100644 --- a/react-ui/src/services/dataset/index.js +++ b/react-ui/src/services/dataset/index.js @@ -27,12 +27,9 @@ export function getDatasetInfo(params) { } // 新增数据集 -export function addDateset(data) { +export function addDataset(data) { return request(`/api/mmp/newdataset/addDatasetAndVersion`, { method: 'POST', - headers: { - 'Content-Type': 'application/json;charset=UTF-8', - }, data, }); } @@ -54,21 +51,10 @@ export function getDatasetVersionList(params) { }); } -// 查询数据集版本文件列表 -// export function getDatasetVersionFiles(params) { -// return request(`/api/mmp/datasetVersion/versions`, { -// method: 'GET', -// params, -// }); -// } - // 新增数据集版本 export function addDatasetVersion(data) { return request(`/api/mmp/newdataset/addVersion`, { method: 'POST', - headers: { - 'Content-Type': 'application/json;charset=UTF-8', - }, data, }); } @@ -101,7 +87,7 @@ export function deleteDatasetVersion(params) { // 分页查询模型列表 export function getModelList(params) { - return request(`/api/mmp/models`, { + return request(`/api/mmp/newmodel/queryModels`, { method: 'GET', params, }); @@ -109,68 +95,59 @@ export function getModelList(params) { // 新增模型 export function addModel(data) { - return request(`/api/mmp/models/addModelAndVersion`, { + return request(`/api/mmp/newmodel/addModel`, { method: 'POST', - headers: { - 'Content-Type': 'application/json;charset=UTF-8', - }, data, }); } -// 查询模型简介 -export function getModelById(id) { - return request(`/api/mmp/models/${id}`, { - method: 'GET', +// 删除模型 +export function deleteModel(params) { + return request(`/api/mmp/newmodel/delete`, { + method: 'DELETE', + params, }); } -// 查询模型版本列表 -export function getModelVersionsById(id) { - return request(`/api/mmp/models/versions/${id}`, { + +// 查询模型详情 +export function getModelInfo(params) { + return request(`/api/mmp/newmodel/getModelDetail`, { method: 'GET', + params, }); } -// 根据版本查询文件列表 -export function getModelVersionIdList(params) { - return request(`/api/mmp/modelsVersion/versions`, { +// 查询模型版本列表 +export function getModelVersionList(params) { + return request(`/api/mmp/newmodel/getVersionList`, { method: 'GET', params, }); } // 新增模型版本 -export function addModelsVersionDetail(data) { - return request(`/api/mmp/modelsVersion/addModelVersions`, { +export function addModelVersion(data) { + return request(`/api/mmp/newmodel/addVersion`, { method: 'POST', - headers: { - 'Content-Type': 'application/json;charset=UTF-8', - }, data, }); } -// 删除模型 -export function deleteModel(id) { - return request(`/api/mmp/models/${id}`, { - method: 'DELETE', - }); -} // 删除模型版本 export function deleteModelVersion(params) { - return request(`/api/mmp/modelsVersion/deleteVersion`, { + return request(`/api/mmp/newmodel/deleteVersion`, { method: 'DELETE', params, }); } // 获取模型依赖 -export function getModelAtlasReq(data) { - return request(`/api/mmp/modelDependency/queryModelAtlas`, { - method: 'POST', - data +export function getModelAtlasReq(params) { + return request(`/api/mmp/newmodel/getModelDependencyTree`, { + method: 'GET', + params }); } diff --git a/react-ui/src/utils/index.ts b/react-ui/src/utils/index.ts index b1111521..8ef057ba 100644 --- a/react-ui/src/utils/index.ts +++ b/react-ui/src/utils/index.ts @@ -190,3 +190,13 @@ export const fittingString = (str: string, maxWidth: number, fontSize: number) = }); return res; }; + +/** + * Checks if a given string is empty, undefined, or null. + * + * @param {any} str - the string to be checked + * @return {boolean} true if the string is empty, undefined, or null, false otherwise + */ +export const isEmptyString = (str: any): boolean => { + return str === '' || str === undefined || str === null; +};