Skip to content

Commit a097560

Browse files
committed
【功能优化】条件分支、包容分支后面不允许直接添加并行分支
1 parent e504be7 commit a097560

File tree

7 files changed

+227
-171
lines changed

7 files changed

+227
-171
lines changed

src/components/SimpleProcessDesignerV2/src/NodeHandler.vue

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,7 @@
2727
</div>
2828
<div class="handler-item-text">条件分支</div>
2929
</div>
30-
<div
31-
class="handler-item"
32-
@click="addNode(NodeType.PARALLEL_BRANCH_NODE)"
33-
v-if="
34-
NodeType.CONDITION_BRANCH_NODE !== currentNode?.type &&
35-
NodeType.INCLUSIVE_BRANCH_NODE !== currentNode?.type
36-
"
37-
>
30+
<div class="handler-item" @click="addNode(NodeType.PARALLEL_BRANCH_NODE)">
3831
<div class="handler-item-icon parallel">
3932
<span class="iconfont icon-size icon-parallel"></span>
4033
</div>
@@ -70,8 +63,10 @@ import { generateUUID } from '@/utils'
7063
defineOptions({
7164
name: 'NodeHandler'
7265
})
73-
const popoverShow = ref(false)
7466
67+
const message = useMessage() // 消息弹窗
68+
69+
const popoverShow = ref(false)
7570
const props = defineProps({
7671
childNode: {
7772
type: Object as () => SimpleFlowNode,
@@ -87,6 +82,17 @@ const emits = defineEmits(['update:childNode'])
8782
const readonly = inject<Boolean>('readonly') // 是否只读
8883
8984
const addNode = (type: number) => {
85+
// 校验:条件分支、包容分支后面,不允许直接添加并行分支
86+
if (
87+
type === NodeType.PARALLEL_BRANCH_NODE &&
88+
[NodeType.CONDITION_BRANCH_NODE, NodeType.INCLUSIVE_BRANCH_NODE].includes(
89+
props.currentNode?.type
90+
)
91+
) {
92+
message.error('条件分支、包容分支后面,不允许直接添加并行分支')
93+
return
94+
}
95+
9096
popoverShow.value = false
9197
if (type === NodeType.USER_TASK_NODE) {
9298
const id = 'Activity_' + generateUUID()

src/components/SimpleProcessDesignerV2/src/nodes/CopyTaskNode.vue

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
<div class="node-container">
44
<div
55
class="node-box"
6-
:class="[{ 'node-config-error': !currentNode.showText }, `${useTaskStatusClass(currentNode?.activityStatus)}`]"
6+
:class="[
7+
{ 'node-config-error': !currentNode.showText },
8+
`${useTaskStatusClass(currentNode?.activityStatus)}`
9+
]"
710
>
811
<div class="node-title-container">
912
<div class="node-title-icon copy-task"><span class="iconfont icon-copy"></span></div>
@@ -37,7 +40,11 @@
3740
</div>
3841

3942
<!-- 传递子节点给添加节点组件。会在子节点前面添加节点 -->
40-
<NodeHandler v-if="currentNode" v-model:child-node="currentNode.childNode" :current-node="currentNode"/>
43+
<NodeHandler
44+
v-if="currentNode"
45+
v-model:child-node="currentNode.childNode"
46+
:current-node="currentNode"
47+
/>
4148
</div>
4249
<CopyTaskNodeConfig
4350
v-if="!readonly && currentNode"

src/components/SimpleProcessDesignerV2/src/nodes/ExclusiveNode.vue

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
<template>
22
<div class="branch-node-wrapper">
33
<div class="branch-node-container">
4-
<div v-if="readonly" class="branch-node-readonly" :class="`${useTaskStatusClass(currentNode?.activityStatus)}`">
4+
<div
5+
v-if="readonly"
6+
class="branch-node-readonly"
7+
:class="`${useTaskStatusClass(currentNode?.activityStatus)}`"
8+
>
59
<span class="iconfont icon-exclusive icon-size condition"></span>
610
</div>
711
<el-button v-else class="branch-node-add" color="#67c23a" @click="addCondition" plain
@@ -23,7 +27,13 @@
2327
</template>
2428
<div class="node-wrapper">
2529
<div class="node-container">
26-
<div class="node-box" :class="[{ 'node-config-error': !item.showText }, `${useTaskStatusClass(item.activityStatus)}`]">
30+
<div
31+
class="node-box"
32+
:class="[
33+
{ 'node-config-error': !item.showText },
34+
`${useTaskStatusClass(item.activityStatus)}`
35+
]"
36+
>
2737
<div class="branch-node-title-container">
2838
<div v-if="!readonly && showInputs[index]">
2939
<input
@@ -87,7 +97,11 @@
8797
/>
8898
</div>
8999
</div>
90-
<NodeHandler v-if="currentNode" v-model:child-node="currentNode.childNode" :current-node="currentNode" />
100+
<NodeHandler
101+
v-if="currentNode"
102+
v-model:child-node="currentNode.childNode"
103+
:current-node="currentNode"
104+
/>
91105
</div>
92106
</template>
93107

@@ -120,7 +134,7 @@ const emits = defineEmits<{
120134
]
121135
}>()
122136
// 是否只读
123-
const readonly = inject<Boolean>('readonly')
137+
const readonly = inject<Boolean>('readonly')
124138
const currentNode = ref<SimpleFlowNode>(props.flowNode)
125139
watch(
126140
() => props.flowNode,

src/components/SimpleProcessDesignerV2/src/nodes/InclusiveNode.vue

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
<template>
22
<div class="branch-node-wrapper">
33
<div class="branch-node-container">
4-
<div v-if="readonly" class="branch-node-readonly" :class="`${useTaskStatusClass(currentNode?.activityStatus)}`" >
4+
<div
5+
v-if="readonly"
6+
class="branch-node-readonly"
7+
:class="`${useTaskStatusClass(currentNode?.activityStatus)}`"
8+
>
59
<span class="iconfont icon-inclusive icon-size inclusive"></span>
610
</div>
7-
<el-button v-else class="branch-node-add" color="#345da2" @click="addCondition" plain>添加条件</el-button>
11+
<el-button v-else class="branch-node-add" color="#345da2" @click="addCondition" plain
12+
>添加条件</el-button
13+
>
814
<div
915
class="branch-node-item"
1016
v-for="(item, index) in currentNode.conditionNodes"
@@ -20,7 +26,13 @@
2026
</template>
2127
<div class="node-wrapper">
2228
<div class="node-container">
23-
<div class="node-box" :class="[{ 'node-config-error': !item.showText }, `${useTaskStatusClass(item.activityStatus)}`]">
29+
<div
30+
class="node-box"
31+
:class="[
32+
{ 'node-config-error': !item.showText },
33+
`${useTaskStatusClass(item.activityStatus)}`
34+
]"
35+
>
2436
<div class="branch-node-title-container">
2537
<div v-if="showInputs[index]">
2638
<input
@@ -41,7 +53,10 @@
4153
{{ NODE_DEFAULT_TEXT.get(NodeType.CONDITION_NODE) }}
4254
</div>
4355
</div>
44-
<div class="node-toolbar" v-if="!readonly && index + 1 !== currentNode.conditionNodes?.length">
56+
<div
57+
class="node-toolbar"
58+
v-if="!readonly && index + 1 !== currentNode.conditionNodes?.length"
59+
>
4560
<div class="toolbar-icon">
4661
<Icon
4762
color="#0089ff"
@@ -61,13 +76,17 @@
6176

6277
<div
6378
class="branch-node-move move-node-right"
64-
v-if="!readonly && currentNode.conditionNodes && index < currentNode.conditionNodes.length - 2"
79+
v-if="
80+
!readonly &&
81+
currentNode.conditionNodes &&
82+
index < currentNode.conditionNodes.length - 2
83+
"
6584
@click="moveNode(index, 1)"
6685
>
6786
<Icon icon="ep:arrow-right" />
6887
</div>
6988
</div>
70-
<NodeHandler v-model:child-node="item.childNode" :current-node="item"/>
89+
<NodeHandler v-model:child-node="item.childNode" :current-node="item" />
7190
</div>
7291
</div>
7392
<ConditionNodeConfig :node-index="index" :condition-node="item" :ref="item.id" />
@@ -80,7 +99,11 @@
8099
/>
81100
</div>
82101
</div>
83-
<NodeHandler v-if="currentNode" v-model:child-node="currentNode.childNode" :current-node="currentNode"/>
102+
<NodeHandler
103+
v-if="currentNode"
104+
v-model:child-node="currentNode.childNode"
105+
:current-node="currentNode"
106+
/>
84107
</div>
85108
</template>
86109

src/components/SimpleProcessDesignerV2/src/nodes/ParallelNode.vue

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
<template>
22
<div class="branch-node-wrapper">
33
<div class="branch-node-container">
4-
<div v-if="readonly" class="branch-node-readonly" :class="`${useTaskStatusClass(currentNode?.activityStatus)}`">
4+
<div
5+
v-if="readonly"
6+
class="branch-node-readonly"
7+
:class="`${useTaskStatusClass(currentNode?.activityStatus)}`"
8+
>
59
<span class="iconfont icon-parallel icon-size parallel"></span>
610
</div>
7-
<el-button v-else class="branch-node-add" color="#626aef" @click="addCondition" plain>添加分支</el-button>
11+
<el-button v-else class="branch-node-add" color="#626aef" @click="addCondition" plain
12+
>添加分支</el-button
13+
>
814
<div
915
class="branch-node-item"
1016
v-for="(item, index) in currentNode.conditionNodes"
@@ -42,7 +48,7 @@
4248
{{ NODE_DEFAULT_TEXT.get(NodeType.CONDITION_NODE) }}
4349
</div>
4450
</div>
45-
<div v-if="!readonly" class="node-toolbar">
51+
<div v-if="!readonly" class="node-toolbar">
4652
<div class="toolbar-icon">
4753
<Icon
4854
color="#0089ff"
@@ -53,7 +59,7 @@
5359
</div>
5460
</div>
5561
</div>
56-
<NodeHandler v-model:child-node="item.childNode" :current-node="item"/>
62+
<NodeHandler v-model:child-node="item.childNode" :current-node="item" />
5763
</div>
5864
</div>
5965
<!-- 递归显示子节点 -->
@@ -65,7 +71,11 @@
6571
/>
6672
</div>
6773
</div>
68-
<NodeHandler v-if="currentNode" v-model:child-node="currentNode.childNode" :current-node="currentNode" />
74+
<NodeHandler
75+
v-if="currentNode"
76+
v-model:child-node="currentNode.childNode"
77+
:current-node="currentNode"
78+
/>
6979
</div>
7080
</template>
7181

@@ -98,7 +108,7 @@ const emits = defineEmits<{
98108
99109
const currentNode = ref<SimpleFlowNode>(props.flowNode)
100110
// 是否只读
101-
const readonly = inject<Boolean>('readonly')
111+
const readonly = inject<Boolean>('readonly')
102112
103113
watch(
104114
() => props.flowNode,

0 commit comments

Comments
 (0)