Skip to content

Commit e591aa8

Browse files
YunaiVgitee-org
authored andcommitted
!605 合并(!549 工作流增加对serviceTask支持),并优化
Merge pull request !605 from Lesan/feature/bpm
2 parents f93919b + d017ab5 commit e591aa8

File tree

9 files changed

+146
-27
lines changed

9 files changed

+146
-27
lines changed

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@
9696
"@vitejs/plugin-vue": "^5.0.4",
9797
"@vitejs/plugin-vue-jsx": "^3.1.0",
9898
"autoprefixer": "^10.4.17",
99-
"bpmn-js": "8.10.0",
100-
"bpmn-js-properties-panel": "0.46.0",
99+
"bpmn-js": "^17.9.2",
100+
"bpmn-js-properties-panel": "5.23.0",
101101
"consola": "^3.2.3",
102102
"eslint": "^8.57.0",
103103
"eslint-config-prettier": "^9.1.0",

src/components/bpmnProcessDesigner/package/designer/plugins/palette/CustomPalette.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,12 @@ F.prototype.getPaletteEntries = function () {
165165
'bpmn-icon-user-task',
166166
translate('Create User Task')
167167
),
168+
'create.service-task': createAction(
169+
'bpmn:ServiceTask',
170+
'activity',
171+
'bpmn-icon-service',
172+
translate('Create Service Task')
173+
),
168174
'create.data-object': createAction(
169175
'bpmn:DataObjectReference',
170176
'data-object',

src/components/bpmnProcessDesigner/package/designer/plugins/palette/paletteProvider.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,12 @@ PaletteProvider.prototype.getPaletteEntries = function () {
171171
'bpmn-icon-user-task',
172172
translate('Create User Task')
173173
),
174+
'create.service-task': createAction(
175+
'bpmn:ServiceTask',
176+
'activity',
177+
'bpmn-icon-service',
178+
translate('Create Service Task')
179+
),
174180
'create.data-object': createAction(
175181
'bpmn:DataObjectReference',
176182
'data-object',

src/components/bpmnProcessDesigner/package/designer/plugins/translate/zh.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ export default {
5656
'Create EndEvent': '创建结束事件',
5757
'Create Task': '创建任务',
5858
'Create User Task': '创建用户任务',
59+
'Create Service Task': '创建服务任务',
5960
'Create Gateway': '创建网关',
6061
'Create DataObjectReference': '创建数据对象',
6162
'Create DataStoreReference': '创建数据存储',

src/components/bpmnProcessDesigner/package/penal/PropertiesPanel.vue

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<template>
2-
<div class="process-panel__container" :style="{ width: `${width}px`,maxHeight: '700px' }">
2+
<div class="process-panel__container" :style="{ width: `${width}px`, maxHeight: '700px' }">
33
<el-collapse v-model="activeTab">
44
<el-collapse-item name="base">
55
<!-- class="panel-tab__title" -->
@@ -26,8 +26,8 @@
2626
<template #title><Icon icon="ep:list" />表单</template>
2727
<element-form :id="elementId" :type="elementType" />
2828
</el-collapse-item>
29-
<el-collapse-item name="task" v-if="elementType.indexOf('Task') !== -1" key="task">
30-
<template #title><Icon icon="ep:checked" />任务(审批人)</template>
29+
<el-collapse-item name="task" v-if="isTaskCollapseItemShow(elementType)" key="task">
30+
<template #title><Icon icon="ep:checked" />{{ getTaskCollapseItemName(elementType) }}</template>
3131
<element-task :id="elementId" :type="elementType" />
3232
</el-collapse-item>
3333
<el-collapse-item
@@ -72,6 +72,7 @@ import ElementListeners from './listeners/ElementListeners.vue'
7272
import ElementProperties from './properties/ElementProperties.vue'
7373
// import ElementForm from './form/ElementForm.vue'
7474
import UserTaskListeners from './listeners/UserTaskListeners.vue'
75+
import { getTaskCollapseItemName,isTaskCollapseItemShow } from './task/data'
7576
7677
defineOptions({ name: 'MyPropertiesPanel' })
7778

src/components/bpmnProcessDesigner/package/penal/properties/ElementProperties.vue

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@ const attributeFormRef = ref()
7575
const bpmnInstances = () => (window as any)?.bpmnInstances
7676
7777
const resetAttributesList = () => {
78-
console.log(window, 'windowwindowwindowwindowwindowwindowwindow')
7978
bpmnElement.value = bpmnInstances().bpmnElement
8079
otherExtensionList.value = [] // 其他扩展配置
8180
bpmnElementProperties.value =
@@ -85,7 +84,7 @@ const resetAttributesList = () => {
8584
otherExtensionList.value.push(ex)
8685
}
8786
return ex.$type === `${prefix}:Properties`
88-
}) ?? []
87+
}) ?? [];
8988
9089
// 保存所有的 扩展属性字段
9190
bpmnElementPropertyList.value = bpmnElementProperties.value.reduce(

src/components/bpmnProcessDesigner/package/penal/task/ElementTask.vue

Lines changed: 4 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@
2929
</template>
3030

3131
<script lang="ts" setup>
32-
import UserTask from './task-components/UserTask.vue'
33-
import ScriptTask from './task-components/ScriptTask.vue'
34-
import ReceiveTask from './task-components/ReceiveTask.vue'
32+
import { installedComponent } from './data'
3533
3634
defineOptions({ name: 'ElementTaskConfig' })
3735
@@ -45,14 +43,7 @@ const taskConfigForm = ref({
4543
exclusive: false
4644
})
4745
const witchTaskComponent = ref()
48-
const installedComponent = ref({
49-
// 手工任务与普通任务一致,不需要其他配置
50-
// 接收消息任务,需要在全局下插入新的消息实例,并在该节点下的 messageRef 属性绑定该实例
51-
// 发送任务、服务任务、业务规则任务共用一个相同配置
52-
UserTask: 'UserTask', // 用户任务配置
53-
ScriptTask: 'ScriptTask', // 脚本任务配置
54-
ReceiveTask: 'ReceiveTask' // 消息接收任务
55-
})
46+
5647
const bpmnElement = ref()
5748
5849
const bpmnInstances = () => (window as any).bpmnInstances
@@ -78,15 +69,8 @@ watch(
7869
watch(
7970
() => props.type,
8071
() => {
81-
// witchTaskComponent.value = installedComponent.value[props.type]
82-
if (props.type == installedComponent.value.UserTask) {
83-
witchTaskComponent.value = UserTask
84-
}
85-
if (props.type == installedComponent.value.ScriptTask) {
86-
witchTaskComponent.value = ScriptTask
87-
}
88-
if (props.type == installedComponent.value.ReceiveTask) {
89-
witchTaskComponent.value = ReceiveTask
72+
if (props.type) {
73+
witchTaskComponent.value = installedComponent[props.type].componet
9074
}
9175
},
9276
{ immediate: true }
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import UserTask from './task-components/UserTask.vue'
2+
import ServiceTask from './task-components/ServiceTask.vue'
3+
import ScriptTask from './task-components/ScriptTask.vue'
4+
import ReceiveTask from './task-components/ReceiveTask.vue'
5+
6+
export const installedComponent = {
7+
UserTask: {
8+
name: '用户任务',
9+
componet: UserTask
10+
},
11+
ServiceTask: {
12+
name: '服务任务',
13+
componet: ServiceTask
14+
},
15+
ScriptTask: {
16+
name: '脚本任务',
17+
componet: ScriptTask
18+
},
19+
ReceiveTask: {
20+
name: '接收任务',
21+
componet: ReceiveTask
22+
}
23+
}
24+
25+
export const getTaskCollapseItemName = (elementType) => {
26+
return installedComponent[elementType].name
27+
}
28+
29+
export const isTaskCollapseItemShow = (elementType) => {
30+
return installedComponent[elementType]
31+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
<template>
2+
<div>
3+
<el-form-item label="执行类型" key="executeType">
4+
<el-select v-model="serviceTaskForm.executeType">
5+
<el-option label="Java类" value="class" />
6+
<el-option label="表达式" value="expression" />
7+
<el-option label="代理表达式" value="delegateExpression" />
8+
</el-select>
9+
</el-form-item>
10+
<el-form-item
11+
v-if="serviceTaskForm.executeType === 'class'"
12+
label="Java类"
13+
prop="class"
14+
key="execute-class"
15+
>
16+
<el-input v-model="serviceTaskForm.class" clearable @change="updateElementTask" />
17+
</el-form-item>
18+
<el-form-item
19+
v-if="serviceTaskForm.executeType === 'expression'"
20+
label="表达式"
21+
prop="expression"
22+
key="execute-expression"
23+
>
24+
<el-input v-model="serviceTaskForm.expression" clearable @change="updateElementTask" />
25+
</el-form-item>
26+
<el-form-item
27+
v-if="serviceTaskForm.executeType === 'delegateExpression'"
28+
label="代理表达式"
29+
prop="delegateExpression"
30+
key="execute-delegate"
31+
>
32+
<el-input v-model="serviceTaskForm.delegateExpression" clearable @change="updateElementTask" />
33+
</el-form-item>
34+
</div>
35+
</template>
36+
37+
<script lang="ts" setup>
38+
defineOptions({ name: 'ServiceTask' })
39+
const props = defineProps({
40+
id: String,
41+
type: String
42+
})
43+
44+
const defaultTaskForm = ref({
45+
executeType: '',
46+
class: '',
47+
expression: '',
48+
delegateExpression: ''
49+
})
50+
51+
const serviceTaskForm = ref<any>({})
52+
const bpmnElement = ref()
53+
54+
const bpmnInstances = () => (window as any)?.bpmnInstances
55+
56+
const resetTaskForm = () => {
57+
for (let key in defaultTaskForm.value) {
58+
let value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
59+
serviceTaskForm.value[key] = value
60+
if (value) {
61+
serviceTaskForm.value.executeType = key
62+
}
63+
}
64+
}
65+
66+
const updateElementTask = () => {
67+
let taskAttr = Object.create(null);
68+
const type = serviceTaskForm.value.executeType;
69+
for (let key in serviceTaskForm.value) {
70+
if (key !== 'executeType' && key !== type) taskAttr[key] = null;
71+
}
72+
taskAttr[type] = serviceTaskForm.value[type] || "";
73+
bpmnInstances().modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
74+
}
75+
76+
onBeforeUnmount(() => {
77+
bpmnElement.value = null
78+
})
79+
80+
watch(
81+
() => props.id,
82+
() => {
83+
bpmnElement.value = bpmnInstances().bpmnElement
84+
nextTick(() => {
85+
resetTaskForm()
86+
})
87+
},
88+
{ immediate: true }
89+
)
90+
91+
</script>

0 commit comments

Comments
 (0)