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;