Skip to content

Commit 3118d2a

Browse files
committed
feat: Simple设计器-路由分支
1 parent be60018 commit 3118d2a

File tree

6 files changed

+550
-2
lines changed

6 files changed

+550
-2
lines changed

src/components/SimpleProcessDesignerV2/src/NodeHandler.vue

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,13 @@
4646
</div>
4747
<div class="handler-item-text">延迟器</div>
4848
</div>
49+
<div class="handler-item" @click="addNode(NodeType.ROUTE_BRANCH_NODE)">
50+
<!-- TODO @芋艿 需要更换一下iconfont的图标 -->
51+
<div class="handler-item-icon copy">
52+
<span class="iconfont icon-size icon-copy"></span>
53+
</div>
54+
<div class="handler-item-text">路由分支</div>
55+
</div>
4956
</div>
5057
<template #reference>
5158
<div class="add-icon"><Icon icon="ep:plus" /></div>
@@ -225,6 +232,17 @@ const addNode = (type: number) => {
225232
}
226233
emits('update:childNode', data)
227234
}
235+
if (type === NodeType.ROUTE_BRANCH_NODE) {
236+
const data: SimpleFlowNode = {
237+
id: 'GateWay_' + generateUUID(),
238+
name: NODE_DEFAULT_NAME.get(NodeType.ROUTE_BRANCH_NODE) as string,
239+
showText: '',
240+
type: NodeType.ROUTE_BRANCH_NODE,
241+
childNode: props.childNode,
242+
defaultFlowId: 'Flow_' + generateUUID()
243+
}
244+
emits('update:childNode', data)
245+
}
228246
}
229247
</script>
230248

src/components/SimpleProcessDesignerV2/src/ProcessNodeTree.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444
:flow-node="currentNode"
4545
@update:flow-node="handleModelValueUpdate"
4646
/>
47+
<!-- 路由分支节点 -->
48+
<RouteNode
49+
v-if="currentNode && currentNode.type === NodeType.ROUTE_BRANCH_NODE"
50+
:flow-node="currentNode"
51+
@update:flow-node="handleModelValueUpdate"
52+
/>
4753
<!-- 递归显示孩子节点 -->
4854
<ProcessNodeTree
4955
v-if="currentNode && currentNode.childNode"
@@ -67,6 +73,7 @@ import ExclusiveNode from './nodes/ExclusiveNode.vue'
6773
import ParallelNode from './nodes/ParallelNode.vue'
6874
import InclusiveNode from './nodes/InclusiveNode.vue'
6975
import DelayTimerNode from './nodes/DelayTimerNode.vue'
76+
import RouteNode from './nodes/RouteNode.vue'
7077
import { SimpleFlowNode, NodeType } from './consts'
7178
import { useWatchNode } from './node'
7279
defineOptions({

src/components/SimpleProcessDesignerV2/src/SimpleProcessDesigner.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const props = defineProps({
5656
required: false
5757
},
5858
// 可发起流程的人员编号
59-
startUserIds : {
59+
startUserIds: {
6060
type: Array,
6161
required: false
6262
},
@@ -91,6 +91,7 @@ provide('startUserIds', props.startUserIds)
9191
9292
const message = useMessage() // 国际化
9393
const processNodeTree = ref<SimpleFlowNode | undefined>()
94+
provide('processNodeTree', processNodeTree)
9495
const errorDialogVisible = ref(false)
9596
let errorNodes: SimpleFlowNode[] = []
9697

src/components/SimpleProcessDesignerV2/src/consts.ts

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,11 @@ export enum NodeType {
4444
/**
4545
* 包容分支节点 (对应包容网关)
4646
*/
47-
INCLUSIVE_BRANCH_NODE = 53
47+
INCLUSIVE_BRANCH_NODE = 53,
48+
/**
49+
* 路由分支节点
50+
*/
51+
ROUTE_BRANCH_NODE = 54
4852
}
4953

5054
export enum NodeId {
@@ -105,6 +109,9 @@ export interface SimpleFlowNode {
105109
activityStatus?: TaskStatusEnum
106110
// 延迟设置
107111
delaySetting?: DelaySetting
112+
// 路由分支
113+
routeGroup?: RouteCondition[]
114+
defaultFlowId?: string
108115
}
109116
// 候选人策略枚举 ( 用于审批节点。抄送节点 )
110117
export enum CandidateStrategy {
@@ -421,13 +428,15 @@ NODE_DEFAULT_TEXT.set(NodeType.COPY_TASK_NODE, '请配置抄送人')
421428
NODE_DEFAULT_TEXT.set(NodeType.CONDITION_NODE, '请设置条件')
422429
NODE_DEFAULT_TEXT.set(NodeType.START_USER_NODE, '请设置发起人')
423430
NODE_DEFAULT_TEXT.set(NodeType.DELAY_TIMER_NODE, '请设置延迟器')
431+
NODE_DEFAULT_TEXT.set(NodeType.ROUTE_BRANCH_NODE, '请设置路由节点')
424432

425433
export const NODE_DEFAULT_NAME = new Map<number, string>()
426434
NODE_DEFAULT_NAME.set(NodeType.USER_TASK_NODE, '审批人')
427435
NODE_DEFAULT_NAME.set(NodeType.COPY_TASK_NODE, '抄送人')
428436
NODE_DEFAULT_NAME.set(NodeType.CONDITION_NODE, '条件')
429437
NODE_DEFAULT_NAME.set(NodeType.START_USER_NODE, '发起人')
430438
NODE_DEFAULT_NAME.set(NodeType.DELAY_TIMER_NODE, '延迟器')
439+
NODE_DEFAULT_NAME.set(NodeType.ROUTE_BRANCH_NODE, '路由分支')
431440

432441
// 候选人策略。暂时不从字典中取。 后续可能调整。控制显示顺序
433442
export const CANDIDATE_STRATEGY: DictDataVO[] = [
@@ -604,3 +613,13 @@ export const DELAY_TYPE = [
604613
{ label: '固定时长', value: DelayTypeEnum.FIXED_TIME_DURATION },
605614
{ label: '固定日期', value: DelayTypeEnum.FIXED_DATE_TIME }
606615
]
616+
617+
/**
618+
* 路由分支结构定义
619+
*/
620+
export type RouteCondition = {
621+
nodeId: string
622+
conditionType: number
623+
conditionExpression: string
624+
conditionGroups: ConditionGroup
625+
}

0 commit comments

Comments
 (0)