diff --git a/react-ui/src/pages/Experiment/index.jsx b/react-ui/src/pages/Experiment/index.jsx index 057eb4e4..a35591a1 100644 --- a/react-ui/src/pages/Experiment/index.jsx +++ b/react-ui/src/pages/Experiment/index.jsx @@ -18,7 +18,7 @@ import themes from '@/styles/theme.less'; import { elapsedTime, formatDate } from '@/utils/date'; import { to } from '@/utils/promise'; import { modalConfirm } from '@/utils/ui'; -import { App, Button, ConfigProvider, Space, Table } from 'antd'; +import { App, Button, ConfigProvider, Space, Table, Tooltip } from 'antd'; import classNames from 'classnames'; import { useEffect, useRef, useState } from 'react'; import { useNavigate } from 'react-router-dom'; @@ -279,14 +279,14 @@ function Experiment() { dataIndex: 'name', key: 'name', render: (text) =>
{text}
, - width: '20%', + width: '16%', }, { title: '关联流水线名称', dataIndex: 'workflow_name', key: 'workflow_name', render: (text, record) => routeToEdit(e, record)}>{text}, - width: '20%', + width: '16%', }, { title: '实验描述', @@ -443,13 +443,17 @@ function Experiment() {
{elapsedTime(item.create_time, item.finish_time)}
-
{formatDate(item.create_time)}
+
+ + {formatDate(item.create_time)} + +
{' '} + /> void; +}; +const ModelMenu = ({ onComponentDragEnd }: ModelMenuProps) => { + const [modelMenusList, setModelMenusList] = useState([]); + const [collapseItems, setCollapseItems] = useState([]); + + useEffect(() => { + getAllComponents(); + }, []); + + // 获取所有组件 + const getAllComponents = async () => { + const [res] = await to(getComponentAll()); + if (res && res.data) { + const menus = res.data as ModelMenuData[]; + setModelMenusList(menus); + const items = menus.map((item) => { + return { + key: item.key, + label: item.name, + children: item.value.map((ele) => { + return ( +
{ + dragEnd(e, ele); + }} + className={Styles.collapseItem} + > + {ele.icon_path && ( + + )} + {ele.component_label} +
+ ); + }), + }; + }); + setCollapseItems(items); + } + }; + + const dragEnd = (e: React.DragEvent, data: PipelineNodeModel) => { + onComponentDragEnd({ + ...data, + x: e.clientX, + y: e.clientY, + label: data.component_label, + img: `/assets/images/${data.icon_path}.png`, + }); + }; + + const defaultActiveKey = modelMenusList.map((item) => item.key + ''); + return ( +
+
组件库
+ {modelMenusList.length > 0 ? ( + + ) : null} +
+ ); +}; + +export default ModelMenu; diff --git a/react-ui/src/pages/Pipeline/editPipeline/index.jsx b/react-ui/src/pages/Pipeline/editPipeline/index.jsx index 3701ff25..e02ecd0f 100644 --- a/react-ui/src/pages/Pipeline/editPipeline/index.jsx +++ b/react-ui/src/pages/Pipeline/editPipeline/index.jsx @@ -8,8 +8,8 @@ import { useEffect, useRef } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; import { s8 } from '../../../utils'; import GlobalParamsDrawer from '../components/GlobalParamsDrawer'; +import ModelMenu from '../components/ModelMenu'; import styles from './index.less'; -import ModelMenus from './modelMenus'; import Props from './props'; import { findAllParentNodes, findFirstDuplicate } from './utils'; @@ -97,7 +97,7 @@ const EditPipeline = () => { closeParamsDrawer(); setTimeout(() => { if (val) { - navgite({ pathname: `/pipeline` }); + navgite({ pathname: `/pipeline/template` }); } }, 500); }); @@ -699,7 +699,7 @@ const EditPipeline = () => { }; return (
- +
- ); -}; -export default ModelMenus; diff --git a/react-ui/src/types.ts b/react-ui/src/types.ts index 855584c6..605131a4 100644 --- a/react-ui/src/types.ts +++ b/react-ui/src/types.ts @@ -41,9 +41,11 @@ export type PipelineNodeModel = { control_strategy: string; in_parameters: string; out_parameters: string; + component_label: string; + icon_path: string; }; -// 流水线 +// 流水线节点模型数据 export type PipelineNodeModelParameter = { label: string; value: any;