Skip to content

Commit 9e6da44

Browse files
committed
Vue3 重构:流程实例的详情(流程图预览)
1 parent c5a3fa1 commit 9e6da44

File tree

2 files changed

+63
-50
lines changed

2 files changed

+63
-50
lines changed
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<template>
2+
<el-card class="box-card" v-loading="loading">
3+
<template #header>
4+
<span class="el-icon-picture-outline">流程图</span>
5+
</template>
6+
<my-process-viewer
7+
key="designer"
8+
:value="bpmnXml"
9+
v-bind="bpmnControlForm"
10+
:prefix="bpmnControlForm.prefix"
11+
:activityData="activityList"
12+
:processInstanceData="processInstance"
13+
:taskData="tasks"
14+
/>
15+
</el-card>
16+
</template>
17+
<script setup lang="ts">
18+
import { propTypes } from '@/utils/propTypes'
19+
import * as ActivityApi from '@/api/bpm/activity'
20+
// import * as DefinitionApi from '@/api/bpm/definition'
21+
22+
const props = defineProps({
23+
loading: propTypes.bool, // 是否加载中
24+
id: propTypes.string, // 流程实例的编号
25+
processInstance: propTypes.any, // 流程实例的信息
26+
tasks: propTypes.array, // 流程任务的数组
27+
bpmnXml: propTypes.string // BPMN XML
28+
})
29+
30+
const bpmnControlForm = ref({
31+
prefix: 'flowable'
32+
})
33+
const activityList = ref([]) // 任务列表
34+
// const bpmnXML = computed(() => { // TODO 芋艿:不晓得为啊哈不能这么搞
35+
// if (!props.processInstance || !props.processInstance.processDefinition) {
36+
// return
37+
// }
38+
// return DefinitionApi.getProcessDefinitionBpmnXML(props.processInstance.processDefinition.id)
39+
// })
40+
41+
/** 初始化 */
42+
onMounted(async () => {
43+
activityList.value = await ActivityApi.getActivityList({
44+
processInstanceId: props.id
45+
})
46+
})
47+
</script>
48+
<style>
49+
.box-card {
50+
width: 100%;
51+
margin-bottom: 20px;
52+
}
53+
</style>

src/views/bpm/processInstance/detail/index.vue

Lines changed: 10 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -127,38 +127,29 @@
127127
</el-card>
128128

129129
<!-- 高亮流程图 -->
130-
<el-card class="box-card" v-loading="processInstanceLoading">
131-
<template #header>
132-
<span class="el-icon-picture-outline">流程图</span>
133-
</template>
134-
<my-process-viewer
135-
key="designer"
136-
v-model="bpmnXML"
137-
:value="bpmnXML"
138-
v-bind="bpmnControlForm"
139-
:prefix="bpmnControlForm.prefix"
140-
:activityData="activityList"
141-
:processInstanceData="processInstance"
142-
:taskData="tasks"
143-
/>
144-
</el-card>
130+
<ProcessInstanceBpmnViewer
131+
:id="id"
132+
:process-instance="processInstance"
133+
:loading="processInstanceLoading"
134+
:tasks="tasks"
135+
:bpmn-xml="bpmnXML"
136+
/>
145137

146138
<!-- 弹窗:转派审批人 -->
147139
<TaskUpdateAssigneeForm ref="taskUpdateAssigneeFormRef" @success="getDetail" />
148140
</ContentWrap>
149141
</template>
150142
<script setup lang="ts">
151143
import { parseTime } from '@/utils/formatTime'
152-
import * as UserApi from '@/api/system/user'
153144
import * as ProcessInstanceApi from '@/api/bpm/processInstance'
154-
import * as DefinitionApi from '@/api/bpm/definition'
155145
import * as TaskApi from '@/api/bpm/task'
156-
import * as ActivityApi from '@/api/bpm/activity'
157146
import { formatPast2 } from '@/utils/formatTime'
158147
import { setConfAndFields2 } from '@/utils/formCreate'
159148
import type { ApiAttrs } from '@form-create/element-ui/types/config'
160149
import { useUserStore } from '@/store/modules/user'
161150
import TaskUpdateAssigneeForm from './TaskUpdateAssigneeForm.vue'
151+
import ProcessInstanceBpmnViewer from './ProcessInstanceBpmnViewer.vue'
152+
import * as DefinitionApi from '@/api/bpm/definition'
162153
163154
const { query } = useRoute() // 查询参数
164155
const message = useMessage() // 消息弹窗
@@ -249,6 +240,7 @@ const getTimelineItemType = (item) => {
249240
}
250241
251242
// ========== 审批记录 ==========
243+
const bpmnXML = ref('')
252244
253245
/** 转派审批人 */
254246
const taskUpdateAssigneeFormRef = ref()
@@ -265,32 +257,12 @@ const handleDelegate = async (task) => {
265257
/** 处理审批退回的操作 */
266258
const handleBack = async (task) => {
267259
message.error('暂不支持【退回】功能!')
268-
// 可参考 http://blog.wya1.com/article/636697030/details/7296
269-
// const data = {
270-
// id: task.id,
271-
// assigneeUserId: 1
272-
// }
273-
// backTask(data).then(response => {
274-
// this.$modal.msgSuccess("回退成功!");
275-
// this.getDetail(); // 获得最新详情
276-
// });
277260
console.log(task)
278261
}
279262
280-
// ========== 高亮流程图 ==========
281-
const bpmnXML = ref(null)
282-
const bpmnControlForm = ref({
283-
prefix: 'flowable'
284-
})
285-
const activityList = ref([])
286-
287263
// ========== 初始化 ==========
288264
onMounted(() => {
289265
getDetail()
290-
// 加载用户的列表
291-
UserApi.getSimpleUserList().then((data) => {
292-
userOptions.value.push(...data)
293-
})
294266
})
295267
296268
const getDetail = () => {
@@ -324,13 +296,6 @@ const getDetail = () => {
324296
DefinitionApi.getProcessDefinitionBpmnXML(processDefinition.id).then((data) => {
325297
bpmnXML.value = data
326298
})
327-
328-
// 加载活动列表
329-
ActivityApi.getActivityList({
330-
processInstanceId: data.id
331-
}).then((data) => {
332-
activityList.value = data
333-
})
334299
})
335300
.finally(() => {
336301
processInstanceLoading.value = false
@@ -387,12 +352,7 @@ const getDetail = () => {
387352
})
388353
}
389354
</script>
390-
391355
<style lang="scss">
392-
.my-process-designer {
393-
height: calc(100vh - 200px);
394-
}
395-
396356
.box-card {
397357
width: 100%;
398358
margin-bottom: 20px;

0 commit comments

Comments
 (0)