Skip to content

Commit 3c3708e

Browse files
committed
update action
1 parent 60c4c36 commit 3c3708e

39 files changed

Lines changed: 616 additions & 209 deletions

File tree

flow-engine-framework/src/main/java/com/codingapi/flow/action/actions/RejectAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public RejectAction() {
3535
this.enable = true;
3636
this.type = ActionType.REJECT.name();
3737
this.display = new ActionDisplay(this.title);
38-
this.script = RejectActionScript.startScript();
38+
this.script = RejectActionScript.defaultScript();
3939
}
4040

4141
@Override

flow-engine-framework/src/main/java/com/codingapi/flow/script/ScriptDefaultConstants.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,27 @@
55
*/
66
public class ScriptDefaultConstants {
77

8+
/**
9+
* 默认自定义动作脚本
10+
*/
11+
public static final String SCRIPT_DEFAULT_ACTION_CUSTOM = """
12+
// @SCRIPT_TITLE 默认条件 触发通过
13+
def run(request){
14+
return 'PASS';
15+
}
16+
""";
17+
18+
19+
/**
20+
* 默认拒绝动作脚本
21+
*/
22+
public static final String SCRIPT_DEFAULT_ACTION_REJECT = """
23+
// @SCRIPT_TITLE 返回开始节点
24+
def run(request){
25+
return request.getStartNode().getId();
26+
}
27+
""";
28+
829
/**
930
* 默认条件脚本
1031
*/

flow-engine-framework/src/main/java/com/codingapi/flow/script/action/RejectActionScript.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.codingapi.flow.script.action;
22

3+
import com.codingapi.flow.script.ScriptDefaultConstants;
34
import com.codingapi.flow.script.runtime.ScriptRuntimeContext;
45
import com.codingapi.flow.session.FlowSession;
56
import lombok.AllArgsConstructor;
@@ -12,28 +13,22 @@
1213
@AllArgsConstructor
1314
public class RejectActionScript {
1415

15-
public static final String SCRIPT_START = "def run(session){return new com.codingapi.flow.script.action.RejectActionScript.RejectResult(session.getStartNode().getId())}";
16-
public static final String SCRIPT_TERMINATE = "def run(session){return new com.codingapi.flow.script.action.RejectActionScript.RejectResult(\"TERMINATE\")}";
16+
public static final String TYPE_TERMINATE = "TERMINATE";
17+
1718

1819
@Getter
1920
private final String script;
2021

2122
public RejectResult execute(FlowSession session) {
22-
return ScriptRuntimeContext.getInstance().run(script, RejectResult.class, session);
23+
String result = ScriptRuntimeContext.getInstance().run(script, String.class, session);
24+
return new RejectResult(result);
2325
}
2426

2527
/**
2628
* 退回至发起节点
2729
*/
28-
public static RejectActionScript startScript() {
29-
return new RejectActionScript(SCRIPT_START);
30-
}
31-
32-
/**
33-
* 终止流程
34-
*/
35-
public static RejectActionScript terminateScript() {
36-
return new RejectActionScript(SCRIPT_TERMINATE);
30+
public static RejectActionScript defaultScript() {
31+
return new RejectActionScript(ScriptDefaultConstants.SCRIPT_DEFAULT_ACTION_REJECT);
3732
}
3833

3934

@@ -58,7 +53,7 @@ public boolean isTerminate() {
5853
}
5954

6055
public RejectResult(String result) {
61-
if (result.equals("TERMINATE")) {
56+
if (result.equals(TYPE_TERMINATE)) {
6257
this.type = RejectType.TERMINATE;
6358
} else {
6459
this.type = RejectType.RETURN_NODE;

frontend/packages/flow-pc/flow-pc-approval/src/components/flow-approval/components/action/custom.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {useApprovalContext} from "@/components/flow-approval/hooks/use-approval-
55
import {GroovyScriptConvertorUtil} from "@flow-engine/flow-core";
66
import {ActionFactory} from "@/components/flow-approval/components/action/factory";
77
import {ActionButton} from "@/components/flow-approval/components/action-button";
8+
import {ActionType} from "@flow-engine/flow-types";
89

910
/**
1011
* 自定义
@@ -24,7 +25,7 @@ export const CustomAction: React.FC<FlowActionProps> = (props) => {
2425

2526
const ActionView = ActionFactory.getInstance().render({
2627
...props.action,
27-
type: triggerType,
28+
type: triggerType as ActionType,
2829
});
2930

3031
if (ActionView) {

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/components/branch-adder/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {Button} from "antd";
66
import {nodeFormPanelFactory} from "@/components/design-editor/components/sidebar";
77
import {usePanelManager} from "@flowgram.ai/panel-manager-plugin";
88
import {useDesignContext} from "@/components/design-panel/hooks/use-design-context";
9-
import {NodeType} from "@/components/design-editor/typings/node-type";
9+
import {NodeType} from "@flow-engine/flow-types";
1010

1111
interface BranchAdderPropsType {
1212
activated?: boolean;

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/components/node-icon/index.tsx

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
import React from "react";
2-
import {NodeType} from "@/components/design-editor/typings/node-type";
3-
import {Button, Flex, Space,Input,theme} from "antd";
4-
import {ApiOutlined, AuditOutlined, BellOutlined, BranchesOutlined, ClockCircleOutlined, CloseOutlined, EditOutlined,
2+
import {NodeType} from "@flow-engine/flow-types";
3+
import {theme} from "antd";
4+
import {
5+
ApiOutlined,
6+
AuditOutlined,
7+
BellOutlined,
8+
BranchesOutlined,
9+
ClockCircleOutlined,
10+
EditOutlined,
511
MergeOutlined,
6-
NodeExpandOutlined, PoweroffOutlined, PullRequestOutlined, ShareAltOutlined, UserOutlined} from "@ant-design/icons";
12+
NodeExpandOutlined,
13+
PoweroffOutlined,
14+
PullRequestOutlined,
15+
ShareAltOutlined,
16+
UserOutlined
17+
} from "@ant-design/icons";
718

819

920
interface NodeIconProps {

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/components/node-list/index.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {FlowNodeRegistry} from "@/components/design-editor/typings";
44
import styled from 'styled-components';
55
import {FlowNodeRegistries} from "@/components/design-editor/nodes";
66
import {NodeIcon} from "@/components/design-editor/components/node-icon";
7-
import {NodeType} from "@/components/design-editor/typings/node-type";
7+
import {NodeType} from "@flow-engine/flow-types";
88
import {useDesignContext} from "@/components/design-panel/hooks/use-design-context";
99

1010
const NodesWrap = styled.div`

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/table.tsx renamed to frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/index.tsx

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import React from "react";
2-
import {Button, Form, Space, Switch,Popconfirm} from "antd";
2+
import {Button, Form, Popconfirm, Space, Switch} from "antd";
33
import {Table} from "@flow-engine/flow-pc-ui";
4-
import {ActionManager} from "@/components/design-editor/node-components/action/index";
54
import {useNodeRenderContext} from "@/components/design-editor/hooks/use-node-render-context";
65
import {PlusOutlined} from "@ant-design/icons";
7-
import {ActionModal} from "@/components/design-editor/node-components/action/modal";
8-
import {GroovyScriptConvertorUtil} from "@flow-engine/flow-core";
6+
import {actionOptions} from "@flow-engine/flow-types";
7+
import {ActionConfigModal} from "@/components/script/modal/action-config-modal";
8+
import {FlowActionListPresenter} from "./presenter";
99

1010
interface ActionTableProps {
1111
value: any[];
@@ -15,11 +15,11 @@ interface ActionTableProps {
1515
export const ActionTable: React.FC<ActionTableProps> = (props) => {
1616
const {node} = useNodeRenderContext();
1717
const actions = node.getNodeRegistry()?.meta.actions || [];
18-
const actionManager = new ActionManager(props.value, props.onChange);
19-
const datasource = actionManager.getDatasource(actions);
18+
const presenter = new FlowActionListPresenter(props.value, props.onChange);
19+
const datasource = presenter.getDatasource(actions);
2020
const [visible, setVisible] = React.useState(false);
21-
const [customVisible, setCustomVisible] = React.useState(false);
2221
const [form] = Form.useForm();
22+
2323
const columns = React.useCallback(() => {
2424
return [
2525
{
@@ -33,6 +33,15 @@ export const ActionTable: React.FC<ActionTableProps> = (props) => {
3333
dataIndex: 'title',
3434
key: 'title',
3535
},
36+
{
37+
title: '类型',
38+
dataIndex: 'type',
39+
key: 'type',
40+
render:(value:string) => {
41+
const type = actionOptions.find(item=>item.value === value);
42+
return type?.label
43+
}
44+
},
3645
{
3746
title: '启用',
3847
dataIndex: 'enable',
@@ -43,7 +52,7 @@ export const ActionTable: React.FC<ActionTableProps> = (props) => {
4352
size="small"
4453
value={record.enable}
4554
onChange={(value) => {
46-
actionManager.enable(record.id, value);
55+
presenter.enable(record.id, value);
4756
}}
4857
/>
4958
)
@@ -59,21 +68,7 @@ export const ActionTable: React.FC<ActionTableProps> = (props) => {
5968
<Space>
6069
<a
6170
onClick={() => {
62-
const custom = record.type==='CUSTOM';
63-
let trigger = {};
64-
if(custom){
65-
const meta = GroovyScriptConvertorUtil.getScriptMeta(record.script);
66-
trigger = JSON.parse(meta);
67-
}
68-
const data = {
69-
...record,
70-
...record.display,
71-
...trigger,
72-
title: record.title,
73-
id: record.id,
74-
}
75-
form.setFieldsValue(data);
76-
setCustomVisible(custom);
71+
form.setFieldsValue(record);
7772
setVisible(true);
7873
}}
7974
>
@@ -83,7 +78,7 @@ export const ActionTable: React.FC<ActionTableProps> = (props) => {
8378
<Popconfirm
8479
title={"确认删除吗?"}
8580
onConfirm={()=>{
86-
actionManager.delete(record.id);
81+
presenter.delete(record.id);
8782
}}
8883
>
8984
<a>
@@ -107,10 +102,9 @@ export const ActionTable: React.FC<ActionTableProps> = (props) => {
107102
icon={<PlusOutlined/>}
108103
onClick={() => {
109104
form.resetFields();
110-
setCustomVisible(true);
111105
setVisible(true);
112106
}}
113-
>添加按钮</Button>
107+
>自定义按钮</Button>
114108
]}
115109
columns={columns()}
116110
dataSource={datasource}
@@ -119,17 +113,15 @@ export const ActionTable: React.FC<ActionTableProps> = (props) => {
119113
}}
120114
pagination={false}
121115
/>
122-
123-
<ActionModal
116+
<ActionConfigModal
124117
open={visible}
118+
manager={presenter.getFlowActionManager()}
125119
form={form}
126-
options={actionManager.getActionOptions()}
127-
custom={customVisible}
128120
onCancel={() => {
129121
setVisible(false);
130122
}}
131123
onFinish={(values) => {
132-
actionManager.update(values);
124+
presenter.update(values);
133125
}}
134126
/>
135127
</>
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import {actionOptions, FlowAction} from "@flow-engine/flow-types";
2+
3+
export class FlowActionManager {
4+
private readonly data: FlowAction[];
5+
6+
public constructor(data: FlowAction[]) {
7+
this.data = data;
8+
}
9+
10+
public getCurrentNodeActionOptions() {
11+
const actions = this.data.filter(item => item.type !== "CUSTOM");
12+
const options: {label: string; value: string}[] = [];
13+
for (const action of actions) {
14+
const type = action.type;
15+
const option = actionOptions.find(item => item.value === type);
16+
if (option) {
17+
options.push(option);
18+
}
19+
}
20+
return options;
21+
}
22+
23+
}

frontend/packages/flow-pc/flow-pc-design/src/components/design-editor/node-components/action/modal.tsx

Lines changed: 0 additions & 86 deletions
This file was deleted.

0 commit comments

Comments
 (0)