|
|
|
@@ -1,4 +1,5 @@ |
|
|
|
import KFIcon from '@/components/KFIcon'; |
|
|
|
import SubAreaTitle from '@/components/SubAreaTitle'; |
|
|
|
import { getComputingResourceReq } from '@/services/pipeline'; |
|
|
|
import { openAntdModal } from '@/utils/modal'; |
|
|
|
import { to } from '@/utils/promise'; |
|
|
|
@@ -7,7 +8,7 @@ import { pick } from 'lodash'; |
|
|
|
import { forwardRef, useEffect, useImperativeHandle, useState } from 'react'; |
|
|
|
import PropsLabel from '../components/PropsLabel'; |
|
|
|
import ResourceSelectorModal, { ResourceSelectorType } from '../components/ResourceSelectorModal'; |
|
|
|
import Styles from './editPipeline.less'; |
|
|
|
import styles from './editPipeline.less'; |
|
|
|
import { createMenuItems } from './utils'; |
|
|
|
const { TextArea } = Input; |
|
|
|
|
|
|
|
@@ -18,7 +19,8 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
const [selectedModel, setSelectedModel] = useState(undefined); // 选择的模型,为了再次打开时恢复原来的选择 |
|
|
|
const [selectedDataset, setSelectedDataset] = useState(undefined); // 选择的数据集,为了再次打开时恢复原来的选择 |
|
|
|
const [resourceStandardList, setResourceStandardList] = useState([]); // 资源规模列表 |
|
|
|
const [items, setItems] = useState([]); |
|
|
|
const [menuItems, setMenuItems] = useState([]); |
|
|
|
|
|
|
|
useEffect(() => { |
|
|
|
getComputingResource(); |
|
|
|
}, []); |
|
|
|
@@ -38,7 +40,7 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
|
|
|
|
const afterOpenChange = () => { |
|
|
|
if (!open) { |
|
|
|
// console.log('zzzz', stagingItem, form.getFieldsValue()); |
|
|
|
console.log('zzzz', form.getFieldsValue()); |
|
|
|
const control_strategy = form.getFieldValue('control_strategy'); |
|
|
|
const in_parameters = form.getFieldValue('in_parameters'); |
|
|
|
const out_parameters = form.getFieldValue('out_parameters'); |
|
|
|
@@ -68,29 +70,32 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
if (e.item && e.item.getModel()) { |
|
|
|
form.resetFields(); |
|
|
|
const model = e.item.getModel(); |
|
|
|
const nodeData = { |
|
|
|
...model, |
|
|
|
in_parameters: JSON.parse(model.in_parameters), |
|
|
|
out_parameters: JSON.parse(model.out_parameters), |
|
|
|
control_strategy: JSON.parse(model.control_strategy), |
|
|
|
}; |
|
|
|
setStagingItem({ |
|
|
|
...nodeData, |
|
|
|
}); |
|
|
|
form.setFieldsValue({ |
|
|
|
...nodeData, |
|
|
|
}); |
|
|
|
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), |
|
|
|
}; |
|
|
|
setStagingItem({ |
|
|
|
...nodeData, |
|
|
|
}); |
|
|
|
form.setFieldsValue({ |
|
|
|
...nodeData, |
|
|
|
}); |
|
|
|
} catch (error) { |
|
|
|
console.log(error); |
|
|
|
} |
|
|
|
setSelectedModel(undefined); |
|
|
|
setSelectedDataset(undefined); |
|
|
|
setOpen(true); |
|
|
|
|
|
|
|
setItems(createMenuItems(params, parentNodes)); |
|
|
|
// 参数下拉菜单 |
|
|
|
setMenuItems(createMenuItems(params, parentNodes)); |
|
|
|
} |
|
|
|
}, |
|
|
|
propClose: async () => { |
|
|
|
setOpen(false); |
|
|
|
const [openRes, propsError] = await to(setOpen(false)); |
|
|
|
console.log(setOpen(false)); |
|
|
|
propClose: () => { |
|
|
|
close(); |
|
|
|
}, |
|
|
|
})); |
|
|
|
|
|
|
|
@@ -161,6 +166,11 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
return computing_resource.toLocaleLowerCase().includes(input.toLocaleLowerCase()); |
|
|
|
}; |
|
|
|
|
|
|
|
// 参数回填 |
|
|
|
const handleParameterClick = (name, value) => { |
|
|
|
form.setFieldValue(name, value); |
|
|
|
}; |
|
|
|
|
|
|
|
// 控制策略 |
|
|
|
const controlStrategyList = Object.entries(stagingItem.control_strategy ?? {}).map( |
|
|
|
([key, value]) => ({ key, value }), |
|
|
|
@@ -189,7 +199,7 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
afterOpenChange={afterOpenChange} |
|
|
|
open={open} |
|
|
|
width={520} |
|
|
|
className={Styles.editPipelineProps} |
|
|
|
className={styles.editPipelineProps} |
|
|
|
> |
|
|
|
<Form |
|
|
|
name="form" |
|
|
|
@@ -206,13 +216,8 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
}} |
|
|
|
autoComplete="off" |
|
|
|
> |
|
|
|
<div className={Styles.editPipelinePropsContent}> |
|
|
|
<img |
|
|
|
style={{ width: '13px', marginRight: '10px' }} |
|
|
|
src={'/assets/images/static-message.png'} |
|
|
|
alt="" |
|
|
|
/> |
|
|
|
基本信息 |
|
|
|
<div className={styles.editPipelinePropsContent}> |
|
|
|
<SubAreaTitle image="/assets/images/static-message.png" title="基本信息"></SubAreaTitle> |
|
|
|
</div> |
|
|
|
<Form.Item |
|
|
|
label="任务名称" |
|
|
|
@@ -238,16 +243,11 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
> |
|
|
|
<Input disabled /> |
|
|
|
</Form.Item> |
|
|
|
<div className={Styles.editPipelinePropsContent}> |
|
|
|
<img |
|
|
|
style={{ width: '15px', marginRight: '10px' }} |
|
|
|
src={'/assets/images/duty-message.png'} |
|
|
|
alt="" |
|
|
|
/> |
|
|
|
任务信息 |
|
|
|
<div className={styles.editPipelinePropsContent}> |
|
|
|
<SubAreaTitle image="/assets/images/duty-message.png" title="任务信息"></SubAreaTitle> |
|
|
|
</div> |
|
|
|
<Form.Item label="镜像" required> |
|
|
|
<div className={Styles['ref-row']}> |
|
|
|
<div className={styles['ref-row']}> |
|
|
|
<Form.Item name="image" noStyle rules={[{ required: true, message: '请输入镜像' }]}> |
|
|
|
<Input placeholder="请输入或选择镜像" allowClear /> |
|
|
|
</Form.Item> |
|
|
|
@@ -256,7 +256,7 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
type="link" |
|
|
|
icon={getSelectBtnIcon({ item_type: 'image' })} |
|
|
|
onClick={() => selectResource('image', { item_type: 'image' })} |
|
|
|
className={Styles['select-button']} |
|
|
|
className={styles['select-button']} |
|
|
|
> |
|
|
|
选择镜像 |
|
|
|
</Button> |
|
|
|
@@ -267,10 +267,10 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
name="working_directory" |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
menuItems={menuItems} |
|
|
|
title="工作目录" |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue('working_directory', value); |
|
|
|
handleParameterClick('working_directory', value); |
|
|
|
}} |
|
|
|
/> |
|
|
|
} |
|
|
|
@@ -281,10 +281,10 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
name="command" |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
title="工作目录" |
|
|
|
menuItems={menuItems} |
|
|
|
title="启动命令" |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue('command', value); |
|
|
|
handleParameterClick('command', value); |
|
|
|
}} |
|
|
|
/> |
|
|
|
} |
|
|
|
@@ -316,10 +316,10 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
name="mount_path" |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
menuItems={menuItems} |
|
|
|
title="挂载路径" |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue('mount_path', value); |
|
|
|
handleParameterClick('mount_path', value); |
|
|
|
}} |
|
|
|
/> |
|
|
|
} |
|
|
|
@@ -330,10 +330,10 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
name="env_variables" |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
menuItems={menuItems} |
|
|
|
title="环境变量" |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue('env_variables', value); |
|
|
|
handleParameterClick('env_variables', value); |
|
|
|
}} |
|
|
|
/> |
|
|
|
} |
|
|
|
@@ -346,10 +346,10 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
name={['control_strategy', item.key]} |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
menuItems={menuItems} |
|
|
|
title={item.value.label} |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue(['control_strategy', item.key], { |
|
|
|
handleParameterClick(['control_strategy', item.key], { |
|
|
|
...item.value, |
|
|
|
value, |
|
|
|
}); |
|
|
|
@@ -369,23 +369,18 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
<Input placeholder={item.value.label} allowClear /> |
|
|
|
</Form.Item> |
|
|
|
))} |
|
|
|
<div className={Styles.editPipelinePropsContent}> |
|
|
|
<img |
|
|
|
style={{ width: '15px', marginRight: '10px' }} |
|
|
|
src={'/assets/images/duty-message.png'} |
|
|
|
alt="" |
|
|
|
/> |
|
|
|
输入参数 |
|
|
|
<div className={styles.editPipelinePropsContent}> |
|
|
|
<SubAreaTitle image="/assets/images/duty-message.png" title="输入参数"></SubAreaTitle> |
|
|
|
</div> |
|
|
|
{inParametersList.map((item) => ( |
|
|
|
<Form.Item |
|
|
|
key={item.key} |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
menuItems={menuItems} |
|
|
|
title={item.value.label + '(' + item.key + ')'} |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue(['in_parameters', item.key], { |
|
|
|
handleParameterClick(['in_parameters', item.key], { |
|
|
|
...item.value, |
|
|
|
value, |
|
|
|
}); |
|
|
|
@@ -394,7 +389,7 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
} |
|
|
|
required={item.value.require ? true : false} |
|
|
|
> |
|
|
|
<div className={Styles['ref-row']}> |
|
|
|
<div className={styles['ref-row']}> |
|
|
|
<Form.Item |
|
|
|
name={['in_parameters', item.key]} |
|
|
|
noStyle |
|
|
|
@@ -417,7 +412,7 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
type="link" |
|
|
|
icon={getSelectBtnIcon(item.value)} |
|
|
|
onClick={() => selectResource(['in_parameters', item.key], item.value)} |
|
|
|
className={Styles['select-button']} |
|
|
|
className={styles['select-button']} |
|
|
|
> |
|
|
|
{item.value.label} |
|
|
|
</Button> |
|
|
|
@@ -426,13 +421,8 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
</div> |
|
|
|
</Form.Item> |
|
|
|
))} |
|
|
|
<div className={Styles.editPipelinePropsContent}> |
|
|
|
<img |
|
|
|
style={{ width: '15px', marginRight: '10px' }} |
|
|
|
src={'/assets/images/duty-message.png'} |
|
|
|
alt="" |
|
|
|
/> |
|
|
|
输出参数 |
|
|
|
<div className={styles.editPipelinePropsContent}> |
|
|
|
<SubAreaTitle image="/assets/images/duty-message.png" title="输出参数"></SubAreaTitle> |
|
|
|
</div> |
|
|
|
{outParametersList.map((item) => ( |
|
|
|
<Form.Item |
|
|
|
@@ -440,10 +430,10 @@ const Props = forwardRef(({ onParentChange }, ref) => { |
|
|
|
name={['out_parameters', item.key]} |
|
|
|
label={ |
|
|
|
<PropsLabel |
|
|
|
menuItems={items} |
|
|
|
menuItems={menuItems} |
|
|
|
title={item.value.label + '(' + item.key + ')'} |
|
|
|
onClick={(value) => { |
|
|
|
form.setFieldValue(['out_parameters', item.key], { |
|
|
|
handleParameterClick(['out_parameters', item.key], { |
|
|
|
...item.value, |
|
|
|
value, |
|
|
|
}); |
|
|
|
|