Commit 63055cc559f8eef3fc4d621fb72584115260d69f
1 parent
3a954b47
详情显示bpmn
Showing
3 changed files
with
85 additions
and
7 deletions
yudao-ui-admin-vue3/src/components/bpmnProcessDesigner/package/designer/ProcessViewer.vue
| @@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
| 10 | import BpmnViewer from 'bpmn-js/lib/Viewer' | 10 | import BpmnViewer from 'bpmn-js/lib/Viewer' |
| 11 | import DefaultEmptyXML from './plugins/defaultEmpty' | 11 | import DefaultEmptyXML from './plugins/defaultEmpty' |
| 12 | import { onMounted, onBeforeUnmount, provide, ref, watch } from 'vue' | 12 | import { onMounted, onBeforeUnmount, provide, ref, watch } from 'vue' |
| 13 | +import { DICT_TYPE, getIntDictOptions } from '@/utils/dict' | ||
| 13 | const props = defineProps({ | 14 | const props = defineProps({ |
| 14 | value: { | 15 | value: { |
| 15 | // BPMN XML 字符串 | 16 | // BPMN XML 字符串 |
| @@ -265,15 +266,31 @@ const elementHover = (element) => { | @@ -265,15 +266,31 @@ const elementHover = (element) => { | ||
| 265 | !elementOverlayIds.value && (elementOverlayIds.value = {}) | 266 | !elementOverlayIds.value && (elementOverlayIds.value = {}) |
| 266 | !overlays.value && (overlays.value = bpmnModeler.get('overlays')) | 267 | !overlays.value && (overlays.value = bpmnModeler.get('overlays')) |
| 267 | // 展示信息 | 268 | // 展示信息 |
| 269 | + console.log(activityLists.value, 'activityLists.value') | ||
| 270 | + console.log(element.value, 'element.value') | ||
| 268 | const activity = activityLists.value.find((m) => m.key === element.value.id) | 271 | const activity = activityLists.value.find((m) => m.key === element.value.id) |
| 272 | + console.log(activity, 'activityactivityactivityactivity') | ||
| 269 | if (!activity) { | 273 | if (!activity) { |
| 270 | return | 274 | return |
| 271 | } | 275 | } |
| 276 | + console.log(elementOverlayIds.value, 'elementOverlayIds.value') | ||
| 277 | + console.log(element.value.id, 'element.value.id') | ||
| 278 | + console.log( | ||
| 279 | + elementOverlayIds.value[element.value.id], | ||
| 280 | + 'elementOverlayIds.value[element.value.id]' | ||
| 281 | + ) | ||
| 282 | + console.log( | ||
| 283 | + !elementOverlayIds.value[element.value.id], | ||
| 284 | + '!elementOverlayIds.value[element.value.id]' | ||
| 285 | + ) | ||
| 286 | + console.log(element.value.type, 'element.value.type') | ||
| 272 | if (!elementOverlayIds.value[element.value.id] && element.value.type !== 'bpmn:Process') { | 287 | if (!elementOverlayIds.value[element.value.id] && element.value.type !== 'bpmn:Process') { |
| 288 | + console.log('进入') | ||
| 273 | let html = `<div class="element-overlays"> | 289 | let html = `<div class="element-overlays"> |
| 274 | <p>Elemet id: ${element.value.id}</p> | 290 | <p>Elemet id: ${element.value.id}</p> |
| 275 | <p>Elemet type: ${element.value.type}</p> | 291 | <p>Elemet type: ${element.value.type}</p> |
| 276 | </div>` // 默认值 | 292 | </div>` // 默认值 |
| 293 | + console.log(processInstance.value, 'processInstance') | ||
| 277 | if (element.value.type === 'bpmn:StartEvent' && processInstance.value) { | 294 | if (element.value.type === 'bpmn:StartEvent' && processInstance.value) { |
| 278 | html = `<p>发起人:${processInstance.value.startUser.nickname}</p> | 295 | html = `<p>发起人:${processInstance.value.startUser.nickname}</p> |
| 279 | <p>部门:${processInstance.value.startUser.deptName}</p> | 296 | <p>部门:${processInstance.value.startUser.deptName}</p> |
| @@ -286,7 +303,7 @@ const elementHover = (element) => { | @@ -286,7 +303,7 @@ const elementHover = (element) => { | ||
| 286 | } | 303 | } |
| 287 | html = `<p>审批人:${task.assigneeUser.nickname}</p> | 304 | html = `<p>审批人:${task.assigneeUser.nickname}</p> |
| 288 | <p>部门:${task.assigneeUser.deptName}</p> | 305 | <p>部门:${task.assigneeUser.deptName}</p> |
| 289 | - <p>结果:${getDictDataLabel( | 306 | + <p>结果:${getIntDictOptions( |
| 290 | DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, | 307 | DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, |
| 291 | task.result | 308 | task.result |
| 292 | )}</p> | 309 | )}</p> |
| @@ -306,7 +323,7 @@ const elementHover = (element) => { | @@ -306,7 +323,7 @@ const elementHover = (element) => { | ||
| 306 | } | 323 | } |
| 307 | console.log(html) | 324 | console.log(html) |
| 308 | } else if (element.value.type === 'bpmn:EndEvent' && processInstance.value) { | 325 | } else if (element.value.type === 'bpmn:EndEvent' && processInstance.value) { |
| 309 | - html = `<p>结果:${getDictDataLabel( | 326 | + html = `<p>结果:${getIntDictOptions( |
| 310 | DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, | 327 | DICT_TYPE.BPM_PROCESS_INSTANCE_RESULT, |
| 311 | processInstance.value.result | 328 | processInstance.value.result |
| 312 | )}</p>` | 329 | )}</p>` |
| @@ -314,10 +331,19 @@ const elementHover = (element) => { | @@ -314,10 +331,19 @@ const elementHover = (element) => { | ||
| 314 | html += `<p>结束时间:${parseTime(processInstance.value.endTime)}</p>` | 331 | html += `<p>结束时间:${parseTime(processInstance.value.endTime)}</p>` |
| 315 | } | 332 | } |
| 316 | } | 333 | } |
| 334 | + console.log(html, 'html111111111111111') | ||
| 335 | + console.log( | ||
| 336 | + elementOverlayIds.value[element.value.id], | ||
| 337 | + 'elementOverlayIds.value[element.value.id]' | ||
| 338 | + ) | ||
| 317 | elementOverlayIds.value[element.value.id] = overlays.value.add(element.value, { | 339 | elementOverlayIds.value[element.value.id] = overlays.value.add(element.value, { |
| 318 | position: { left: 0, bottom: 0 }, | 340 | position: { left: 0, bottom: 0 }, |
| 319 | html: `<div class="element-overlays">${html}</div>` | 341 | html: `<div class="element-overlays">${html}</div>` |
| 320 | }) | 342 | }) |
| 343 | + console.log( | ||
| 344 | + elementOverlayIds.value[element.value.id], | ||
| 345 | + 'elementOverlayIds.value[element.value.id]' | ||
| 346 | + ) | ||
| 321 | } | 347 | } |
| 322 | } | 348 | } |
| 323 | // 流程图的元素被 out | 349 | // 流程图的元素被 out |
| @@ -325,6 +351,50 @@ const elementOut = (element) => { | @@ -325,6 +351,50 @@ const elementOut = (element) => { | ||
| 325 | overlays.value.remove({ element }) | 351 | overlays.value.remove({ element }) |
| 326 | elementOverlayIds.value[element.id] = null | 352 | elementOverlayIds.value[element.id] = null |
| 327 | } | 353 | } |
| 354 | +const parseTime = (time) => { | ||
| 355 | + if (!time) { | ||
| 356 | + return null | ||
| 357 | + } | ||
| 358 | + const format = '{y}-{m}-{d} {h}:{i}:{s}' | ||
| 359 | + let date | ||
| 360 | + if (typeof time === 'object') { | ||
| 361 | + date = time | ||
| 362 | + } else { | ||
| 363 | + if (typeof time === 'string' && /^[0-9]+$/.test(time)) { | ||
| 364 | + time = parseInt(time) | ||
| 365 | + } else if (typeof time === 'string') { | ||
| 366 | + time = time | ||
| 367 | + .replace(new RegExp(/-/gm), '/') | ||
| 368 | + .replace('T', ' ') | ||
| 369 | + .replace(new RegExp(/\.[\d]{3}/gm), '') | ||
| 370 | + } | ||
| 371 | + if (typeof time === 'number' && time.toString().length === 10) { | ||
| 372 | + time = time * 1000 | ||
| 373 | + } | ||
| 374 | + date = new Date(time) | ||
| 375 | + } | ||
| 376 | + const formatObj = { | ||
| 377 | + y: date.getFullYear(), | ||
| 378 | + m: date.getMonth() + 1, | ||
| 379 | + d: date.getDate(), | ||
| 380 | + h: date.getHours(), | ||
| 381 | + i: date.getMinutes(), | ||
| 382 | + s: date.getSeconds(), | ||
| 383 | + a: date.getDay() | ||
| 384 | + } | ||
| 385 | + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { | ||
| 386 | + let value = formatObj[key] | ||
| 387 | + // Note: getDay() returns 0 on Sunday | ||
| 388 | + if (key === 'a') { | ||
| 389 | + return ['日', '一', '二', '三', '四', '五', '六'][value] | ||
| 390 | + } | ||
| 391 | + if (result.length > 0 && value < 10) { | ||
| 392 | + value = '0' + value | ||
| 393 | + } | ||
| 394 | + return value || 0 | ||
| 395 | + }) | ||
| 396 | + return time_str | ||
| 397 | +} | ||
| 328 | 398 | ||
| 329 | onMounted(() => { | 399 | onMounted(() => { |
| 330 | xml.value = props.value | 400 | xml.value = props.value |
yudao-ui-admin-vue3/src/views/bpm/processInstance/create.vue
| @@ -38,7 +38,13 @@ | @@ -38,7 +38,13 @@ | ||
| 38 | <span class="el-icon-picture-outline">流程图</span> | 38 | <span class="el-icon-picture-outline">流程图</span> |
| 39 | </div> | 39 | </div> |
| 40 | <!-- TODO 芋艿:待完成??? --> | 40 | <!-- TODO 芋艿:待完成??? --> |
| 41 | - <!-- <my-process-viewer key="designer" v-model="bpmnXML" v-bind="bpmnControlForm" /> --> | 41 | + <my-process-viewer |
| 42 | + key="designer" | ||
| 43 | + v-model="bpmnXML" | ||
| 44 | + :value="bpmnXML" | ||
| 45 | + v-bind="bpmnControlForm" | ||
| 46 | + :prefix="bpmnControlForm.prefix" | ||
| 47 | + /> | ||
| 42 | </el-card> | 48 | </el-card> |
| 43 | </div> | 49 | </div> |
| 44 | </ContentWrap> | 50 | </ContentWrap> |
| @@ -89,7 +95,7 @@ const handleSelect = async (row) => { | @@ -89,7 +95,7 @@ const handleSelect = async (row) => { | ||
| 89 | 95 | ||
| 90 | // 加载流程图 | 96 | // 加载流程图 |
| 91 | DefinitionApi.getProcessDefinitionBpmnXMLApi(row.id).then((response) => { | 97 | DefinitionApi.getProcessDefinitionBpmnXMLApi(row.id).then((response) => { |
| 92 | - bpmnXML.value = response.data | 98 | + bpmnXML.value = response |
| 93 | }) | 99 | }) |
| 94 | // 情况二:业务表单 | 100 | // 情况二:业务表单 |
| 95 | } else if (row.formCustomCreatePath) { | 101 | } else if (row.formCustomCreatePath) { |
| @@ -126,9 +132,9 @@ const submitForm = async (formData) => { | @@ -126,9 +132,9 @@ const submitForm = async (formData) => { | ||
| 126 | 132 | ||
| 127 | // // BPMN 数据 | 133 | // // BPMN 数据 |
| 128 | const bpmnXML = ref(null) | 134 | const bpmnXML = ref(null) |
| 129 | -// const bpmnControlForm=ref( { | ||
| 130 | -// prefix: "flowable" | ||
| 131 | -// }) | 135 | +const bpmnControlForm = ref({ |
| 136 | + prefix: 'flowable' | ||
| 137 | +}) | ||
| 132 | </script> | 138 | </script> |
| 133 | 139 | ||
| 134 | <style lang="scss"> | 140 | <style lang="scss"> |
yudao-ui-admin-vue3/src/views/bpm/processInstance/detail.vue
| @@ -144,7 +144,9 @@ | @@ -144,7 +144,9 @@ | ||
| 144 | <my-process-viewer | 144 | <my-process-viewer |
| 145 | key="designer" | 145 | key="designer" |
| 146 | v-model="bpmnXML" | 146 | v-model="bpmnXML" |
| 147 | + :value="bpmnXML" | ||
| 147 | v-bind="bpmnControlForm" | 148 | v-bind="bpmnControlForm" |
| 149 | + :prefix="bpmnControlForm.prefix" | ||
| 148 | :activityData="activityList" | 150 | :activityData="activityList" |
| 149 | :processInstanceData="processInstance" | 151 | :processInstanceData="processInstance" |
| 150 | :taskData="tasks" | 152 | :taskData="tasks" |