+
组件库
{modelMenusList && modelMenusList.length > 0 ? (
{
}}
className={Styles.collapseItem}
>
-
+ {ele.icon_path && (
+
+ )}
{ele.component_label}
))
diff --git a/react-ui/src/pages/Pipeline/editPipeline/modelMenus.less b/react-ui/src/pages/Pipeline/editPipeline/modelMenus.less
index 5c0a5453..b756583a 100644
--- a/react-ui/src/pages/Pipeline/editPipeline/modelMenus.less
+++ b/react-ui/src/pages/Pipeline/editPipeline/modelMenus.less
@@ -1,35 +1,24 @@
-.collapseList {
-}
-.collapseItem {
- display: flex;
- align-items: center;
- height: 40px;
- padding: 0 16px;
- color: #575757;
- font-size: 14px;
- border-radius: 4px;
- cursor: pointer;
-}
-.collapseItem:hover {
- background: rgba(22, 100, 255, 0.08);
- color:#1664ff;
-}
.collapse {
+ width: 250px;
+ height: 100%;
+
:global {
.ant-collapse {
+ height: calc(100% - 60px);
+ overflow-y: auto;
background-color: #fff;
border-color: transparent !important;
}
.ant-collapse > .ant-collapse-item > .ant-collapse-header {
margin-bottom: 5px;
+ padding: 20px 16px 15px 16px;
background-color: #fff;
border-color: transparent;
- padding: 20px 16px 15px 16px;
}
.ant-collapse > .ant-collapse-item {
margin: 0 10px;
- border-bottom:0.5px dashed rgba(20, 49, 179, 0.12);
+ border-bottom: 0.5px dashed rgba(20, 49, 179, 0.12);
border-radius: 0px;
}
.ant-collapse .ant-collapse-content {
@@ -41,10 +30,23 @@
}
}
}
-.modelMenusTitle{
- padding: 12px 25px;
+.collapseItem {
+ display: flex;
+ align-items: center;
+ height: 40px;
+ padding: 0 16px;
+ color: #575757;
+ font-size: 14px;
+ border-radius: 4px;
+ cursor: pointer;
+}
+.collapseItem:hover {
+ color: #1664ff;
+ background: rgba(22, 100, 255, 0.08);
+}
+.modelMenusTitle {
margin-bottom: 10px;
- color:#111111;
-font-size:16px;
-font-family: 'Alibaba';
-}
\ No newline at end of file
+ padding: 12px 25px;
+ color: #111111;
+ font-size: 16px;
+}
diff --git a/react-ui/src/pages/Pipeline/editPipeline/props.jsx b/react-ui/src/pages/Pipeline/editPipeline/props.jsx
index 58127381..f2a7122b 100644
--- a/react-ui/src/pages/Pipeline/editPipeline/props.jsx
+++ b/react-ui/src/pages/Pipeline/editPipeline/props.jsx
@@ -1,83 +1,49 @@
import KFIcon from '@/components/KFIcon';
-import { getComputingResourceReq } from '@/services/pipeline';
+import ParameterInput from '@/components/ParameterInput';
+import SubAreaTitle from '@/components/SubAreaTitle';
+import { useComputingResource } from '@/hooks/resource';
import { openAntdModal } from '@/utils/modal';
import { to } from '@/utils/promise';
import { Button, Drawer, Form, Input, Select } from 'antd';
import { pick } from 'lodash';
-import { forwardRef, useEffect, useImperativeHandle, useState } from 'react';
-import ResourceSelectorModal, { ResourceSelectorType } from '../components/ResourceSelectorModal';
-import Styles from './editPipeline.less';
+import { forwardRef, useImperativeHandle, useState } from 'react';
+import PropsLabel from '../components/PropsLabel';
+import ResourceSelectorModal, {
+ ResourceSelectorType,
+ selectorTypeConfig,
+} from '../components/ResourceSelectorModal';
+import styles from './props.less';
+import { canInput, createMenuItems } from './utils';
const { TextArea } = Input;
+
const Props = forwardRef(({ onParentChange }, ref) => {
const [form] = Form.useForm();
-
const [stagingItem, setStagingItem] = useState({});
const [open, setOpen] = useState(false);
- const [selectedModel, setSelectedModel] = useState(undefined);
- const [selectedDataset, setSelectedDataset] = useState(undefined);
- const [resourceStandardList, setResourceStandardList] = useState([]);
-
- useEffect(() => {
- getComputingResource();
- }, []);
-
- const getComputingResource = async () => {
- const params = {
- page: 0,
- size: 1000,
- resource_type: '',
- };
- const [res] = await to(getComputingResourceReq(params));
- if (res && res.data && res.data.content) {
- setResourceStandardList(res.data.content);
- }
- };
+ const [selectedModel, setSelectedModel] = useState(undefined); // 选择的模型,为了再次打开时恢复原来的选择
+ const [selectedDataset, setSelectedDataset] = useState(undefined); // 选择的数据集,为了再次打开时恢复原来的选择
+ const [resourceStandardList, filterResourceStandard] = useComputingResource(); // 资源规模
+ const [menuItems, setMenuItems] = useState([]);
const afterOpenChange = () => {
if (!open) {
- console.log(stagingItem, form.getFieldsValue());
- // 禁止校验 guard-for-in
- /* eslint-disable */
- for (let i in form.getFieldsValue()) {
- for (let j in stagingItem.in_parameters) {
- if (i == j) {
- console.log(j, i);
- stagingItem.in_parameters[j].value = form.getFieldsValue()[i];
- }
- }
- for (let p in stagingItem.out_parameters) {
- if (i == p) {
- stagingItem.out_parameters[p].value = form.getFieldsValue()[i];
- }
- }
- for (let k in stagingItem.control_strategy) {
- if (i == k) {
- stagingItem.control_strategy[k].value = form.getFieldsValue()[i];
- }
- }
- }
- /* eslint-enable */
- // setStagingItem({...stagingItem,})
- console.log(stagingItem.control_strategy);
+ console.log('zzzzz', form.getFieldsValue());
+ const control_strategy = form.getFieldValue('control_strategy');
+ const in_parameters = form.getFieldValue('in_parameters');
+ const out_parameters = form.getFieldValue('out_parameters');
onParentChange({
...stagingItem,
- control_strategy: JSON.stringify(stagingItem.control_strategy),
- in_parameters: JSON.stringify(stagingItem.in_parameters),
- out_parameters: JSON.stringify(stagingItem.out_parameters),
...form.getFieldsValue(),
+ control_strategy: JSON.stringify(control_strategy),
+ in_parameters: JSON.stringify(in_parameters),
+ out_parameters: JSON.stringify(out_parameters),
});
- // onParentChange({...stagingItem,...form.getFieldsValue()})
}
};
const onClose = () => {
setOpen(false);
};
- const onFinish = (values) => {
- console.log('Success:', values);
- };
- const onFinishFailed = (errorInfo) => {
- console.log('Failed:', errorInfo);
- };
+
useImperativeHandle(ref, () => ({
getFieldsValue: async () => {
const [propsRes, propsError] = await to(form.validateFields());
@@ -88,47 +54,44 @@ const Props = forwardRef(({ onParentChange }, ref) => {
return Promise.reject(propsError);
}
},
- showDrawer(e) {
+ showDrawer(e, params, parentNodes) {
if (e.item && e.item.getModel()) {
- // console.log(e.item.getModel().in_parameters);
form.resetFields();
- form.setFieldsValue({
- ...e.item.getModel(),
- in_parameters: JSON.parse(e.item.getModel().in_parameters),
- out_parameters: JSON.parse(e.item.getModel().out_parameters),
- control_strategy: JSON.parse(e.item.getModel().control_strategy),
- });
- setStagingItem({
- ...e.item.getModel(),
- in_parameters: JSON.parse(e.item.getModel().in_parameters),
- out_parameters: JSON.parse(e.item.getModel().out_parameters),
- control_strategy: JSON.parse(e.item.getModel().control_strategy),
- });
- // form.setFieldsValue({...e.item.getModel(),in_parameters:JSON.parse(e.item.getModel().in_parameters),out_parameters:JSON.parse(e.item.getModel().out_parameters)})
- // setStagingItem({...e.item.getModel(),in_parameters:JSON.parse(e.item.getModel().in_parameters),out_parameters:JSON.parse(e.item.getModel().out_parameters)})
- // setTimeout(() => {
- // console.log(stagingItem);
- // }, (500));
+ const model = e.item.getModel();
+ try {
+ const nodeData = {
+ ...model,
+ in_parameters: JSON.parse(model.in_parameters),
+ out_parameters: JSON.parse(model.out_parameters),
+ control_strategy: JSON.parse(model.control_strategy),
+ };
+ console.log('model', nodeData);
+ setStagingItem({
+ ...nodeData,
+ });
+ form.setFieldsValue({
+ ...nodeData,
+ });
+ } catch (error) {
+ console.log(error);
+ }
setSelectedModel(undefined);
setSelectedDataset(undefined);
setOpen(true);
+
+ // 参数下拉菜单
+ setMenuItems(createMenuItems(params, parentNodes));
}
},
- propClose: async () => {
- setOpen(false);
- const [openRes, propsError] = await to(setOpen(false));
- console.log(setOpen(false));
+ propClose: () => {
+ onClose();
},
- // propClose() {
-
- // setOpen(false);
- // },
}));
- // 选择数据集、模型
+ // 选择数据集、模型、镜像
const selectResource = (name, item) => {
let type;
- let resource = undefined;
+ let resource;
switch (item.item_type) {
case 'dataset':
type = ResourceSelectorType.Dataset;
@@ -142,260 +105,347 @@ const Props = forwardRef(({ onParentChange }, ref) => {
type = ResourceSelectorType.Mirror;
break;
}
- const { close } = openAntdModal(
- ResourceSelectorModal,
- {
- type,
- defaultExpandedKeys: resource ? [resource.id] : [],
- defaultCheckedKeys: resource ? [`${resource.id}-${resource.version}`] : [],
- defaultActiveTab: resource?.activeTab,
- onOk: (res) => {
- if (res) {
- if (type === ResourceSelectorType.Mirror) {
- form.setFieldValue(name, res);
- } else {
- const jsonObj = pick(res, ['id', 'version', 'path']);
- const value = JSON.stringify(jsonObj);
- form.setFieldValue(name, value);
- }
+ const { close } = openAntdModal(ResourceSelectorModal, {
+ type,
+ defaultExpandedKeys: resource ? [resource.id] : [],
+ defaultCheckedKeys: resource ? [`${resource.id}-${resource.version}`] : [],
+ defaultActiveTab: resource?.activeTab,
+ onOk: (res) => {
+ if (res) {
+ if (type === ResourceSelectorType.Mirror) {
+ form.setFieldValue(name, res);
+ } else {
+ const jsonObj = pick(res, ['id', 'version', 'path']);
+ const value = JSON.stringify(jsonObj);
+ const showValue = `${res.name}:${res.version}`;
+ form.setFieldValue(name, { ...item, value, showValue, fromSelect: true });
if (type === ResourceSelectorType.Dataset) {
setSelectedDataset(res);
} else if (type === ResourceSelectorType.Model) {
setSelectedModel(res);
}
- } else {
- if (type === ResourceSelectorType.Dataset) {
- setSelectedDataset(null);
- } else if (type === ResourceSelectorType.Model) {
- setSelectedModel(null);
- }
- form.setFieldValue(name, '');
}
- close();
- },
+ } else {
+ if (type === ResourceSelectorType.Dataset) {
+ setSelectedDataset(undefined);
+ } else if (type === ResourceSelectorType.Model) {
+ setSelectedModel(undefined);
+ }
+ form.setFieldValue(name, '');
+ }
+ close();
},
- true,
- );
+ });
};
// 获取选择数据集、模型后面按钮 icon
const getSelectBtnIcon = (item) => {
const type = item.item_type;
+ let selectorType;
if (type === 'dataset') {
- return
;
+ selectorType = ResourceSelectorType.Dataset;
} else if (type === 'model') {
- return
;
+ selectorType = ResourceSelectorType.Model;
} else {
- return
;
+ selectorType = ResourceSelectorType.Mirror;
}
+
+ return
;
};
- const filterResourceStandard = (input, { computing_resource = '' }) => {
- return computing_resource.toLocaleLowerCase().includes(input.toLocaleLowerCase());
+ // 参数回填
+ const handleParameterClick = (name, value) => {
+ form.setFieldValue(name, value);
};
// 控制策略
- const controlStrategy = stagingItem.control_strategy;
+ const controlStrategyList = Object.entries(stagingItem.control_strategy ?? {}).map(
+ ([key, value]) => ({ key, value }),
+ );
+
// 输入参数
- const inParameters = stagingItem.in_parameters;
+ const inParametersList = Object.entries(stagingItem.in_parameters ?? {}).map(([key, value]) => ({
+ key,
+ value,
+ }));
+
// 输出参数
- const outParameters = stagingItem.out_parameters;
+ const outParametersList = Object.entries(stagingItem.out_parameters ?? {}).map(
+ ([key, value]) => ({ key, value }),
+ );
return (
- <>
-
+
+