feat: 编排画布新增基于AWEL2.0的Select类型节点渲染

This commit is contained in:
谨欣
2024-08-08 19:27:52 +08:00
parent db44f2b3a2
commit e97b63a4d4
5 changed files with 62 additions and 9 deletions

View File

@@ -4,6 +4,7 @@ import React from 'react';
import RequiredIcon from './required-icon'; import RequiredIcon from './required-icon';
import NodeHandler from './node-handler'; import NodeHandler from './node-handler';
import { InfoCircleOutlined } from '@ant-design/icons'; import { InfoCircleOutlined } from '@ant-design/icons';
import { RenderSelect, RenderCascader } from './node-renderer';
interface NodeParamHandlerProps { interface NodeParamHandlerProps {
node: IFlowNode; node: IFlowNode;
@@ -14,14 +15,14 @@ interface NodeParamHandlerProps {
// render node parameters item // render node parameters item
const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label, index }) => { const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label, index }) => {
function handleChange(value: any) { function onChange(value: any) {
data.value = value; data.value = value;
} }
if (data.category === 'resource') { // 基于AWEL1.0的流程设计器,对节点参数的渲染
return <NodeHandler node={node} data={data} type="target" label={label} index={index} />; function renderNodeWithoutUiParam(data: IFlowNodeParameter) {
} else if (data.category === 'common') {
let defaultValue = data.value !== null && data.value !== undefined ? data.value : data.default; let defaultValue = data.value !== null && data.value !== undefined ? data.value : data.default;
switch (data.type_name) { switch (data.type_name) {
case 'int': case 'int':
case 'float': case 'float':
@@ -39,7 +40,7 @@ const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label,
className="w-full" className="w-full"
defaultValue={defaultValue} defaultValue={defaultValue}
onChange={(value: number | null) => { onChange={(value: number | null) => {
handleChange(value); onChange(value);
}} }}
/> />
</div> </div>
@@ -60,20 +61,20 @@ const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label,
className="w-full nodrag" className="w-full nodrag"
defaultValue={defaultValue} defaultValue={defaultValue}
options={data.options.map((item: any) => ({ label: item.label, value: item.value }))} options={data.options.map((item: any) => ({ label: item.label, value: item.value }))}
onChange={handleChange} onChange={onChange}
/> />
) : ( ) : (
<Input <Input
className="w-full" className="w-full"
defaultValue={defaultValue} defaultValue={defaultValue}
onChange={(e) => { onChange={(e) => {
handleChange(e.target.value); onChange(e.target.value);
}} }}
/> />
)} )}
</div> </div>
); );
case 'bool': case 'checkbox':
defaultValue = defaultValue === 'False' ? false : defaultValue; defaultValue = defaultValue === 'False' ? false : defaultValue;
defaultValue = defaultValue === 'True' ? true : defaultValue; defaultValue = defaultValue === 'True' ? true : defaultValue;
return ( return (
@@ -89,7 +90,7 @@ const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label,
className="ml-2" className="ml-2"
defaultChecked={defaultValue} defaultChecked={defaultValue}
onChange={(e) => { onChange={(e) => {
handleChange(e.target.checked); onChange(e.target.checked);
}} }}
/> />
</p> </p>
@@ -97,6 +98,23 @@ const NodeParamHandler: React.FC<NodeParamHandlerProps> = ({ node, data, label,
); );
} }
} }
// 基于AWEL2.0的流程设计器,对节点参数的渲染
function renderNodeWithUiParam(data: IFlowNodeParameter) {
let defaultValue = data.value !== null && data.value !== undefined ? data.value : data.default;
// TODO: 根据ui_type渲染不同的组件
switch (data?.ui?.ui_type) {
case 'select':
return <RenderSelect data={data} defaultValue={defaultValue} onChange={onChange} />;
}
}
if (data.category === 'resource') {
return <NodeHandler node={node} data={data} type="target" label={label} index={index} />;
} else if (data.category === 'common') {
return data?.ui ? renderNodeWithUiParam(data) : renderNodeWithoutUiParam(data);
}
}; };
export default NodeParamHandler; export default NodeParamHandler;

View File

@@ -0,0 +1,3 @@
import { IFlowNodeParameter } from '@/types/flow';
export const RenderCascader = (props: IFlowNodeParameter) => {};

View File

@@ -0,0 +1,2 @@
export * from "./select";
export * from "./cascader";

View File

@@ -0,0 +1,21 @@
import { IFlowNodeParameter } from "@/types/flow";
import { Select } from "antd";
type SelectProps = {
data: IFlowNodeParameter;
defaultValue: any;
onChange: (value: any) => void;
}
export const RenderSelect = (params: SelectProps) => {
const { data, defaultValue, onChange } = params;
return data.options?.length > 0 && (
<Select
className="w-full nodrag"
defaultValue={defaultValue}
options={data.options.map((item: any) => ({ label: item.label, value: item.value }))}
onChange={onChange}
/>
)
}

View File

@@ -49,6 +49,15 @@ export type IFlowNodeParameter = {
options?: any; options?: any;
value: any; value: any;
is_list?: boolean; is_list?: boolean;
ui: IFlowNodeParameterUI;
};
export type IFlowNodeParameterUI = {
ui_type: string;
attr: {
disabled: boolean;
[key: string]: any;
};
}; };
export type IFlowNodeInput = { export type IFlowNodeInput = {